告別煉丹,Google Brain提出強化學習助力Neural Architecture Search | ICLR2017
- 2020 年 3 月 27 日
- 筆記
論文為Google Brain在16年推出的使用強化學習的Neural Architecture Search方法,該方法能夠針對數據集搜索構建特定的網路,但需要800卡訓練一個月時間。雖然論文的思路有很多改進的地方,但該論文為AutoML的經典之作,為後面很多的研究提供了思路,屬於里程碑式的論文,十分值得認真研讀,後面讀者會持續更新AutoML的論文,有興趣的可以持續關注
來源:曉飛的演算法工程筆記 公眾號
論文:Neural Architecture Search with Reinforcement Learning
Introduction
論文提出神經網路架構搜索(Neural Architecture Search),一個用於搜索架構的gradient-based方法,主要包含4個步驟:
- the controller. 網路結構可能看成是可變長的字元串,因此,論文使用循環神經網路(recurrent network)來產生這樣的字元串
- child network. 在實際數據集上訓練字元串對應的網路(child network),在驗證集上獲得準確率
- prolicy signal. 將準確率作為獎勵訊號(reward signal),我們能計算策略梯度(policy gradient)來更新controller
- iteration. 重複步驟1-3,controller將學習到如何針對訓練集構建合適的神經網路
Methods
GENERATE MODEL DESCRIPTIONS WITH A CONTROLLER RECURRENT NEURAL NETWORK
假設需要產生一個僅包含卷積層的神經網路,如圖2,the controller會生成一個代表網路超參數的token序列。在實驗中,當層數達到設定後,生成操作就會停止,這個設定會按設定隨著訓練的進行增加。對於the controller產生的網路,會進行訓練並在收斂後在預留的驗證集上進行測試和記錄,將準確率作為指標來優化the controller RNN的參數$theta_c$
TRAINING WITH REINFORCE
controller產生的網路可以標記為一連串action $a_{1:T}$,網路在驗證集上的準確率標記為$R$,將$R$作為獎勵資訊,使用強化學習來訓練controller最大化$R$,損失函數為準確率的期望
由於$R$對於controller是不可導的($R$是獨立訓練產生的),需要使用強化學習的policy gradient method來更新$theta_c$,這裡採用Williams的REINFORCE方法,通過多次取樣來估算獎勵期望進行梯度計算(這裡有懂強化學習的讀者,可以留言講解下這個公式)
轉換後,對於controller的梯度$triangledown_{theta_c} J(theta_c)$就如上式所示,m為controller一次產生的網路數,T為controller產生的超參數,$R_k$為第k個網路的準確率
前面的更新公式是對梯度的無偏估計,但會產生較大的方差,因為產生的網路品質不穩定,每輪的準確差異可能很大。為了減少方差,加入基底參數b,即REINFORCE with Baseline,這裡的b是之前每輪網路的準確率的指數滑動平均(exponential moving average),這樣就能判斷當前的準確率較之前是上升了還是下降了,從而更好地更新controller。由於b與當前的iteration無關,所以公式依然是無偏估計
由於網路的訓練需要很長時間,論文採用分散式訓練以及非同步更新參數的方法來加速整體流程。採用parameter-server的結構,總共S個parameter server,K個controller,每個controller一次訓練m個網路。在網路都收斂後,controller收集梯度發送給parameter server,收斂定義為訓練達到設定的周期
INCREASE ARCHITECTURE COMPLEXITY WITH SKIP CONNECTIONS AND OTHER LAYER TYPES
前面提到的網路構建不包含目前流行的skip-connection layer(ResNet)和branching layer(GoogleNet),論文使用Neelakan-tan提出的給予注意力極致的set-selection type attention來增加這個特性
在層N添加一個anchor point隱藏層,該層輸出N-1個content-based sigmoids來指示之前的層是否需要連接,$h_j$代表構造的網路的第j層的anchor point,$W_{prev}$ $W_{curr}$ $v$是可訓練的參數,由於這些參數依然是概率分布,所以REINFORCE方法依然可直接使用
在實際中,如果一個層包含多個輸入,會將輸入進行concat操作。由於每層的輸出大小不一樣,而且有的層甚至沒有輸入和輸出,skip connection可能會出現問題,主要有以下3種應對方法:
- 如果當前層無輸入,直接將image作為輸入
- 在最後一層將所有無連接的輸出concat作為最後的的分類器的輸入
- 當concat的輸入大小不一致時,將小的輸入進行0填充至統一大小
最後,論文提到controller可以添加學習率等參數的預測。此外,可以增加layer type的預測,來讓controller增加pooling, local contrast normalization, batchnorm等層的添加
GENERATE RECURRENT CELL ARCHITECTURES
論文也在RNN架構搜索上進行了嘗試,RNN和LSTM單元(cell)可以定義為一個樹狀結構,將$x_t$和$h_{t-1}$作為輸入,輸出$h_t$。controller需要預測結構中node的合併方式(addition, elementwise, multiplication等)和激活函數(tanh, sigmoid等)來處理輸入以及生成輸出,然後將兩個node的輸出喂到下一個node中,為了方便預測,對樹狀結果的每一個node進行了編號
另外,受LSTM的啟發,為每個單元添加變數$c_{t-1}$和$c_t$來存儲記憶狀態(memory state),讓controller選擇這兩個變數分別連接哪個node,注意$c_{t-1}$需要合併和激活操作(Cell Inject),整體的預測步驟如下:
- controller預測node 0的操作為$Add$和$Tanh$,$a_0=tanh(W_1 * x_t + W_2 * h_{t-1})$
- controller預測node 1的操作為$ElemMult$和$ReLU$,$a_1=ReLU((W_3 * x_t) odot (W_4*h_{t-1}))$
- controller預測"Cell Index"的第二個變數為0,以及"Cell Inject"的操作為$Add$和$ReLU$,$a_0^{new}=ReLU(a_0+c_{t-1})$
- controller預測node 2的操作為$ElemMult$和$Sigmoid$,$a_2=sigmoid(a_0^{new}odot a_1)$
- controller預測"Cell Index"的第一個變數為1,將$c_t$設為node 1激活前的輸出
EXPERIMENTS AND RESULT
LEARNING CONVOLUTIONAL ARCHITECTURES FOR CIFAR-1
-
Search spac
搜索空間包含卷積操作,ReLu,batch normalization和skip connection。卷積核的長寬限制在$[1,3,5,7]$,output_num限制在$[24,36,48,64]$,步長包含兩種,一種固定為1,一種則限制在$[1,2,3]$
-
Training details
controller為雙層LSTM,每層35個隱藏單元,使用ADAM優化,學習率為0.0006。搜索的網路進行50輪訓練,驗證集是從訓練機隨機挑選的5000張樣本,使用Nesterov Momentum訓練,學習率為0.1。網路的層數初始為6層,每產生1600個子網路就增加2層
-
Results
在訓練了12800個網路後,得到了準確率最高的網路結構,之後進行小範圍的超參數(learning rate,weight decay,batchnorm epsilon,epoch to decay learning rate)搜索,最後得到表1的結果:
- 如果不預測步長和池化,能夠得到一個5.5% errror rate的15-layer網路結構,這個結構準確率和層數的性價比很高,但是他的性能很慢,見Appendix,值得注意的是,這個結構包含很多長方形和比較大的卷積核,以及包含很多skip connections
- 當需要預測步長時,由於搜索空間很大,搜索出的20-layer網路精度僅有6.01%
- 最後,在允許網路在13層和24層包含池化操作後,controller能夠設計一個39-layer的網路,精度達到4.47%。為了縮小搜索空間,讓模型預測13層網路,每層由全連接3層的3個子層構成(類似與densenet),此外,縮小卷積數量為$[6,12,24,36]$,每個大層增加40個卷積核,最終準確率達到3.74%,超越人類設計的最好網路
LEARNING RECURRENT CELLS FOR PENN TREEBANK
-
Dataset
RNN在Penn Treebank數據集上進行語言模型構建,進行word-level的實驗,即單詞預測
-
Search space
combination method為$[add,elem_mult]$,activation method為$[identity,tanh,sigmoid,relu]$,RNN單元的輸入對為8對(對應之前的node0 node 1那種),總共大約$6times 10^{16}$種網路結構
-
Training details
學習率為0.0005,每個子模型訓練35個epoch,每個子網路包含兩層,獎勵函數為$frac{c}{(validation perplexity)^2}$,c一般設為80。同樣的,在搜索完結構後,需要進行超參數搜索
-
Result
從表2可以看到,搜索到的網路性能達到了state-of-the-art,搜索出來的結構跟LSTM單元十分相似
-
Transfer Learning Results
為了驗證搜索的單元在不同任務上的通用性,在同樣的數據集上進行character-level的實驗,即字元預測,從結構看出,搜索的結構依然表現不錯
-
Control Experiment 1 – Adding more functions in the search space
為了驗證架構搜索的魯棒性,添加max合併方法和sin激活方法,從實驗來看,雖然搜索空間變大了,但結果相差不大,結果見Appendix A
-
Control Experiment 2 – Comparison against Random Search
論文進行了隨機搜索的對比,儘管這個方法看起來,但是實際經常很難超越,從實驗結果看來,論文提出的搜索方法不僅最好的模型要優異,整體平均都要優於隨機搜索
CONCLUSION
論文使用強化學習進行Neural Architecture Search這一創新的方法,該方法能夠針對數據集搜索構建特定的網路,但搜索的資源消費巨大。從實驗的過程來看,論文提出的方法還是需要添加許多人工干預的部分才能突破各個task中的state-of-the-art,而且需要十分多的計算資源和時間,但是從意義來說,該論文開創了AutoML的序幕,為後面很多的研究提供了思路,十分值得認真研讀
參考內容
- [Simple Statistical Gradient-Following Algorithms for Connectionist Reinforcement Learning
–WILLIAMS,R. J.
](http://www-anw.cs.umass.edu/~barto/courses/cs687/williams92simple.pdf) - [Neural Programmer: Inducing Latent Programs with Gradient Descent – Arvind Neelakantan
](https://arxiv.org/abs/1511.04834)
A APPENDIX
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】