AutoML是如何打敗AI工程師的?

Google前段時間發布了名為Cloud AutoML的人工智慧(Artificial Intelligence / AI)雲服務,在業內引起了轟動。網上出現了各種各樣的說法,比如「AI可以自我創造了」,「不懂機器學習也能開發AI」,「不用寫代碼也能訓練AI」,「AI工程師要失業了」等等,所以小明決定寫一篇文章來介紹一下AutoML是什麼。

由於還在Alpha測試版的階段,目前Cloud AutoML服務僅支持計算機視覺模型,讓我們先通過官方網站的介紹來了解一下Cloud AutoML Vision這項服務的基本功能和使用方法,總結起來就3步,(1)上傳標記數據;(2)點擊「訓練」,並查看評估結果;(3)通過API來對新樣本進行預測。

Cloud AutoML: cloud.google.com/automl


Cloud AutoML服務背後的技術是自動機器學習(AutoML),其核心思想是通過Learning to Learn的方式進行神經架構搜索,並利用遷移學習(Transfer Learning)將得到的神經網路遷移到其它類似任務上去。

source: https://www.sott.net/article/352279-Googles-AutoML-AI-wont-destroy-the-World-yet

從一開始提出AutoML技術到最後發布Cloud AutoML服務,Google一直不斷地在對AutoML的演算法原理和工程實現進行迭代更新。後面的章節,首先會介紹AutoML的基本工作機制和工程優化方法;緊接著以循環神經網路(Recurrent Neural Networks / RNN)和卷積神經網路(Convolutional Neural Networks / CNN)為例,對AutoML的一些設計細節、演化過程和其中的遷移學習進行進一步介紹;最後會對AutoML的實驗結果進行簡單分析。


1. AutoML的基本工作機制

為了實現AutoML,Google Brain團隊提出了神經架構搜索(Neural Architecture Search / NAS)技術。簡單來說,就是用一個循環神經網路作為控制器(Controller),在預先限定好的搜索範圍內採樣輸出多個子網路(Child Network)的結構和超參(Hyperparameter),子網路將被用來完成最終任務(計算機視覺,自然語言理解等),系統會對這些子網路進行訓練,並得到它們在驗證集上的準確度,最後系統會利用子網路的準確度作為獎勵(Reward),並通過強化學習(Reinforcement Learning)的方法來更新控制器的參數

註:論文中的神經架構搜索(Neural Architecture Search / NAS)流程圖

神經網路的架構通常可以用可變長的字元串來表述,而循環神經網路則非常適合用來生成這樣的字元串,這也是為什麼選擇循環神經網路作為控制器的原因。為了儘可能地生成較優的神經架構,控制器需要最大化預期獎勵,但因為獎勵信號是不可微分的,所以需要通過Policy Gradient的方法來對控制器的參數進行迭代更新,比如REINFORCE rule和Proximal Policy Optimization(PPO)都可以用來對控制器進行訓練。

訓練一個子網路通常需要花費數小時的時間,為了提高效率,Google Brain團隊先後提出了兩種工程優化設計來進行分散式訓練。一種是參數伺服器(Parameter Server)模式,系統創建S個參數伺服器來存儲控制器參數,並創建K個控制器副本,這些副本共享同一套參數,每個控制器副本會並行採樣m個子網路並進行訓練,當訓練輪數超過某個預設值時訓練停止,子網路準確度會被發送給控制器,控制器獲得這一批子網路的準確度後會利用REINFORCE rule對參數更新;另外一種是工作隊列(Workqueue)模式,系統創建一個全局的工作隊列,控制器採樣子網路並將其加入工作隊列,機器池中閑置的機器會從工作隊列中獲取任務,並對相應的子網路進行訓練直至收斂,然後將子網路準確度發送給控制器,控制器收到足夠量的準確度後會利用PPO對參數進行更新,這個過程會持續進行直至訓練的子網路數達到某個預設值。

註:論文中的參數伺服器(Parameter Server)模式分散式訓練示意圖


2. 用AutoML來設計RNN

AutoML通過一個控制器來生成子網路,其關鍵點在於設計一個合理的架構搜索空間,然後讓控制器在執行每一步時,採樣輸出不同類型的結構和超參,並循環進行直至達到結束條件。通過設計不同的搜索空間,AutoML可以生成不同類型的神經網路(包括循環神經網路和卷積神經網路)。

