1. 程式人生 > >NASH:基於豐富網路態射和爬山演算法的神經網路架構搜尋 | ICLR 2018

NASH:基於豐富網路態射和爬山演算法的神經網路架構搜尋 | ICLR 2018

> 論文提出NASH方法來進行神經網路結構搜尋,核心思想與之前的EAS方法類似,使用網路態射來生成一系列效果一致且繼承權重的複雜子網,本文的網路態射更豐富,而且僅需要簡單的爬山演算法輔助就可以完成搜尋,耗時0.5GPU day   來源:曉飛的演算法工程筆記 公眾號 **論文: Simple And Efficient Architecture Search for Convolutional Neural Networks** ![](https://upload-images.jianshu.io/upload_images/20428708-5c5fa44a379ed028.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * **論文地址:[https://arxiv.org/pdf/1711.04528.pdf](https://arxiv.org/pdf/1711.04528.pdf)** # Introduction ***   論文目標在於大量減少網路搜尋的計算量並保持結果的高效能,核心思想與EAS演算法類似,主要貢獻如下: * 提供baseline方法,隨機構造網路並配合SGDR進行訓練,在CIFAR-10上能達到6%-7%的錯誤率,高於大部分NAS方法。 * 拓展了EAS在網路態射(network morphisms)上的研究,能夠提供流行的網路構造block,比如skip connection和BN。 * 提出基於爬山演算法的神經網路結構搜尋NASH,該方法迭代地進行網路搜尋,在每次迭代中,對當前網路使用一系列網路態射得到多個新網路,然後使用餘弦退火進行快速優化,最終得到效能更好的新網路。在CIFAR-10上,NASH僅需要單卡12小時就可以達到baseline的準確率。 # Network Morphism ***   $\mathcal{N}(\mathcal{X})$為$\mathcal{X}\in \mathbb{R}^n$上的一系列網路,網路態射(network morphism)為對映$M: \mathcal{N}(\mathcal{X}) \times \mathbb{R}^k \to \mathcal{N}(\mathcal{X}) \times \mathbb{R}^j$,從引數為$w\in \mathbb{R}^k$的網路$f^w \in \mathcal{N}(\mathcal{X})$轉換為引數為$\tilde{w} \in \mathbb{R}^j$的網路$g^\tilde{w} \in \mathcal{N}(\mathcal{X})$,並且滿足公式1,即對於相同的輸入,網路的輸出不變。 ![](https://upload-images.jianshu.io/upload_images/20428708-1086660a0ff2d0da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   下面給出幾種標準網路結構的網路態射例子: ### Network morphism Type I ![](https://upload-images.jianshu.io/upload_images/20428708-b71aec4e6e798a48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   將$f^w$進行公式2的替換,$\tilde{w}=(w_i, C, d)$,為了滿足公式1,設定$A=1$和$b=0$,可用於新增全連線層。 ![](https://upload-images.jianshu.io/upload_images/20428708-1a1e03b07d2bf248.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   另外一種複雜點的策略如公式3,$\tilde{w}=(w_i, C, d)$,設定$C=A^{-1}$和$d=-Cb$,可用於表達BN層,其中$A$和$b$表示統計結構,$C$和$d$為可學習的$\gamma$和$\beta$。 ### Network morphism Type II   假設$f_i^{w_i}$可由任何函式$h$表示,即$f_i^{w_i}=Ah^{w_h}(x)+b$ ![](https://upload-images.jianshu.io/upload_images/20428708-0fb819734d17f78a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   則可以將$f^w$,$w_i = (w_h, A, b)$配合任意函式$\tilde{h}^{w_{\tilde{h}}}(x)$根據公式4替換為$\tilde{f}^{\tilde{w}_i}$,$\tilde{w}=(w_i, w_{\tilde{h}}, \tilde{A})$,設定$\tilde{A}=0$。這個態射可以表示為兩種結構: * 增加層寬度,將$h(x)$想象為待拓寬的層,設定$\tilde{h}=h$則可以增加兩倍的層寬度。 * concatenation型的skip connection,假設$h(x)$本身就是一系列層操作$h(x)=h_n(x) \circ \cdots \circ h_0(x)$,設定$\tilde{h}(x)=x$來實現短路連線。 ### Network morphism Type III ![](https://upload-images.jianshu.io/upload_images/20428708-798797c05a24af87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   任何冪等的函式$f_i^{w_i}$都可以通過公式5進行替換,初始化$\tilde{w}_i=w_i$,公式5在無權重的冪等函式上也成立,比如ReLU。 ### Network morphism Type IV ![](https://upload-images.jianshu.io/upload_images/20428708-92307c77c9c8027c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   任何層$f_i^{w_i}$都可以配合任意函式$h$進行公式6的替換,初始化$\lambda=1$,可用於結合任意函式,特別是非線性函式,也可以用於加入additive型的skip connection。   此外,不同的網路態射組合也可以產生新的態射,比如可以通過公式2、3和5在ReLU層後面插入"Conv-BatchNorm-Relu"的網路結構。 # Architecture Search by Network Morphisms *** ![](https://upload-images.jianshu.io/upload_images/20428708-2762c2ef39c9e0ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   NASH方法基於爬山演算法,先從小網路開始,對其進行網路態射生成更大的子網路,由於公式1的約束,子網的效能與原網路是一樣的,後續子網進行簡單的訓練看是否有更好的效能,最後選擇效能優異的子網進行重複的操作。 ![](https://upload-images.jianshu.io/upload_images/20428708-3c22d496b9937f9c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   圖1可視化了NASH方法的一個step,演算法1的ApplyNetMorph(model, n)包含n個網路態射操作,每個為以下方法的隨機一種: * 加深網路,例如新增Conv-BatchNorm-Relu模組,插入位置和卷積核大小都是隨機的,channel數量跟最近的卷積操作一致。 * 加寬網路,例如使用network morphism type II來加寬輸出的channel,加寬比例隨機。 * 新增從層$i$到層$j$的skup connection,使用network morphism type II或IV,插入位置均隨機選擇。   由於使用了網路態射,子網繼承了原網路的權重且效能一致,NASH方法優勢在於能夠很快的評估子網的效能,論文使用了簡單的爬山演算法,當然也可以選擇其它的優化策略。 # Experiments *** ### Baslines ![](https://upload-images.jianshu.io/upload_images/20428708-cfa80a7872142073.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### Retraining from Scratch ![](https://upload-images.jianshu.io/upload_images/20428708-e2aa17238ab7bc65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### CIFAR-10 ![](https://upload-images.jianshu.io/upload_images/20428708-73323c881cb777cd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### CIFAR-100 ![](https://upload-images.jianshu.io/upload_images/20428708-00d8a023535ffb02.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # CONCLUSION ***   論文提出NASH方法來進行神經網路結構搜尋,核心思想與之前的EAS方法類似,使用網路態射來生成一系列效果一致且繼承權重的複雜子網,本文的網路態射更豐富,而且僅需要簡單的爬山演算法輔助就可以完成搜尋,耗時0.5GPU day       > 如果本文對你有幫助,麻煩點個贊或在看唄~ 更多內容請關注 微信公眾號【曉飛的演算法工程筆記】 ![work-life balance.](https://upload-images.jianshu.io/upload_images/20428708-7156c0e4a2f49bd6.png?imageMogr2/auto-orient/strip%7CimageView2/2