曉查 編譯整理

量子位 報道 | 公眾號 QbitAI

最近,谷歌在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能夠添加不同深度和寬度的子網路,創建多樣化的集合,並通過參數數量來改進性能。

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

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

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

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

實測效果:

△ 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使用更少的參數:

用戶通過封裝或定製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

附錄:

項目地址

github.com/tensorflow/a

谷歌論文地址

arxiv.org/pdf/1607.0109

歡迎大家關注我們的專欄:量子位 - 知乎專欄

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。

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

?? ? 追蹤AI技術和產品新動態


推薦閱讀:
相关文章