論文提出經濟實惠且高效的神經網絡結構搜索算法EAS,使用RL agent做爲meta-controller,學習經過網絡變換進行結構空間探索。從指定的網絡開始,經過function-preserving transformation不斷重用其權重,EAS可以重用以前學習到的知識進行高效地探索新的結構,僅須要10 GPU days便可
來源:曉飛的算法工程筆記 公衆號
論文: Efficient Architecture Search by Network Transformation算法
爲了加速神經網絡搜索過程,論文提出EAS(Efficient Architecture Search),meta-controller經過網絡轉化(network transformation)操做進行結構空間探索,操做包含拓寬層,插入層,增長skip-connections等。爲了繼續使用學習到的權重,基於function-preserving transformation來初始化新的不一樣參數的網絡,再進一步訓練來提升性能,可以顯著地加速訓練過程。對於meta-controller,則結合了最近的強化學習方法微信
總體算法邏輯如圖1,meta-controller學習如何對當前網絡中進行網絡轉換,爲了學習多種網絡轉換操做以及不增長meta-contreoller複雜性,使用encoder network來學習當前網絡的低維表達,而後傳到actor netowrk來生成一個肯定的模型轉換動做。爲了處理不定長的網絡結構輸入以及考慮總體網絡結構,使用bidrectional recurrent network以及input embedding layer網絡
給予輸入結構的低維表達,每一個actor network給予特定的網絡轉換動做,共有兩種actor network,分別是Net2Wider actor和Net2Depperapp
Net2Wider在保持網絡功能下替換網絡的某一層爲更寬的層,例如對於全鏈接層是增長unit數,對於卷積層是增長卷積核數。對於卷積層的卷積核$K_l$,shape爲$(k_w^l,k_h^l,f_i^l,f_o^l)$,分別表明卷積核寬高以及輸入和輸出的維度數,將當前層替換成更寬的層即$\hat {f}_o^l>f_o^l$dom
首先介紹隨機映射函數$G_l$,能夠得到新卷積核$\hat{K}_l[k_w^l,k_h^l,f_i^l,f_j^l]$,第一個$f_o^l$直接從$K_l$中得到,剩餘的$\hat{f}_o^l-f_o^l$維根據$G_l$從$K_l$中隨機選擇一維,所以,更寬的新層的輸出特徵$\hat{O}_l=O_l(G_l(j))$ide
爲了保持原有的功能,因爲輸入多了複製的部分,下一層的卷積核$K_{l+1}$須要修改,新卷積核$\hat{K}_{l+1}$的shap維$(k_w^{l+1},k_h^{l+1},\hat{f}_i^{l+1}=\hat{f}_o^l,f_o^{l+1})$,公式3的意思大概是,權重要除之前一層對應維度複製的次數,以保證$l+1$層輸出跟以前同樣 函數
爲了方便,論文使用的Net2Wider actor同時決定處理的層,對於encoder netowrk輸出的每一層對應的hidden state使用shared sigmoid分類器,另外將卷積的核數或全鏈接的unit數進行分區,直接將決定的層的對應參數升至下一個區間,例如$32\to 64$性能
Net2DeeperNet操做向網絡中插入新的層,而後將其初始化成跟插入identity mapping同樣,保持其原來的功能。對於新的卷積層,將其卷積核設爲identity卷積核,對於全鏈接層,則將權重矩陣設爲identiy矩陣,所以,新層必須與前一層有同樣的核數或unit。另外,想要保持原來網絡的性能,對於激活函數$\phi$,必須知足$\phi(I\phi(v))=\phi(v)$,ReLU能知足,而Sigmoid和thnh不能,但仍然能夠重用帶sigmoid或tanh激活的網絡的權重,畢竟這樣總比隨機初始化要好。另外,當使用BN時,要設置其scale和bias爲undo normalization,而不是初始化爲1和0學習
Net2Deeper actor的結構如圖3,爲一個循環神經網絡,hidden state初始化爲encoder network的最後一個hidden state。將CNN結構根據pooling的位置分紅多個block,首先肯定插入的block,而後再肯定插入層的下標,對於新的卷積網絡,agent還須要肯定卷積核大小和步長,而對於全鏈接層則不須要。在卷積網絡中,全鏈接層須要在網絡的頂層,若是插入位置在全局池化或全鏈接後面,新層則指定爲全鏈接層spa
原始的Net2Net設定網絡是layer-to-layer的,沒有並行層,但目前的網絡大都將單層的輸入應用到多個後續的多個層中,直接應用Net2Net會出現問題,所以論文對其進行了改進。對於DenseNet,$l^{th}$層會將全部前面的層concatenate成輸入$[O_0,O_1,...,O_{l-1}]$,標記$l^{th}$層的卷積核爲$K_l$,shape爲$(k_w^l,k_h^l,f_i^l,f_o^l)$
假設須要拓寬層並保持其功能,首先根據Net2WiderNet操做按公式1和公式2生成新層$\hat{K}_l$,這樣新輸出爲$\hat{O}_l=O_l(G_l(j))$,因爲$l^{th}$的輸出會傳遞到多層,$\hat{O}_l$的複製會傳遞到後面的全部層,因此要修改全部後續的層
對於$m^{th}>l$層,輸入變爲$[O_0,...,O_{l-1},\hat{O}_l,O_{l+1},...,O_{m-1}]$,將隨機映射函數改成公式4,$f_o^{0:l}=\sum_{v=0}^{l-1}f_o^v$爲$l^{th}$層的全部輸入數量,公式4的第一部分爲$[O_0,...,O_{l-1}]$,第二部分爲$\hat{O}_l$,第三部分爲$[O_{l+1},...,O_{m-1}]$
$\hat{G}_m$的簡單示意如上,前面的爲新層的index,後面爲對應的舊的維度index,而後$m^{th}$層的新權重直接使用替換成$\hat{G}_m$的公式3得到
假設要在DenseNet的$l^{th}$層插入新層,新層輸入爲$O_{new}$,輸出爲$[O_0,O_1,...,O_l]$。所以,對於$m^{th}>l$層,插入後的輸入爲$[O_0,...,O_{l},O_{new},O_{l+1},...,O_{m-1}]$,爲了按照相似Net2WiderNet那樣保持性能,$O_{new}$應該爲$[O_0,O_1,...,O_l]$中的一個複製
新層的每一個卷積核能夠表示爲tensor$\hat{F}$,shape爲$(k_w^{new},k_h^{new},f_i^{new}=f_o^{0:l+1})$,第三項爲輸入channel數。爲了讓$\hat{F}$的輸入爲$[O_0,O_1,...,O_l]$的$n^{th}$項,按照相似公式5的方式進行設置(假設卷積寬高爲3),其它卷積核設爲0,當新層的的輸出設定好後。創建一個特定的隨機映射(這裏是按照層創建映射,前面是按照映射創建層),而後按照公式4和公式3來修改後續的層的卷積核
EAS使用5 GPU進行搜索,有兩種設定,第一種爲普通卷積網絡空間,僅包含卷積、池化和全鏈接,第二種爲DenseNet結構空間
meta-controller爲單層雙向LSTM,50個hidden units,embedding size爲16,使用ADAM進行訓練。每輪經過網絡轉換採樣10個模型,因爲重用了特徵,每一個模型只訓練20輪(原來爲50輪),初始學習率調低爲0.02,使用SGD訓練,對準確率$acc$進行線性變化來放大高準確率的收益,例如$tanh(acc_v\times \pi/2)$,另外,每一個卷積和全鏈接後面接ReLU和BN
初始網絡如表1,卷積核大小爲$\{1,3,5 {\}}$,卷積核數量爲$\{16,32,64,96,128,192,256,320,384,448,512 \}$,全卷積的unit數爲$\{64,128,256,384,512,640,768,896,1024 \}$
訓練分爲兩階段,第一階段每輪將起始網絡進行5次Net2Deeper和4次Net2Wider,採樣夠300個網絡後,選取表現最好的網絡訓練100輪做爲下階段的輸入。第二階段也是進行5次Net2Deeper和4次Net2Wider,採樣150個網絡後中止,取最好模型進行300輪迭代。結果如表2的depth=16,總體須要10 GPU days,共450個網絡
將上一個實驗的最好模型做爲此次實驗的起點,結果如表2的depth=20,另外與SOTA進行了對比,結果如表3
將DenseNet-BC(L=40,k=40)做爲起點,結果如表4
論文提出經濟實惠且高效的神經網絡結構搜索算法EAS,使用RL agent做爲meta-controller,學習經過網絡變換進行結構空間探索。從指定的網絡開始,經過function-preserving transformation不斷重用其權重,EAS可以重用以前學習到的知識進行高效地探索新的結構,僅須要10 GPU days便可
若是本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公衆號【曉飛的算法工程筆記】