讓我們先看看如何用AutoML來設計循環神經網路,一個循環神經網路通常由循環元(Recurrent Cell)組成,所以循環神經網路的設計問題其實可以轉化為循環元的設計問題。一個標準循環神經網路的循環元,在t時刻,接收 x_{t}h_{t-1} 作為輸入,通過 h_{t}=tanhleft( W_{1} ast x_{t} + W_{2} ast h_{t-1} 
ight) 變換得到 h_{t} ;而一個長短期記憶元(Long Short-Term Memory Cell / LSTM Cell)則額外處理元狀態(Cell State),在t時刻,接收 x_{t}h_{t-1}c_{t-1} 作為輸入, 並經過變換輸出 h_{t}c_{t}

設計一個循環元,其實就是要找到從輸入 x_{t}h_{t-1}c_{t-1} 到輸出 h_{t}c_{t} 的變換函數。變換函數可以表示成變換樹的形式,樹中的每個節點會被加上索引標識,每個葉子節點接收 x_{t}h_{t-1} 作為輸入,經過合併變換得到輸出,每個中間節點接收兩個下層節點的輸出作為輸入,同樣經過合併變換得到輸出,最頂層節點的輸出被作為 h_{t} 。變換樹根據葉子節點數量n的不同,被稱為「n基變換樹」。合併變換由組合變換(例如,加法,元素乘法等)和激活變換(例如,Tanh, Sigmoid等)組成。為了處理元狀態,樹中的某個節點會被選中,其原始輸出和 c_{t-1} 經過合併變換得到該節點的最終輸出,為了生成元狀態輸出,樹中的某個節點會被選中,其組合變換後,激活變換前的輸出被作為 c_{t}

註:左圖是「2基變換樹」的樹結構和節點索引;中圖是控制器採樣輸出神經網路的樣例;右圖是中圖樣例對應的計算圖

以一個「2基變換樹」為例,變換樹包含兩個葉子節點和一個中間節點,葉子節點的索引標識分別記為0和1, 中間節點的索引標識記為2。控制器的執行步驟可以被劃分成5組,分別對應節點0、節點1、節點2的合併變換,元狀態插入操作的合併變換和元狀態的操作節點索引。前面4組,每組包含兩個步驟,分別對應組合變換和激活變換;最後1組中的兩個步驟,分別對應元狀態的輸出節點索引和元狀態插入操作的組合節點索引。

  • 對於節點0,控制器採樣得到加法變換 (Add)和Tanh變換,節點輸出為 a_{0}=tanhleft( W_{1} ast x_{t} + W_{2} ast h_{t-1} 
ight)
  • 對於節點1,控制器採樣得到元素乘法變換( ElemMult)和ReLU變換,節點輸出為 a_{1}=ReLUleft( left( W_{3} ast x_{t} 
ight) odot left( W_{4} ast h_{t-1} 
ight) 
ight)
  • 對於元狀態輸入,控制器採樣得到節點0作為組合節點,對於元狀態的插入操作,控制器採樣得到加法變換 和ReLU變換,變換過程中不引入可學習參數,最終輸出為 a_{0}^{new}=ReLUleft( a_{0} + c_{t-1} 
ight)
  • 對於節點2,控制器採樣得到元素乘法變換和Sigmoid變換,節點的輸出為 a_{2}=sigmoidleft( a_{0}^{new} odot a_{1} 
ight) ,因為該節點是最頂層節點,節點輸出被作為 h_{t}
  • 對於元狀態輸出,控制器採樣得到節點1作為輸出節點,節點1元素乘法變換之後,ReLU變換前的結果被作為 c_{t}

註:論文中AutoML設計的最優循環元架構樣例

Google Brain團隊首先在Penn Treebank語言模型數據集上進行循環元架構搜索,然後將得到的最優循環元應用到Penn Treebank字元級語言模型任務上,緊接著將最優循環元和GNMT框架結合來完成WMT14 English-German翻譯任務。最優循環元在這3個任務都取得了很好的效果,這說明了最優循環元具有很好的可遷移性,後面的章節會通過實驗結果分析來進一步說明循環元的可遷移性。


3. 用AutoML來設計CNN

接著我們再看看如何用AutoML來生成卷積神經網路,一開始Google Brain團隊嘗試了一種非常大膽的方法,目標是直接通過控制器生成完整的卷積神經網路,這和循環神經網路生成中,先設計循環元再搭建循環神經網路的方式很不一樣。這種卷積神經網路生成方法非常簡單,控制器在執行每一步時,通過一個Softmax分類器採樣輸出當前層某一類型超參,該層所有超參生成完畢之後繼續進行下一層的超參生成,這個過程會不停重複直到層數達到某個預設值。最基本的超參類型有,過濾器(Filter)的高度和寬度,高度和寬度方向上的步長(Stride)和過濾器的數量,如果想入加入池化(Pooling),正態化(Normalization)相關的超參以及學習率(Learning Rate)等優化相關的超參也很方便。

