1. 程式人生 > >谷歌開源整合學習工具AdaNet:2017年提出的演算法終於實現了

谷歌開源整合學習工具AdaNet:2017年提出的演算法終於實現了

曉查 編譯整理
量子位 報道 | 公眾號 QbitAI

640?wx_fmt=png

最近,谷歌在GitHub上釋出了用TensorFlow實現的AutoML框架——AdaNet,它改進了整合學習的方法,能以最少的專家干預實現自動習得高質量模型。

谷歌AI研究團曾在2017年的ICML上提出了AdaNet:人工神經網路的自適應結構性學習(Adaptive Structural Learning of Artificial Neural Networks)。AdaNet建立在最近的強化學習和基於進化的AutoML成果基礎之上,在提供學習保證時能做到快速靈活。

谷歌為何要推出AdaNet?

AdaNet提供了一個通用框架,不僅可以學習神經網路架構,還可以學習集合以獲得更好地模型。

整合學習被廣泛用於神經網路以實現最先進的效能。但是由於訓練時間太長,導致它們在實踐中使用不多,而且ML模型候選者做選擇需要其領域專業知識。

但隨著計算能力提高和專用深度學習硬體(如TPU)廣泛被採用,機器學習模型變得越來越大,整合學習將變得更重要。

現在,谷歌的AdaNet可以自動搜尋神經架構,並學會將最優的架構組合成一個高質量的模型。

AdaNet有何優點?

AdaNet易於使用,並能建立高質量的模型,為ML從業人員節省了用於選擇最佳神經網路架構的時間,實現了將學習神經架構作為子網路集合的自適應演算法。AdaNet能夠新增不同深度和寬度的子網路,建立多樣化的集合,並通過引數數量來改進效能。

640?wx_fmt=gif

【圖】AdaNet增加集合中的神經網路,每一次迭代中,AdaNet將評估候選子網路的損失,並將最優結果放入下一次迭代中

AdaNet實現了TensorFlow Estimator介面,通過封裝訓練、評估、預測和服務匯出,大大簡化了機器學習程式設計。

它集成了開源工具,如TensorFlow Hub模組,TensorFlow模型分析和谷歌雲的Hyperparameter Tuner。

AdaNet還支援分散式訓練,可顯著縮短訓練時間,並使用CPU和GPU等加速器進行線性擴充套件。

實測效果:

640?wx_fmt=png

【圖】AdaNet在CIFAR-100資料集上的表現:藍線為訓練集的精確度,紅線為測試集的表現,綠線和灰線是加入子網路之前的精確度。

AdaNet還能與TensorFlow中的視覺化工具TensorBoard無縫整合,以監控子網路訓練、集合的組合和效能。當AdaNet完成訓練後,它會匯出一個可以使用TensorFlow Serving部署的SavedModel。

學習保證

構建神經網路集合有以下幾個挑戰:最佳子網路架構需要考慮的是什麼?最好是重複使用相同的架構還是鼓勵多樣性?

雖然具有更多引數的複雜子網路會在訓練集上有更好的表現,但由於其更大的複雜性,它們可能無法推廣到其他資料上。這些挑戰源於評估模型效能。

我們可以從訓練集中分出的保留集合上評估效能,但這樣做會減少可用於訓練神經網路的樣本數量。

AdaNet的方法平衡了集合在訓練集上的表現和其推廣到測試集的效能上的矛盾,只有改善整體訓練損失而不影響其測試能力時,集合才包括候選子網路。這保證了:

  • 通過訓練誤差和複雜性限制集合的泛化誤差。

  • 通過優化此目標,可以直接最小化此限制。

優化此目標的一個實際好處是,它降低了選擇候選子網路加入集合時對保留資料集的需求。另一個好處是,可以使用更多的訓練資料來訓練子網路。

擴充套件

谷歌認為,為研究和生產提供有用的AutoML框架的關鍵是不僅要提供合理的預設值,還要允許使用者嘗試自己的子網路/模型定義。因此,機器學習研究人員,從業者和愛好可以使用高階TensorFlow API(如tf.layers)定義他們自己的AdaNet類adanet.subnetwork.Builder。

已經在其系統中集成了TensorFlow模型的使用者可以輕鬆地將他們的TensorFlow程式碼轉換到AdaNet子網路,並使用adanet.Estimator提高模型效能,同時獲得學習保證。 AdaNet將探索他們定義的候選子網路搜尋空間,並學習整合子網路。

谷歌選取了NASNet-A CIFAR架構的一個開源實現,將其轉換為子網路,並在八次AdaNet迭代後改進了CIFAR-10最優結果。此外,AdaNet訓練的模型相比NASNet-A使用更少的引數:

640?wx_fmt=png

使用者通過封裝或定製tf.contrib.estimator.Heads,將自己的自定義損失函式用作AdaNet目標的一部分,以便訓練迴歸,分類和多工學習問題。

使用者還可以通過擴充套件adanet.subnetwork.Generator類,來完全定義要探索的候選子網路的搜尋空間。這允許使用者根據可用硬體來增加或減少搜尋空間。

子網路的搜尋空間可以簡單到使用不同的隨機種子複製相同的子網路配置,訓練具有不同超引數組合的子網路,並讓AdaNet選擇包含在最終集合中的子網路。

AdaNet是一個正在進行的研究專案,頁面中已經包含了一些使用密集層和卷積的工作示例,來幫助使用者入門。 谷歌歡迎廣大使用者給這個專案做出貢獻。

安裝方法

AdaNet專案要求TensorFlow版本不低於1.7

$ git clone https://github.com/tensorflow/adanet && cd adanet

在安裝AdaNet之前,還需要安裝Bazel

cd adanet
$ bazel test -c opt //...

安裝完成後,你就可以直接使用AdaNet啦!

import adanet

附錄:

專案地址
https://github.com/tensorflow/adanet

谷歌論文地址
https://arxiv.org/pdf/1607.01097.pdf

加入社群

量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話介面回覆關鍵字“交流群”,獲取入群方式;


此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。


進專業群請在量子位公眾號(QbitAI)對話介面回覆關鍵字“專業群”,獲取入群方式。(專業群稽核較嚴,敬請諒解)

活動策劃招聘

量子位正在招聘活動策劃,將負責不同領域維度的線上線下相關活動策劃、執行。歡迎聰明靠譜的小夥伴加入,並希望你能有一些活動策劃或運營的相關經驗。相關細節,請在量子位公眾號(QbitAI)對話介面,回覆“招聘”兩個字。

640?wx_fmt=jpeg

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態