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