註:論文中基本的卷積神經網路生成控制器

為了支持短路連接(Skip-connect),Google Brain團隊在上述方法的基礎上加入了基於注意力(Attention)機制的錨點(Anchor Point)模塊,用來對短路連接進行預測。基本思路是,第N層的錨點模塊會計算當前層錨點隱藏態(Hidden State)與之前N-1層錨點隱藏態之間連接概率, P left(j 
ightarrow i 
ight) = sigmoid left( v^{T} tanh left( W_{prev} ast h_{j} + W_{curr} ast h_{i} 
ight) 
ight),其中 h_{i} 是第i層的錨點隱藏態, i=Nh_{j} 是第j層的錨點隱藏態, j in left[ 0, N-1 
ight]vW_{curr}W_{prev} 都是可學習參數。如果某一層有多於一個可連接層,則將這些可連接層的輸出在深度方向做拼接,然後作為該層的輸入;如果某一層沒有可連接層,則將輸入圖像作為該層的輸入;最後一層的輸出會和所有未被連接的輸出進行拼接,然後作為分類器的輸入;如果需要被拼接的輸出大小不同,則先對其進行填充再進行拼接。

註:論文中支持短路連接的卷積神經網路生成控制器

一切都看似很美好,除了一個問題。那就是控制器的整個訓練過程需要消耗大量的計算資源,如果想讓實際應用變為可能,就需要在一個規模較小的任務上進行搜索,再嘗試著將得到的神經網路遷移到其它任務上去。但上面介紹的方法所生成的卷積神經網路有個特點,層與層之間的結構和超參可能很不一樣,很難找到像循環神經網路生成中的循環元這樣的最小可重複單元,這使得在小規模任務上得到的循環神經網路很難遷移到其它任務上去。為了解決這個問題,Google Brain團隊做了進一步嘗試,為卷積神經網路設計了類似於循環元這樣的最小可重複單元,這大大提高了卷積神經網路的可遷移性。

在新的卷積神經網路生成方法中,卷積神經網路的主體結構是預先設定的,由重複的卷積元(Convolutional Cell)按一定的規律組成,這些卷積元有著一樣的架構,但參數權重是獨立的。方法中有兩種不同類型的卷積元,一種叫Normal Cell,用來保證輸入/輸出大小一致;另外一種叫Reduction Cell,用來將輸出高度寬度縮小為輸入的1/2,將這兩種卷積元配合著使用,可以讓卷積神經網路很方便地適配不同大小的圖像輸入,大大提高卷積神經網路的可擴展性。

註:左圖是在CIFAR10任務中用到卷積神經網路主體結構;右圖是在ImageNet任務中用到的卷積神經網路主體結構

卷積元的設計跟循環神經元的設計非常相似,卷積元接收前兩層卷積元的輸出 h_{i}h_{i-1} 作為輸入,經過變換得到當前層的輸出 h_{i+1} ,而控制器的目標是找到從輸入 h_{i}h_{i-1} 到輸出 h_{i+1} 的變換函數。控制器會分別對Normal Cell和Reduction Cell的架構進行採樣輸出,執行步驟以5步為一組,重複B輪,每個步驟對應一個分類器,用來採樣輸出相應的操作,

  • 第1步,從 h_{i}h_{i-1} 或者之前輪次的輸出中選取一個隱藏態A;
  • 第2步,從 h_{i}h_{i-1} 或者之前輪次的輸出中選取一個隱藏態B;
  • 第3步,從運算操作集中選取一個操作,並根據該操作對隱藏態A進行處理;
  • 第4步,從運算操作集中選取一個操作,並根據該操作對隱藏態B進行處理;
  • 第5步,從合併操作集中選取一個操作,並根據該操作對第3,4步的輸出進行處理;

註:左圖是控制器執行一組採樣的示意圖;右圖是根據一組採樣結果構成的計算圖樣例

第3,4步中的運算操作集包含如下操作,

  • 恆等(Identity)
  • 1x7接7x1卷積,1x3接3x1卷積
  • 3x3擴張卷積(Dilated Convolution)
  • 3x3平均池化(Average Pooling)
  • 3x3最大池化(Max Pooling),5x5最大池化,7x7最大池化
  • 1x1卷積,3x3卷積
  • 3x3深度可分離卷積(Depth-Separable Convolution),5x5深度可分離卷積,7x7深度可分離卷積

