论文笔记系列-Efficient Neural Architecture Search via Parameter Sharing
Summary
本文提出超越神經(jīng)架構(gòu)搜索(NAS)的高效神經(jīng)架構(gòu)搜索(ENAS),這是一種經(jīng)濟(jì)的自動化模型設(shè)計(jì)方法,通過強(qiáng)制所有子模型共享權(quán)重從而提升了NAS的效率,克服了NAS算力成本巨大且耗時(shí)的缺陷,GPU運(yùn)算時(shí)間縮短了1000倍以上。在Penn Treebank數(shù)據(jù)集上,ENAS實(shí)現(xiàn)了55.8的測試?yán)Щ蠖?#xff1b;在CIFAR-10數(shù)據(jù)集上,其測試誤差達(dá)到了2.89%,與NASNet不相上下(2.65%的測試誤差)
Research Objective 作者的研究目標(biāo)
設(shè)計(jì)一種快速有效且耗費(fèi)資源低的用于自動化網(wǎng)絡(luò)模型設(shè)計(jì)的方法。主要貢獻(xiàn)是基于NAS方法提升計(jì)算效率,使得各個(gè)子網(wǎng)絡(luò)模型共享權(quán)重,從而避免低效率的從頭訓(xùn)練。
Problem Statement 問題陳述,要解決什么問題?
本文提出的方法是對NAS的改進(jìn)。NAS存在的問題是它的計(jì)算瓶頸,因?yàn)镹AS是每次將一個(gè)子網(wǎng)絡(luò)訓(xùn)練到收斂,之后得到相應(yīng)的reward,再將這個(gè)reward反饋給RNN controller。但是在下一輪訓(xùn)練子網(wǎng)絡(luò)時(shí),是從頭開始訓(xùn)練,而上一輪的子網(wǎng)絡(luò)的訓(xùn)練結(jié)果并沒有利用起來。
另外NAS雖然在每個(gè)節(jié)點(diǎn)上的operation設(shè)計(jì)靈活度較高,但是固定了網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)為二叉樹。所以ENAS對于網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的設(shè)計(jì)做了改進(jìn),有了更高的靈活性。
Method(s) 解決問題的方法/算法
ENAS算法核心
回顧NAS,可以知道其本質(zhì)是在一個(gè)大的搜索圖中找到合適的子圖作為模型,也可以理解為使用單個(gè)有向無環(huán)圖(single directed acyclic graph, DAG)來表示NAS的搜索空間。
基于此,ENAS的DAG其實(shí)就是NAS搜索空間中所有可能的子模型的疊加。
下圖給出了一個(gè)通用的DAG示例
如圖示,各個(gè)節(jié)點(diǎn)表示本地運(yùn)算,邊表示信息的流動方向。圖中的6個(gè)節(jié)點(diǎn)包含有多種單向DAG,而紅色線標(biāo)出的DAG則是所選擇的的子圖。
以該子圖為例,節(jié)點(diǎn)1表示輸入,而節(jié)點(diǎn)3和節(jié)點(diǎn)6因?yàn)槭嵌斯?jié)點(diǎn),所以作為輸出,一般是將而二者合并求均值后輸出。
在討論ENAS的搜索空間之前,需要介紹的是ENAS的測試數(shù)據(jù)集分別是CIFAR-10和Penn Treebank,前者需要通過ENAS生成CNN網(wǎng)絡(luò),后者則需要生成RNN網(wǎng)絡(luò)。
所以下面會從生成RNN和生成CNN兩個(gè)方面來介紹ENAS算法。
1.Design Recurrent Cells
本小節(jié)介紹如何從特定的DAG和controller中設(shè)計(jì)一個(gè)遞歸神經(jīng)網(wǎng)絡(luò)的cell(Section 2.1)?
首先假設(shè)共有\(N\)個(gè)節(jié)點(diǎn),ENAS的controller其實(shí)就是一個(gè)RNN結(jié)構(gòu),它用于決定
- 哪條邊需要激活
- DAG中每個(gè)節(jié)點(diǎn)需要執(zhí)行什么樣的計(jì)算
下圖以\(N=4\)為例子展示了如何生成RNN。
假設(shè)\(x[t]\)為輸入,\(h[t-1]\)表示上一個(gè)時(shí)刻的輸出狀態(tài)。
- 節(jié)點(diǎn)1:由圖可知,controller在節(jié)點(diǎn)1上選擇的操作是tanh運(yùn)算,所以有\(h_1=tanh(X_t·W^{(X)}+h_{t-1}·W_1^{(h)})\)
- 節(jié)點(diǎn)2:同理有\(h_2 = ReLU(h_1·W_{2,1}^{(h)})\)
- 節(jié)點(diǎn)3:\(h_3 = ReLU(h_2·W_{3,2}^{(h)})\)
- 節(jié)點(diǎn)4:\(h_4 = ReLU(h_1·W_{4,1}^{(h)})\)
- 節(jié)點(diǎn)3和節(jié)點(diǎn)4因?yàn)椴皇瞧渌?jié)點(diǎn)的輸入,所以二者的平均值作為輸出,即\(h_t=\frac{h_3+h_4}{2}\)
由上面的例子可以看到對于每一組節(jié)點(diǎn)\((node_i,node_j),i<j\),都會有對應(yīng)的權(quán)重矩陣\(W_{j,i}^{(h)}\)。因此在ENAS中,所有的recurrent cells其實(shí)是在搜索空間中共享這樣一組權(quán)重的。
但是我們可以很容易知道ENAS的搜索空間是非常龐大的,例如假設(shè)共有4中激活參數(shù)(tanh,identity,sigmoid,ReLU)可以選擇,節(jié)點(diǎn)數(shù)為N,那么搜索空間大小則為\(4^N * N!\),如果N=12,那么就將近有\(10^{15}\)種模型參數(shù)。
2.1 Design Convolutional Networks
本小節(jié)解釋如何設(shè)計(jì)卷積結(jié)構(gòu)的搜索空間
回顧上面的Recurrent Cell的設(shè)計(jì),我們知道controller RNN在每一個(gè)節(jié)點(diǎn)會做如下兩個(gè)決定:a)該節(jié)點(diǎn)需要連接前面哪一個(gè)節(jié)點(diǎn) b)使用何種激活函數(shù)。
而在卷積模型的搜索空間中,controller RNN也會做如下兩個(gè)覺得:a)該節(jié)點(diǎn)需要連接前面哪一個(gè)節(jié)點(diǎn) b)使用何種計(jì)算操作。
在卷積模型中,(a)決定 (連接哪一個(gè)節(jié)點(diǎn)) 其實(shí)就是skip connections。(b)決定一共有6種選擇,分別是3*3和5*5大小的卷積核、3*3和5*5大小的深度可分離卷積核,3*3大小的最大池化和平均池化。
下圖展示了卷積網(wǎng)絡(luò)的生成示意圖。
2.2 Design Convolutional Cell
本文并沒有采用直接設(shè)計(jì)完整的卷積網(wǎng)絡(luò)的方法,而是先設(shè)計(jì)小型的模塊然后將模塊連接以構(gòu)建完整的網(wǎng)絡(luò)(Zoph et al., 2018)。
下圖展示了這種設(shè)計(jì)的例子,其中設(shè)計(jì)了卷積單元和 reduction cell。
接下來將討論如何利用 ENAS 搜索由這些單元組成的架構(gòu)。
假設(shè)下圖的DAG共有\(B\)個(gè)節(jié)點(diǎn),其中節(jié)點(diǎn)1和節(jié)點(diǎn)2是輸入,所以controller只需要對剩下的\(B-2\)個(gè)節(jié)點(diǎn)都要做如下兩個(gè)決定:a)當(dāng)前節(jié)點(diǎn)需要與那兩個(gè)節(jié)點(diǎn)相連 b)所選擇的兩個(gè)節(jié)點(diǎn)需要采用什么樣的操作。(可選擇的操作有5種:identity(id,相等),大小為3*3或者5*5的separate conv(sep),大小為3*3的最大池化。)
可以看到對于節(jié)點(diǎn)3而言,controller采樣的需要連接的兩個(gè)節(jié)點(diǎn)都是節(jié)點(diǎn)2,兩個(gè)節(jié)點(diǎn)預(yù)測的操作分別是sep 5*5和identity。
3.Training ENAS and Deriving Architectures
本小節(jié)介紹如何訓(xùn)練ENAS以及如何從ENAS的controller中生成框架結(jié)構(gòu)。(Section 2.2)
controller網(wǎng)絡(luò)是含有100個(gè)隱藏節(jié)點(diǎn)的LSTM。LSTM通過softmax分類器做出選擇。另外在第一步時(shí)controller會接收一個(gè)空的embedding作為輸入。
在ENAS中共有兩組可學(xué)習(xí)的參數(shù):
- 子網(wǎng)絡(luò)模型的共享參數(shù),用\(w\)表示。
- controller網(wǎng)絡(luò)(即LSTM網(wǎng)絡(luò)參數(shù)),用\(θ\)表示。
而訓(xùn)練ENAS的步驟主要包含兩個(gè)交叉階段:第一部訓(xùn)練子網(wǎng)絡(luò)的共享參數(shù)\(w\);第二個(gè)階段是訓(xùn)練controller的參數(shù)\(θ\)。這兩個(gè)階段在ENAS的訓(xùn)練過程中交替進(jìn)行,具體介紹如下:
子網(wǎng)絡(luò)模型共享參數(shù)\(w\)的訓(xùn)練
在這個(gè)步驟中,首先固定controller的policy network,即\(π(m;θ)\)。之后對\(w\)使用SGD算法來最小化期望損失函數(shù)\(E_{m~π}[L(m;w)]\)。
其中\(L(m;w)\)是標(biāo)準(zhǔn)的交叉熵?fù)p失函數(shù):\(m\)表示根據(jù)policy network \(π(m;θ)\)生成的模型,然后用這個(gè)模型在一組訓(xùn)練數(shù)據(jù)集上計(jì)算得到的損失值。
根據(jù)Monte Carlo估計(jì)計(jì)算梯度公式如下:
\[\nabla_w E_{m-~π}(m;θ)[L(m;w)] ≈ \frac{1}{M} \sum_i^M \nabla_wL(m_i;w) \]
其中上式中的\(m_i\)表示由\(π(m;θ)\)生成的M個(gè)模型中的某一個(gè)模型。
雖然上式給出了梯度的無偏估計(jì),但是方差比使用SGD得到的梯度的方差大。但是當(dāng)\(M=1\)時(shí),上式效果還可以。
訓(xùn)練controller參數(shù)θ
在這個(gè)步驟中,首先固定\(w\),之后通過求解最大化期望獎(jiǎng)勵(lì)\(E_{m~π}[R(m;w)]\)來更新\(θ\)。其中在語言模型實(shí)驗(yàn)中\(R(m;w)=\frac{c}{valid\_ppl}\),perplexity是基于小批量驗(yàn)證集計(jì)算得到的;在分類模型試驗(yàn)中,\(R(m;w)\)等于基于小批量驗(yàn)證集的準(zhǔn)確率。
導(dǎo)出模型架構(gòu)
首先使用\(π(m,θ)\)生成若干模型。
之后對于每一個(gè)采樣得到的模型,直接計(jì)算其在驗(yàn)證集上得到的獎(jiǎng)勵(lì)。
最后選擇獎(jiǎng)勵(lì)最高的模型再次從頭訓(xùn)練。
當(dāng)然如果像NAS那樣把所有采樣得到的子模型都先從頭訓(xùn)練一邊,也許會對實(shí)驗(yàn)結(jié)果有所提升。但是ENAS之所以Efficient,就是因?yàn)樗挥眠@么做,原理繼續(xù)看下文。
Evaluation 評估方法
1.在 Penn Treebank 數(shù)據(jù)集上訓(xùn)練的語言模型
2.在 CIFAR-10 數(shù)據(jù)集上的圖像分類實(shí)驗(yàn)
由上表可以看出,ENAS的最終結(jié)果不如NAS,這是因?yàn)镋NAS沒有像NAS那樣從訓(xùn)練后的controller中采樣多個(gè)模型架構(gòu),然后從中選出在驗(yàn)證集上表現(xiàn)最好的一個(gè)。但是即便效果不如NAS,但是ENAS效果并不差太多,而且訓(xùn)練效率大幅提升。
下圖是生成的宏觀搜索空間。
ENAS 用了 11.5 個(gè)小時(shí)來發(fā)現(xiàn)合適的卷積單元和 reduction 單元,如下圖所示。
Conclusion
ENAS能在Penn Treebank和CIFAR-10兩個(gè)數(shù)據(jù)集上得到和NAS差不多的效果,而且訓(xùn)練時(shí)間大幅縮短,效率大大提升。
MARSGGBO原創(chuàng)
2018-8-7
總結(jié)
以上是生活随笔為你收集整理的论文笔记系列-Efficient Neural Architecture Search via Parameter Sharing的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实操:商品列表三级分类的实现方法
- 下一篇: Chaincode for Operat