1. 程式人生 > >谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

Ensemble learning結合不同機器學習模型預測,被廣泛用於神經網路以實現最先進的效能,得益於豐富的歷史和理論保證,成功的挑戰,如Netflix獎和各種Kaggle競賽。然而,由於訓練時間長,它們在實踐中使用不多,機器學習模型候選者選擇需要其自己的領域專業知識。但隨著計算能力和專用深度學習硬體(如TPU)變得越來越容易獲得,機器學習模型將變得更大,整體效果將變得更加突出。現在,想象一個工具可以自動搜尋神經架構,並學會將最好的架構組合成一個高質量的模型。

今天,谷歌推出了AdaNet,這是一個基於TensorFlow的輕量級框架,可以通過最少的專家干預自動學習高質量的模型。AdaNet建立在谷歌最近的強化學習和基於進化的AutoML工作的基礎上,在提供學習保證的同時又快速靈活。重要的是,AdaNet提供了一個通用框架,不僅可以學習神經網路架構,還可以學習整合以獲得更好的模型。

AdaNet易於使用,可建立高質量的模型,為機器學習從業者節省了通常用於選擇最佳神經網路架構的時間,實現了將神經架構學習為子網路整合的自適應演算法。AdaNet能夠新增不同深度和寬度的子網路,以建立多樣化的整合,並通過引數數量來改善效能。

谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

AdaNet自適應地生成了一系列神經網路。在每次迭代中,它測量每個候選物件的整合損耗,並選擇最好的一個進行下一次迭代。

快速且易於使用

AdaNet實現了TensorFlow Estimator介面,通過封裝訓練,評估,預測和服務匯出,大大簡化了機器學習程式設計。它集成了開源工具,如TensorFlow Hub模組,TensorFlow模型分析和Google Cloud的Hyperparameter Tuner。分散式訓練支援可顯著縮短訓練時間,並可與可用的CPU和加速器(例如GPU)進行線性擴充套件。

谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

AdaNet在cifar 100上每訓練步(x軸)對應精度(y軸)。藍線表示訓練集的準確率,紅線表示測試集的效能。每百萬步就會有一個新的子網路開始訓練,最終提高整合的效能。在新增新子網路之前,灰色和綠色的線是整合的精度。

由於TensorBoard是用於在訓練期間視覺化模型度量的最佳TensorFlow功能之一,因此AdaNet可與其無縫整合,以監控子網路訓練,整合組合和效能。當AdaNet完成訓練後,它會匯出一個可以使用TensorFlow Serving部署的SavedModel。

學習保證

構建神經網路整合有多重挑戰:最佳子網架構是什麼?重複使用相同的架構還是鼓勵多樣性?雖然具有更多引數的複雜子網將傾向於在訓練集上表現更好,但由於其更大的複雜性,它們可能不會推廣到沒見過的資料中。這些挑戰源於模型效能評估。我們可以評估來自訓練集的保持集分割的效能,但這樣做會減少可用於訓練神經網路的示例數量。

相反,AdaNet的方法(論文AdaNet: Adaptive Structural Learning of Artificial Neural Networks中提出)是為了優化一個目標,以平衡整合在訓練集上的表現與其推廣到看不見的資料的能力之間的權衡。直覺是指整體只有當它改善整體訓練損失而不是影響其概括能力時才包括候選子網。這保證了:

  • 整合的泛化誤差受其訓練誤差和複雜性的約束。
  • 通過優化此目標,我們直接最小化此約束。

優化此目標函式的一個實際好處是,它不需要保留集來選擇要新增到整合中的候選子網路。這樣做的另一個好處是可以使用更多的訓練資料來訓練子網路。要了解更多資訊,請瀏覽有關AdaNet目標的教程:github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb

可擴充套件

為研究和生產使用製作有用的AutoML框架的關鍵是不僅要提供合理的預設值,還要允許使用者嘗試自己的子網路/模型定義。這樣機器學習研究人員,從業人員和愛好者均可使用高階TensorFlow API(如tf.layers)定義自己的AdaNet adanet.subnetwork.Builder。

已經在系統中集成了TensorFlow模型的使用者可以輕鬆地將他們的TensorFlow程式碼轉換為AdaNet子網路,並使用adanet.Estimator提高模型效能,同時獲得學習保證。AdaNet將探索他們定義的候選子網的搜尋空間,並學習整合子網。例如,採用NASNet-A CIFAR架構的開源實現,將其轉換為子網,並在八次AdaNet迭代後對CIFAR-10最先進的結果進行了改進。此外,模型使用更少的引數實現了這個結果:

使用者通過固定或定製tf.contrib.estimator.Heads,將自定義的損失函式用作AdaNet目標的一部分,以便訓練迴歸,分類和多工學習問題。

谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

在CIFAR-10上,2018年Zoph等人提出的NASNet-A模型 VS AdaNet學習結合NASNet-A子網路的效能。

使用者還可以通過擴充套件adanet.subnetwork.Generator類別,來完全定義要探索的候選子網路的搜尋空間。這允許他們根據可用硬體增加或減少搜尋空間。子網路的搜尋空間可以簡單到使用不同的隨機種子複製相同的子網路配置,訓練具有不同超引數組合的數十個子網路,並讓AdaNet選擇一個進入最終整合。

Github:github.com/tensorflow/adanet
教程notebook:github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials
論文:proceedings.mlr.press/v70/cortes17a.html

原文連結:谷歌開源基於TensorFlow的通用框架AdaNet,快速且易於使用

本文為ATYUN(www.atyun.com)編譯作品,ATYUN專注人工智慧

請掃碼或微信搜尋ATYUN訂閱號及時獲取最新內容