第5步中的合併操作集包含兩種操作,一種是元素加法(Element Addition),另外一種是深度拼接。每一輪的最終輸出都有可能被選為之後輪次的輸入,最後會講所有未被選作輸入的隱藏態進行深度拼接,然後作為卷積元的最終輸出。

註:論文中AutoML設計的最優循環元架構樣例(NASNet-A)

Google Brain團隊首先在CIFAR-10圖像分類數據集上進行卷積元架構搜索,然後再將找到的最優卷積元架構直接應用到ImageNet任務上,緊接著再將在ImageNet任務上得到的圖像特徵和Faster-RCNN框架結合來完成COCO物體識別任務。最優卷積元在這3個任務上都取得了很好的效果,這說明了最優卷積元具有很好的可遷移性,後面的章節會通過實驗結果分析來進一步說明卷積元的可遷移性。


4. AutoML設計的神經網路效果如何

AutoML在Penn Treebank語言模型任務上搜索得到最優循環元,用該循環元搭建的循環神經網路取得了比之前最好模型更優的結果,而且運算速度更快。

註:在Penn Treebank語言模型任務上的單模型Perplexity

儘管最優循環元是在詞級語言模型任務上搜索得到的,將其應用到Penn Treebank字元級語言模型任務上,同樣取得了比之前最好模型更優的結果。

註:在Penn Treebank字元級語言模型任務上的Perplexity

AutoML在CIFAR-10圖像分類任務上搜索得到最優卷積元(NASNet),用該卷積元搭建的卷積神經網路在CIFAR-10圖像分類任務上取得了比之前最好模型更優的結果。

註:在CIFAR-10圖像分類任務上的錯誤率及對應的參數數量;7@2304表示在主體結構中卷積元重複次數N=7,卷積神經網倒數第二層的過濾器數量為2304

將NASNet架構直接應用到ImageNet圖像分類任務上,同樣得到了非常好的結果。

註:在ImageNet圖像分類任務上的Top1,Top5準確度以對應的參數數量,乘法累加操作數

通過配合使用Normal Cell和Reduction Cell,可以很容易地搭建計算成本不同的卷積神經網路。在計算資源受限的情況下,用NASNet搭建的卷積神經網路能夠取得比人工設計網路更優的結果。

註:計算資源受限的情況下,在ImageNet圖像分類任務上的Top1,Top5準確度以對應的參數數量,乘法累加操作數

註:不同模型在ImageNet圖像分類任務上的表現,紅色代表NASNet,黑色代表人工設計網路;左圖是的乘法累加操作數-準確度曲線;右圖是參數數量-準確度曲線

對於COCO物體識別任務,將在ImageNet任務上得到的圖像特徵和Faster-RCNN框架結合,取得了比之前人工設計網路更優的結果。

註:在COCO物體識別任務上的mAP指標

AutoML之所以能「打敗AI工程師」,主要應該歸功於其搜索空間的設計,循環元和卷積元的提出,使得神經網路架構的搜索更可行,同時搜索得到的架構也更加具有可遷移性。如果說深度學習(Deep Learning)讓AI工程師從特徵設計(Feature Design)轉向架構設計(Architecture Design),那麼隨著AutoML技術的不斷發展,AI工程師很可能需要從架構設計向搜索空間設計(Search Space Design)再次轉型。小明相信未來AI技術的趨勢一定會朝著普及化、民主化的方向發展,大家能很方便地應用AI技術,但與此同時AI研發的門檻會越來越高,需要對AI技術原理有更深的理解才能更好地進行AI技術科研創新。至於「AI工程師會不會被AI淘汰」這個問題,大家可以通過留言或者投票的方式表達自己的觀點。但無論如何,AI工程師如果想不被AI淘汰,唯有不斷地自我進化才是正道。當然也可以考慮去搞AI+區塊鏈,比如用AI去炒比特幣。

Reference

  • Zoph, Barret and Le, Quoc V. Neural architecture search with reinforcement learning. In ICLR, 2017
  • Zoph, Barret, Vasudevan, Vijay, Shlens, Jonathon, and Le, Quoc V. Learning transferable architectures for scalable image recognition. In CVPR, 2017.
  • Using Machine Learning to Explore Neural Network Architecture
  • AutoML for large scale image classification and object detection
  • Cloud AutoML: Making AI accessible to every business

推薦閱讀:

TAG:人工智慧 | 深度學習DeepLearning | 機器學習 |