谷歌開源AdaNet:基於TensorFlow的AutoML框架

ofollow,noindex" target="_blank">機器之心 翻譯
參與:路雪、李亞洲 作者:Mikel Artetxe
谷歌開源AdaNet:基於TensorFlow的AutoML框架
谷歌開源了基於 TensorFlow 的輕量級框架 AdaNet,該框架可以使用少量專家干預來自動學習高質量模型。據介紹,AdaNet 在谷歌近期的強化學習和基於進化的 AutoML 的基礎上構建,快速靈活同時能夠提供學習保證(learning guarantee)。重要的是,AdaNet 提供通用框架,不僅能用於學習神經網路架構,還能學習整合架構以獲取更好的模型。
- 相關論文: AdaNet: Adaptive Structural Learning of ArtificialNeural Networks
-
論文地址:http://proceedings.mlr.press/v70/cortes17a/cortes17a.pdf
-
Github 專案地址:https://github.com/tensorflow/adanet
-
教程 notebook:https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials
結合不同機器學習模型預測的整合學習在神經網路中得到廣泛使用以獲得最優效能,它從其悠久歷史和理論保證中受益良多,從而在 Netflix Prize 和多項 Kaggle 競賽等挑戰賽中取得勝利。但是,因其訓練時間長、機器學習模型的選擇要求領域專業知識,它們在實踐中並不那麼常用。而隨著算力、深度學習專用硬體(如 TPU)的發展,機器學習模型將越來越大,整合技術也將越發重要。現在,想象一個工具,它能夠自動搜尋神經架構,學習將最好的神經架構整合起來構建高質量模型。
剛剛,谷歌釋出部落格,開源了基於TensorFlow 的輕量級框架 AdaNet,該框架可以使用少量專家干預來自動學習高質量模型。AdaNet 在谷歌近期的強化學習和基於進化的 AutoML 的基礎上構建,快速靈活同時能夠提供學習保證(learning guarantee)。重要的是,AdaNet 提供通用框架,不僅能用於學習神經網路架構,還能學習整合架構以獲取更好的模型。
AdaNet 易於使用,能夠建立高質量模型,節省 ML 從業者在選擇最優神經網路架構上所花費的時間,實現學習神經架構作為整合子網路的自適應演算法。AdaNet 能夠新增不同深度、寬度的子網路,從而建立不同的整合,並在效能改進和引數數量之間進行權衡。
AdaNet 適應性地增長整合中神經網路的數量。在每次迭代中,AdaNet 衡量每個候選神經網路的整合損失,然後選擇最好的神經架構進入下一次迭代。
快速易用
AdaNet 實現了TensorFlow Estimator 介面,通過壓縮訓練、評估、預測和匯出極大地簡化了機器學習程式設計。它整合如TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』sHyperparameterTuner 這樣的開源工具。它支援分散式訓練,極大減少了訓練時間,使用可用 CPU 和加速器(例如 GPU)實現線性擴充套件。
AdaNet 在 CIFAR-100 上每個訓練步(x 軸)對應的準確率(y 軸)。藍線是訓練集上的準確率,紅線是測試集上的效能。每一百萬個訓練步開始一個新的子網路,最終提高整個整合網路的效能。灰色和綠色線是新增新的子網路之前的整合準確率。
TensorBoard 是TensorFlow 最好的功能之一,能夠視覺化訓練過程中的模型指標。AdaNet 將TensorBoard 無縫整合,以監控子網路的訓練、整合組合和效能。AdaNet 完成訓練後將匯出一個 SavedModel,可使用TensorFlow Serving 進行部署。
學習保證
構建神經網路整合存在多個挑戰:最佳子網路架構是什麼?重複使用同樣的架構好還是鼓勵差異化好?雖然具備更多引數的複雜子網路在訓練集上表現更好,但也因其極大的複雜性它們難以泛化到未見過的資料上。這些挑戰源自對模型效能的評估。我們可以在訓練集分留出的資料集上評估模型表現,但是這麼做會降低訓練神經網路的樣本數量。
不同的是,AdaNet 的方法是優化一個目標函式,在神經網路整合在訓練集上的表現與泛化能力之間進行權衡。直觀上,即僅在候選子網路改進網路整合訓練損失的程度超過其對泛化能力的影響時,選擇該候選子網路。這保證了:
-
整合網路的泛化誤差受訓練誤差和複雜度的約束。
-
通過優化這一目標函式,能夠直接最小化這一約束。
優化這一目標函式的實際收益是它能減少選擇哪個候選子網路加入整合時對留出資料集的需求。另一個益處是允許使用更多訓練資料來訓練子網路。
AdaNet目標函式教程:https://github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb
可擴充套件
谷歌認為,建立有用的 AutoML 框架的關鍵是:研究和產品使用方面不僅能夠提供合理的預設設定,還要讓使用者嘗試自己的子網路/模型定義。這樣,機器學習研究者、從業者、喜愛者都能夠使用 tf.layers 這樣的 API 定義自己的 AdaNet adanet.subnetwork.Builder。
已在自己系統中融合TensorFlow 模型的使用者可以輕鬆將TensorFlow 程式碼轉換到 AdaNet 子網路中,並使用 adanet.Estimator 來提升模型表現同時獲取學習保證。AdaNet 將探索他們定義的候選子網路搜尋空間,並學習整合這些子網路。例如,採用 NASNet-A CIFAR 架構的開源實現,把它遷移到一個子網路,經過 8 次 AdaNet 迭代後提高其在 CIFAR-10 上的當前最優結果。此外,獲得的模型在更少引數的情況下獲得了以下結果:
在 CIFAR-10 資料集上,NASNet-A 模型的表現 vs 結合多個小型 NASNet-A 子網路的 AdaNet 的表現。
通過固定或自定義 tf.contrib.estimator.Heads,使用者可以使用自己定義的損失函式作為 AdaNet目標函式的一部分來訓練迴歸、分類和多工學習問題。
使用者也可以通過拓展 adanet.subnetwork.Generator 類別,完全定義要探索的候選子網路搜尋空間。這使得使用者能夠基於硬體擴大或縮小搜尋空間範圍。子網路的搜尋空間可以簡單到複製具備不同隨機種子的同一子網路配置,從而訓練數十種具備不同超引數組合的子網路,並讓 AdaNet 選擇其中一個進入最終的整合模型。
原文地址:https://ai.googleblog.com/2018/10/introducing-adanet-fast-and-flexible.html
工程 AutoML 神經架構搜尋
相關資料
Neural Network
(人工)神經網路是一種起源於 20 世紀 50 年代的監督式機器學習模型,那時候研究者構想了「感知器(perceptron)」的想法。這一領域的研究者通常被稱為「聯結主義者(Connectionist)」,因為這種模型模擬了人腦的功能。神經網路模型通常是通過反向傳播演算法應用梯度下降訓練的。目前神經網路有兩大主要型別,它們都是前饋神經網路:卷積神經網路(CNN)和迴圈神經網路(RNN),其中 RNN 又包含長短期記憶(LSTM)、門控迴圈單元(GRU)等等。深度學習是一種主要應用於神經網路幫助其取得更好結果的技術。儘管神經網路主要用於監督學習,但也有一些為無監督學習設計的變體,比如自動編碼器和生成對抗網路(GAN)。
來源:機器之心
Ensemble learning
整合學習是指使用多種相容的學習演算法/模型來執行單個任務的技術,目的是為了得到更佳的預測表現。整合學習的主要方法可歸類為三大類: 堆疊(Stacking)、提升(Boosting) 和 裝袋(Bagging/bootstrapaggregating)。其中最流行的方法包括隨機森林、梯度提升、AdaBoost、梯度提升決策樹(GBDT)和XGBoost。
來源:機器之心
Hyperparameter
在機器學習中,超引數是在學習過程開始之前設定其值的引數。 相反,其他引數的值是通過訓練得出的。 不同的模型訓練演算法需要不同的超引數,一些簡單的演算法(如普通最小二乘迴歸)不需要。 給定這些超引數,訓練演算法從資料中學習引數。相同種類的機器學習模型可能需要不同的超引數來適應不同的資料模式,並且必須對其進行調整以便模型能夠最優地解決機器學習問題。 在實際應用中一般需要對超引數進行優化,以找到一個超引數元組(tuple),由這些超引數元組形成一個最優化模型,該模型可以將在給定的獨立資料上預定義的損失函式最小化。
來源: Wikipedia
Machine Learning
機器學習是人工智慧的一個分支,是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、計算複雜性理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動“學習”的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與推斷統計學聯絡尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。
來源:Mitchell, T. (1997). Machine Learning. McGraw Hill.
Loss function
在數學優化,統計學,計量經濟學,決策理論,機器學習和計算神經科學等領域,損失函式或成本函式是將一或多個變數的一個事件或值對映為可以直觀地表示某種與之相關“成本”的實數的函式。
來源: Wikipedia
Objective function
目標函式f(x)就是用設計變數來表示的所追求的目標形式,所以目標函式就是設計變數的函式,是一個標量。從工程意義講,目標函式是系統的效能標準,比如,一個結構的最輕重量、最低造價、最合理形式;一件產品的最短生產時間、最小能量消耗;一個實驗的最佳配方等等,建立目標函式的過程就是尋找設計變數與目標的關係的過程,目標函式和設計變數的關係可用曲線、曲面或超曲面表示。
來源: 百度百科
Reinforcement learning
強化學習是一種試錯方法,其目標是讓軟體智慧體在特定環境中能夠採取回報最大化的行為。強化學習在馬爾可夫決策過程環境中主要使用的技術是動態規劃(Dynamic Programming)。流行的強化學習方法包括自適應動態規劃(ADP)、時間差分(TD)學習、狀態-動作-回報-狀態-動作(SARSA)演算法、Q 學習、深度強化學習(DQN);其應用包括下棋類遊戲、機器人控制和工作排程等。
來源:機器之心
Deep learning
深度學習(deep learning)是機器學習的分支,是一種試圖使用包含複雜結構或由多重非線性變換構成的多個處理層對資料進行高層抽象的演算法。 深度學習是機器學習中一種基於對資料進行表徵學習的演算法,至今已有數種深度學習框架,如卷積神經網路和深度置信網路和遞迴神經網路等已被應用在計算機視覺、語音識別、自然語言處理、音訊識別與生物資訊學等領域並獲取了極好的效果。
來源: LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. nature, 521(7553), 436.
Tensor
張量是一個可用來表示在一些向量、標量和其他張量之間的線性關係的多線性函式,這些線性關係的基本例子有內積、外積、線性對映以及笛卡兒積。其座標在 維空間內,有 個分量的一種量,其中每個分量都是座標的函式,而在座標變換時,這些分量也依照某些規則作線性變換。稱為該張量的秩或階(與矩陣的秩和階均無關係)。 在數學裡,張量是一種幾何實體,或者說廣義上的“數量”。張量概念包括標量、向量和線性運算元。張量可以用座標系統來表達,記作標量的陣列,但它是定義為“不依賴於參照系的選擇的”。張量在物理和工程學中很重要。例如在擴散張量成像中,表達器官對於水的在各個方向的微分透性的張量可以用來產生大腦的掃描圖。工程上最重要的例子可能就是應力張量和應變張量了,它們都是二階張量,對於一般線性材料他們之間的關係由一個四階彈性張量來決定。
來源: 維基百科
Accuracy
分類模型的正確預測所佔的比例。在多類別分類中,準確率的定義為:正確的預測數/樣本總數。 在二元分類中,準確率的定義為:(真正例數+真負例數)/樣本總數
來源: sary?hl=zh-cn" target="_blank" rel="nofollow,noindex">Google ML Glossary
Multi-task learning
推薦文章
