1. 程式人生 > >谷歌開源的基於 TensorFlow 的輕量級框架 AdaNet幾大優勢

谷歌開源的基於 TensorFlow 的輕量級框架 AdaNet幾大優勢

logo.jpg

TensorFlow 是相對高階的機器學習庫,使用者可以方便地用它設計神經網路結構,而不必為了追求高效率的實現親自寫 C++或 CUDA 程式碼。它和 Theano 一樣都支援自動求導,使用者不需要再通過反向傳播求解梯度。

 

而基於 TensorFlow 的輕量級框架 AdaNet,可以使用少量專家干預來自動學習高質量模型。據介紹,AdaNet 在谷歌近期的強化學習和基於進化的 AutoML 的基礎上構建,快速靈活同時能夠提供學習保證(learning guarantee)。重要的是,AdaNet 提供通用框架,不僅能用於學習神經網路架構,還能學習整合架構以獲取更好的模型。

結合不同機器學習模型預測的整合學習在神經網路中得到廣泛使用以獲得最優效能,它從其悠久歷史和理論保證中受益良多,從而在 Netflix Prize 和多項 Kaggle 競賽等挑戰賽中取得勝利。但是,因其訓練時間長、機器學習模型的選擇要求領域專業知識,它們在實踐中並不那麼常用。而隨著算力、深度學習專用硬體(如 TPU)的發展,機器學習模型將越來越大,整合技術也將越發重要。現在,想象一個工具,它能夠自動搜尋神經架構,學習將最好的神經架構整合起來構建高質量模型。

剛剛,谷歌釋出部落格,開源了基於 TensorFlow 的輕量級框架 AdaNet,該框架可以使用少量專家干預來自動學習高質量模型。AdaNet 在谷歌近期的強化學習和基於進化的 AutoML 的基礎上構建,快速靈活同時能夠提供學習保證(learning guarantee)。重要的是,AdaNet 提供通用框架,不僅能用於學習神經網路架構,還能學習整合架構以獲取更好的模型。

 

AdaNet 易於使用,能夠建立高質量模型,節省 ML 從業者在選擇最優神經網路架構上所花費的時間,實現學習神經架構作為整合子網路的自適應演算法。AdaNet 能夠新增不同深度、寬度的子網路,從而建立不同的整合,並在效能改進和引數數量之間進行權衡。

image

 

AdaNet 適應性地增長整合中神經網路的數量。在每次迭代中,AdaNet 衡量每個候選神經網路的整合損失,然後選擇最好的神經架構進入下一次迭代。

 

快速易用

 

AdaNet 實現了 TensorFlow Estimator 介面,通過壓縮訓練、評估、預測和匯出極大地簡化了機器學習程式設計。它整合如 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 這樣的開源工具。它支援分散式訓練,極大減少了訓練時間,使用可用 CPU 和加速器(例如 GPU)實現線性擴充套件。

 

image

AdaNet 在 CIFAR-100 上每個訓練步(x 軸)對應的準確率(y 軸)。藍線是訓練集上的準確率,紅線是測試集上的效能。每一百萬個訓練步開始一個新的子網路,最終提高整個整合網路的效能。灰色和綠色線是新增新的子網路之前的整合準確率。

 

TensorBoard 是 TensorFlow 最好的功能之一,能夠視覺化訓練過程中的模型指標。AdaNet 將 TensorBoard 無縫整合,以監控子網路的訓練、整合組合和效能。AdaNet 完成訓練後將匯出一個 SavedModel,可使用 TensorFlow Serving 進行部署。

 

學習保證

 

構建神經網路整合存在多個挑戰:最佳子網路架構是什麼?重複使用同樣的架構好還是鼓勵差異化好?雖然具備更多引數的複雜子網路在訓練集上表現更好,但也因其極大的複雜性它們難以泛化到未見過的資料上。這些挑戰源自對模型效能的評估。我們可以在訓練集分留出的資料集上評估模型表現,但是這麼做會降低訓練神經網路的樣本數量。

 

不同的是,AdaNet 的方法是優化一個目標函式,在神經網路整合在訓練集上的表現與泛化能力之間進行權衡。直觀上,即僅在候選子網路改進網路整合訓練損失的程度超過其對泛化能力的影響時,選擇該候選子網路。這保證了:

 

  1. 整合網路的泛化誤差受訓練誤差和複雜度的約束。

  2. 通過優化這一目標函式,能夠直接最小化這一約束。

 

優化這一目標函式的實際收益是它能減少選擇哪個候選子網路加入整合時對留出資料集的需求。另一個益處是允許使用更多訓練資料來訓練子網路。

 

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 上的當前最優結果。此外,獲得的模型在更少引數的情況下獲得了以下結果:

 

image

在 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