0
雷鋒網(wǎng) AI 科技評論編者按:近期,Google 開源了輕量級 AutoML 框架—— AdaNet,該框架基于 TensorFlow,只需要少量的專家干預(yù)便能自動學(xué)習(xí)高質(zhì)量模型,在提供學(xué)習(xí)保證(learning guarantee)的同時也能保持快速、靈活。值得一提的是,AdaNet 提供了一種通用框架,不僅能夠?qū)W習(xí)神經(jīng)網(wǎng)絡(luò)架構(gòu),還能學(xué)習(xí)集成從而獲得更佳的模型。雷鋒網(wǎng) AI 科技評論根據(jù) Google AI 在博客上發(fā)布 AutoML 的文章進(jìn)行編譯如下。
整合了不同機(jī)器學(xué)習(xí)模型預(yù)測的模型集成,被廣泛運(yùn)用于神經(jīng)網(wǎng)絡(luò)來實現(xiàn)最優(yōu)性能,它受益于悠久的歷史和理論,從而在 Netflix Prize 和各項 Kaggle 競賽等挑戰(zhàn)賽中拔得頭籌。然而由于訓(xùn)練耗時長,以及機(jī)器學(xué)習(xí)模型的選擇機(jī)制需要自身具備領(lǐng)域?qū)I(yè)知識,它們在實踐中的應(yīng)用并不多。不過隨著算力和 TPU 等深度學(xué)習(xí)專用硬件變得更容易獲得,我們可以允許更大的機(jī)器學(xué)習(xí)模型,模型集成方法也就成了一種能帶來突出表現(xiàn)的選擇。現(xiàn)在想象一下,一個工具可以自動搜索神經(jīng)架構(gòu),并學(xué)習(xí)將最佳的神經(jīng)架構(gòu)集成到一個高質(zhì)量的模型中。
現(xiàn)在,Google 對基于 TensorFlow 的輕量級框架 AdaNet 進(jìn)行開源,這一框架只需要少量的專家干預(yù)便能自動學(xué)習(xí)高質(zhì)量模型。AdaNet 在 Google 最近的強(qiáng)化學(xué)習(xí)和基于進(jìn)化的 AutoML 成果的基礎(chǔ)上構(gòu)建,在提供學(xué)習(xí)保證的同時也能保持快速、靈活。重點是,AdaNet 提供了一種通用框架,不僅能夠?qū)W習(xí)神經(jīng)網(wǎng)絡(luò)架構(gòu),還能學(xué)習(xí)集成從而獲得更佳的模型。
AdaNet 使用方便,還能創(chuàng)建高質(zhì)量模型,以節(jié)省機(jī)器學(xué)習(xí)從業(yè)者通常在選擇最優(yōu)神經(jīng)網(wǎng)絡(luò)架構(gòu)上所耗費(fèi)的時間,它會執(zhí)行一個自適應(yīng)學(xué)習(xí)算法,學(xué)習(xí)出一個由許多子網(wǎng)絡(luò)集成得到的神經(jīng)網(wǎng)絡(luò)架構(gòu)。AdaNet 能夠通過不同深度和寬度的子網(wǎng)絡(luò)來創(chuàng)建多種不同的集成,并在性能提升和參數(shù)數(shù)量二者之間進(jìn)行權(quán)衡。
AdaNet 適應(yīng)性地增加神經(jīng)網(wǎng)絡(luò)的集成。在每次迭代中,AdaNet 衡量每個候選神經(jīng)網(wǎng)絡(luò)的集成損失,并選擇將最優(yōu)的神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)入下一次迭代中。
AdaNet 采用了 TensorFlow Estimator 接口,通過封裝訓(xùn)練、評估、預(yù)測和輸出,極大簡化了機(jī)器學(xué)習(xí)編程,并整合了 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 這類開源工具。其對分布式訓(xùn)練的支持,極大縮短了訓(xùn)練時間,并且增加新的 CPU 和加速器(例如 GPU)之后性能可以獲得線性提升。
AdaNet 在 CIFAR-100 上每個訓(xùn)練步(x 軸)對應(yīng)的準(zhǔn)確率(y 軸)。藍(lán)線表示訓(xùn)練集上的準(zhǔn)確率,紅線表示測試集上的性能。一個新的子網(wǎng)絡(luò)以每一百萬步開始訓(xùn)練,最終提高整個集成模型的性能。灰色和綠色線表示新增的子網(wǎng)絡(luò)之前的集成準(zhǔn)確率。
作為最好的 TensorFlow 功能之一,TensorBoard 可以將訓(xùn)練過程中的模型指標(biāo)可視化,因而 AdaNet 可與 TensorBoard 實現(xiàn)無縫整合,來監(jiān)控子網(wǎng)絡(luò)訓(xùn)練、集成合并和性能。AdaNet 完成訓(xùn)練后,會輸出一個可使用 TensorFlow Serving 進(jìn)行部署的 SavedMode。
構(gòu)建神經(jīng)網(wǎng)絡(luò)集成面臨一些挑戰(zhàn):要考量什么是最佳子網(wǎng)絡(luò)架構(gòu)?重復(fù)使用相同的架構(gòu)最好,還是鼓勵差異化最好?盡管具備更多參數(shù)的復(fù)雜子網(wǎng)絡(luò)在訓(xùn)練集上傾向于表現(xiàn)更好,但是它們也由于更大的復(fù)雜性而可能難以泛化到未知的數(shù)據(jù)。這些挑戰(zhàn)源自于對模型性能的評估,我們可以從訓(xùn)練集單獨(dú)分出來一部分?jǐn)?shù)據(jù)用于評估性能,不過這樣的話可能會減少可用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的樣本量。
不一樣的是,AdaNet 的方法(該方法可參考 ICML 2017 的論文 AdaNet: Adaptive Structural Learning of Arti?cial Neural Networks)是優(yōu)化一個目標(biāo),在訓(xùn)練集的集成性能和未知數(shù)據(jù)的泛化能力間進(jìn)行權(quán)衡。這里采用了一個符合人類直覺的設(shè)定:只有當(dāng)一個候選的子網(wǎng)絡(luò)對集成模型的訓(xùn)練損失的優(yōu)化超過其對泛化能力的負(fù)面影響時,AdaNet 才會把這個子網(wǎng)絡(luò)集成進(jìn)來。這保證了:
第一,集成的泛化誤差受其訓(xùn)練誤差和復(fù)雜度的約束;
第二,通過優(yōu)化這一目標(biāo),能夠直接最小化該約束。
優(yōu)化這一目標(biāo)的實際收益是,它能消除選擇加入集成的候選子網(wǎng)絡(luò)時對于留出集的需求。如此帶來的附加收益是,使得 AdaNet 能夠使用更多的訓(xùn)練數(shù)據(jù)來訓(xùn)練子網(wǎng)絡(luò)。
如需了解更多,可參考其 AdaNet 目標(biāo)函數(shù)教程(https://github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb)。
Google 認(rèn)為,創(chuàng)建應(yīng)用于研究和產(chǎn)品的有用的 AutoML 框架的關(guān)鍵是,它不僅能夠提供合理的默認(rèn)值,還能讓用戶可以嘗試定義自己的子網(wǎng)絡(luò)/模型。最終,機(jī)器學(xué)習(xí)研究者、從業(yè)者以及愛好者都能夠受邀使用 tf.layers 等高水平的 TensorFlow APIs,來定義他們自己的 AdaNet adanet.subnetwork.Builder。
對于已經(jīng)在自己的系統(tǒng)中集成了 TensorFlow 模型的用戶,可以輕易地將自己的 TensorFlow 代碼轉(zhuǎn)到 AdaNet 子網(wǎng)絡(luò)中,并且能夠在獲得學(xué)習(xí)保證的同時,使用 adanet.Estimator 來提升模型性能。AdaNet 會探索他們定義的候選子網(wǎng)絡(luò)搜索空間,同時學(xué)習(xí)對子網(wǎng)絡(luò)進(jìn)行集成。例如,Google 實現(xiàn) NASNet-A CIFAR 架構(gòu)的開源,將其遷移到了一個子網(wǎng)絡(luò)中,并經(jīng)過 8 次 AdaNet 迭代提高了它在 CIFAR-10 上的最優(yōu)結(jié)果。除此之外,Google 的模型實現(xiàn)了用更少參數(shù)來獲得以下結(jié)果:
在 CIFAR-10 數(shù)據(jù)集上,展示在 Zoph et al., 2018 中的 NASNet-A 模型的性能 VS 學(xué)習(xí)結(jié)合多個小型 NASNet-A 子網(wǎng)絡(luò)的 AdaNet 的性能。
用戶也可以通過固定或自定義的 tf.contrib.estimator.Heads,將自己定義的損失函數(shù)用作 AdaNet 目標(biāo)的一部分來訓(xùn)練回歸、分類以及多任務(wù)學(xué)習(xí)問題。
用戶還可以通過擴(kuò)展 adanet.subnetwork.Generator 類別,來充分定義要探索的候選子網(wǎng)絡(luò)搜索空間。這使得他們能夠基于可獲得的硬件來擴(kuò)大或者縮小其搜索空間。子網(wǎng)絡(luò)的訓(xùn)練空間可以簡單也可以復(fù)雜,簡單的時候可以只是多次復(fù)制同樣的子網(wǎng)絡(luò)設(shè)置,只不過用了幾個不同的隨機(jī)種子,復(fù)雜的時候就可以是用不同的超參數(shù)組合訓(xùn)練幾十個不同的子網(wǎng)絡(luò),然后由 AdaNet 選擇其中的某一個包括到最終的集成模型中。
如果的大家對獨(dú)立嘗試 AdaNet 感興趣,可以前往 Github repo(https://github.com/tensorflow/adanet),并查看相關(guān)教程(https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples)。
via:Google AI Blog(Charles Weill,Introducing AdaNet: Fast and Flexible AutoML with Learning Guarantees),雷鋒網(wǎng) AI 科技評論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。