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