AutoML又一利器來了!今天,谷歌宣布開源AdaNet,這是一個輕量級的基于TensorFlow的框架,可以在最少的專家干預下自動學習高質量的模型。
今天,谷歌宣布開源AdaNet,這是一個輕量級的基于TensorFlow的框架,可以在最少的專家干預下自動學習高質量的模型。
這個項目基于Cortes等人2017年提出的AdaNet算法,用于學習作為子網絡集合的神經網絡的結構。
谷歌AI負責人Jeff Dean表示,這是谷歌AutoML整體工作的一部分,并且,谷歌同時提供了AdaNet的開源版本和教程notebook。
該團隊在介紹博客中表示:“AdaNet以我們最近的強化學習和基于進化的AutoML研究為基礎,在提供學習保證的同時實現了快速、靈活。重要的是,AdaNet提供了一個通用框架,不僅可以學習神經網絡架構,還可以學習集成,以獲得更好的模型。”
AdaNet提供以下特征:
Estimator API,可輕松訓練、評估和服務AdaNet模型。
學習在TensorFlow中集成用戶定義的子網。
用于在單個 train() 調用中搜索子網架構和參數的接口。
一流的TensorBoard integration。
提供理論學習。
基于集成學習的自動搜索工具
集成學習(Ensemble learning)是將不同機器學習(ML)模型預測結合起來的技術,廣泛用于神經網絡,以實現最先進的性能。得益于豐富的經驗和理論保證,集成學習在許多Kaggle競賽中取得了成功,例如Netflix Prize。
由于訓練時間長,集成學習在實踐中使用不多,而且選擇哪個ML模型需要根據其領域專業知識來。
但隨著計算能力和專用深度學習硬件(如TPU)變得更容易獲得,機器學習模型的一個趨勢是變得更大,集成(ensemble)也就變得更加重要。
現在,AdaNet就是這樣一個工具,可以自動搜索神經網絡架構,并學會將最好的架構組合成一個高質量的模型。
AdaNet易于使用,并能創建高質量的模型,為ML實踐者節省了用于選擇最佳神經網絡架構的時間,實現了一種將學習神經架構作為子網絡集合的自適應算法。
AdaNet能夠添加不同深度和寬度的子網絡,以創建多樣化的集合,并通過參數數量來改進性能。
AdaNet自適應地產生了神經網絡的集成。在每次迭代中,它測量每個候選對象的集成損失,并選擇最佳的一個,然后進入下一次迭代。
快速且易于使用
AdaNet實現了TensorFlow Estimator接口,通過封裝訓練、評估、預測和服務導出,大大簡化了機器學習編程。它集成了開源工具,如TensorFlow Hub模塊,TensorFlow Model Analysis和Google Cloud的Hyperparameter Tuner。分布式訓練支持可顯著縮短訓練時間,并可與可用的CPU和加速器(例如GPU)進行線性擴展。
AdaNet在CIFAR-100上每個訓練步驟(X軸)的精度(y軸)。藍線是訓練集上的性能,紅線是測試集上的性能。每一百萬步開始訓練一個新的子網絡,并最終提高整體的性能。在添加新子網之前,灰線和綠線是集合的準確度。
由于TensorBoard是用于在訓練期間可視化模型性鞥的最佳TensorFlow功能之一,AdaNet可與其無縫集成,以監控子網絡訓練,集合組合和性能。當AdaNet完成訓練后,它會導出一個可以使用TensorFlow Serving部署的SavedModel。
學習保證
構建神經網絡集合面臨這么幾個挑戰:要考慮的最佳子網架構是什么?再此使用相同的架構或鼓勵多樣性是不是最佳選擇?雖然具有更多參數的復雜子網將在訓練集上表現更好,但由于其存在更強的復雜性,它們可能不會適用于未知數據。這些挑戰來自評估模型性能的過程。我們可以評估一個訓練集子集的性能,但這樣做會減少可用于訓練神經網絡的示例數量。
相反,AdaNet的方法(在ICML 2017的“ AdaNet:人工神經網絡的自適應結構學習 ”一文中提出)是為了優化一個對象,以平衡集合在訓練集上的表現與其適用于未知數據的能力之間的權衡。集合這樣選擇子網絡:只有當候選子網絡改進了總體的訓練損失,而不是影響了整體的泛化能力時,才包含這個候選子網絡。這保證了:
1.集合的泛化誤差受到訓練誤差和復雜性的限制。
2.通過優化對象,我們可以直接將限制最小化。
優化對象的一個實際好處是:它不需要保留集來選擇要添加到集合中的候選子網。這還將帶來另一個好處:我們可以使用更多的訓練數據來訓練子網。
可擴展性
我們認為,為滿足研究和生產制作AutoML框架的關鍵在于不僅要提供合理的默認值,還要允許用戶嘗試自己子網及模型的定義。因此,機器學習研究人員、從業人員和愛好者均可報名定義自己的AdaNet adanet.subnetwork.Builder,通過使用高級別的TensorFlow API,如tf.layers。
已經在其系統中集成TensorFlow模型的用戶可以輕松地將他們的TensorFlow代碼轉換為AdaNet子網,并使用adanet.Estimator提高模型性能,同時獲得學習保證。AdaNet將探測他們定義的候選子網的搜索空間,并學習整合子網。例如,我們采用了NASNet-A CIFAR架構的開源實現方式,將其轉換為子網,并在八次AdaNet迭代后對CIFAR-10最先進的結果進行改進。此外,我們的模型使用更少的參數實現了這一結果:
Zoph等人2018年提出的NASNet-A模型的性能,以及AdaNet學習在CIFAR-10上將小型NASNet-A子網結合起來的性能比較。
用戶也可以通過canned或定制tf.contrib.estimator.Heads將自定義損失函數用作AdaNet對象的一部分,以便訓練回歸、分類和多任務學習問題。
用戶還可以通過擴展adanet.subnetwork.Generator類來完全定義候選子網絡的搜索空間。這允許他們根據可用硬件增大或減小搜索空間。子網絡的搜索空間可以很簡單,只需使用不同的隨機種子復制相同的子網絡配置,就能訓練具有不同超參數組合的數十個子網絡,并讓AdaNet選擇要包含在最終集合中的子網絡。
谷歌的研究團隊提供了GitHub repo和tutorial notebook,并且包含了一些使用dense layers和卷積的示例幫助大家入門。
AdaNet的數據集、工作原理和應用范圍
今天,該項目的成員也在Reddit和ycombinator上回答讀者提問,我們精選了一些回答:
1、請問你使用該算法嘗試了哪些數據集?它是否只適用于圖像分類,比如Google的AutoML產品?
我們在圖像識別之外的幾個大型數據集上使用了AdaNet,包括結構化數據(參見原始論文)和一些NLP數據集。在大多數情況下,AdaNet的性能優于獨立訓練的任何單個子網絡(這些子網絡可能使用非常復雜的架構,如NASNet-A)。
當然,如何定義一個優化搜索空間,并使用合理的搜索啟發方式/算法對于獲得最佳的最終模型非常重要,而且一般最佳的模型是使用強大的先驗,就像最先進的模型,并讓AdaNet學習將這些模型的不同變化結合起來。
但是,如果你希望AdaNet能夠通用于任意數據集,可以嘗試定義合理的搜索空間,比如搜索日益復雜的完全連接的神經網絡,并允許AdaNet學習將其組合到最佳模型中。
最終,這就是我們設計的AdaNet具備高度靈活性的原因:我們希望任何人嘗試建立對自己的數據集有意義的子網絡搜索空間,以便獲得最佳性能的最終模型。
2、官方資源庫中的示例是個更好的例子,說明了AdaNet的工作原理:
https://github.com/tensorflow/adanet/blob/master/adanet/examples/tutorials/adanet_objective.ipynb
盡管名字叫“AutoML”,但實際上似乎仍需要做很多工作才能實現模型的優化。 (第二個示例在這方面的表現相對更好一些:
https://github.com/tensorflow/adanet/blob/master/adanet/examples/tutorials/customizing_adanet.ipynb)
確實,雖然AdaNet項目目前還不包含最先進的架構搜索策略/搜索空間,但它確實為研究人員提供了一個抽象對象(adanet.subnetwork.Generator)來實現神經架構搜索算法,同時提供了適合用戶的生產友好型的TF Estimator界面,讓算法開發更容易集成到生產過程中,而且,已經使用TF Estimator生態系統的用戶也可以更快地從這些開發成果中受益。
我想指出的是,盡管AdaNet的某些方面并不那么先進,但我們已經看到AdaNet在各種各樣的任務上取得了良好的效果。大家都來試試看吧!
當然,我們不會停下腳步!我們很高興自己也在這個領域工作,我們今后將繼續更新這個項目。
3、我還沒有細讀,但抱歉問一句;:AdaNet可以處理具有可變長度skip connections的塊嗎?(比如DenseNet),甚至能夠提供AmoebaNet風格的模型嗎?指導超參數/架構選擇過程的元策略(網格搜索/貝葉斯等)有哪些呢?謝謝!
這是個好問題!在最簡單的情況下,AdaNet允許用戶將獨立子網從線性模型集成到用戶定義的DenseNet / AmoebaNet式網絡上。但更有趣的是在迭代之間共享信息(這些信息可以是張量輸出,或是哪些超參數表現最好),以便AdaNet進行神經架構搜索。用戶可以定義自己的adanet子網生成器,指定如何跨迭代過程調整訓練方式。
開箱即用的元策略其實和用戶簡單定義的啟發式算法差不多。但是,AdaNet框架足夠靈活,可以支持更智能的策略,并抽象出分布式訓練(Estimator),評估(TensorBoard)和服務(tf.SavedModel)的復雜度。
4、機器學習和深度學習取得了如此大的進步。可以估計一下我需要多少CPU 和成本才能獲得一些結果嗎?我的數據訓練量大約是20M的樣本(每個樣本1K數據點)。
這取決于你搜索的子網數量以及每個子網的訓練成本。你可以使用單個DNN定義搜索空間,并為其提供一次迭代,這與固定DNN Estimator的操作相同。
比如說,假設搜索空間包含5個DNN,每個DNN完成一次迭代訓練需要的成本為X,訓練10次迭代,你的訓練成本就是X x 5 x 10 = 50X。
但是,考慮到你使用AdaNet,可以考慮整合50個DNN進行探索、訓練和選擇等流程,此外,由于AdaNet是作為TensorFlow Estimator實現的,如果這就是你想要的,可以很容易地增加機器數量,以加快訓練速度。
-
谷歌
+關注
關注
27文章
6164瀏覽量
105309 -
神經網絡
+關注
關注
42文章
4771瀏覽量
100720 -
強化學習
+關注
關注
4文章
266瀏覽量
11248
原文標題:AutoML又一利器來了,谷歌宣布開源AdaNet(附教程)
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論