天天看點

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

參考代碼:enas

1. 概述

導讀:這篇文章是在NAS的基礎上提出使用權值共享的方式進行網絡搜尋,避免了控制器采樣得到sample的重複訓練,進而壓縮整體搜尋時間的網絡搜尋算法ENAS。在NAS中首先由控制器采樣出一個網絡結構,之後将其訓練到收斂,之後将該采樣網絡的性能作為控制器的reward(但是這裡花了大力氣訓練出來的權重就會被丢棄,下一個網絡結構又會從頭開始進行訓練),進而訓練和引導控制器使其下一個産生的網絡更好。這篇文章在網絡參數上進行共享,每次從這個整體的網絡搜尋空間采樣出來樣本(一個子網絡它們的參數是共享的)不需要訓練到收斂,進而極大減少網絡搜尋的時間,使得其可以在1080Ti顯示卡上隻要花費不到16小時就可以完成搜尋。其在CIFAR-10資料集上獲得了2.89%的錯誤率(相比NAS的2.65%),在時間大幅減少的同時效果已經相當接近了。

搜尋空間的設計:

在這篇文章中為了實作搜尋空間中的參數共享設計了一個超網絡,其中的節點代表一個局部計算單元(其中含有需要訓練的參數,若是被控制器采樣到之後就可以用裡面存儲的參數資訊,進而實作參數共享),其中的邊代表了資料資訊的流動方向,建構出來的圖見下圖所示:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

搜尋控制器的設計:

對于ENAS算法中的控制器部分,采用的是多個節點的RNN網絡構成,它們的主要完整如下的兩個任務:

  • 1)控制那條邊需要被激活,也就是選擇目前節點的前序節點;
  • 2)選中目前節點的操作類型,如卷積等;

每個節點中是有獨立的參數的,它們在整個訓練過程中重複使用(也是一種參數共享),下圖展示的就是有4個節點構成的控制器結構(右圖):

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

途中左邊和中間的兩個圖分别是代表選擇出來的子網絡結構。

2. 方法設計

2.1 ENAS的訓練與最後網絡的生成

文章設計的整個方法涉及到兩個分布參數的訓練:

  • 1)控制器RNN網絡的參數 θ \theta θ;
  • 2)由控制器采樣出來的子網絡參數 w w w;

從ENAS的算法流程可以知道這兩個參數是交替進行訓練的,首先完成對子網絡參數 w w w的初始化訓練,再訓練RNN控制器網絡部分,之後這兩個網絡交替進行訓練,直到收斂。

子網絡參數 w w w的訓練:

在訓練子網絡參數的時候首先會固定控制器的參數,從中采樣出來一個子網絡 m i = π ( m ; θ ) m_i=\pi(m;\theta) mi​=π(m;θ),之後對于他的訓練就是标準的CNN網絡訓練過程了。那麼這部分的下降梯度可以描述為:

∇ w E m ∼ π ( m ; θ ) [ L ( m ; w ) ] ≈ 1 m ∑ i = 1 M δ w L ( m i , w ) \nabla_wE_{m\sim\pi(m;\theta)}[L(m;w)]\approx\frac{1}{m}\sum_{i=1}^M\delta_wL(m_i,w) ∇w​Em∼π(m;θ)​[L(m;w)]≈m1​i=1∑M​δw​L(mi​,w)

其中, M M M表示的一次性采樣的子網絡的個數,盡管在采樣個數固定的時候這樣的采樣方式會帶來較大的方差,但是文章指出其在 M = 1 M=1 M=1的情況下也能很好工作。

控制器網絡參數 θ \theta θ訓練:

訓練控制器那麼對應的就需要固定子網絡的參數 w w w了,這裡由于是以離散的方式進行采樣,對于控制器參數更新梯度的來源是使用policy gradient的方式進行的。這裡将子網絡在val資料集上的性能作為回報 R ( m ; w ) R(m;w) R(m;w),進而去最大化這個回報:

E m ∼ π ( m ; θ ) [ R ( m ; w ) ] E_{m\sim\pi(m;\theta)}[R(m;w)] Em∼π(m;θ)​[R(m;w)]

Policy Gradient講解:【CS285第5講】Policy gradient

除了上文提到的監督優化之外,文章還引入了對skip connection的限制,在代碼裡面是使用的KL散度,其先驗是0.4。引入它是為了防止網絡生成過多的skip connection,進而使得網絡抽取的特征越來越淺,表達能力和泛化能力降低。

最後生成網絡的選擇:

最後需要生成最後的子網絡,一般是采取一次性通過 π ( m ; θ ) \pi(m;\theta) π(m;θ)采樣得到幾個子網絡,将其在val資料集上進行性能比較,在其中選擇性能最好的一個,将其從scratch進行訓練。

2.2 搜尋空間的設計

傳統網絡層建構:

這裡在進行搜尋的時候是固定需要搜尋的網絡層數 L = 12 L=12 L=12,之後在這基礎上建構控制器,控制器完成的功能與上文中提到的類似,隻不過所選用的操作不同,這裡采用的操作空間為:卷積核大小為 3 ∗ 3 , 5 ∗ 5 3*3,5*5 3∗3,5∗5的正常卷積和可分離卷積,池化核大小為 3 ∗ 3 3*3 3∗3的均值和最大值池化操作。其實這裡雖然全排列起來包含的變化很多,但是還是很多超參數是固定的,也是存在一定的局限。對于這部分其搜尋的流程見下圖所示:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

基于網絡cell進行建構:

像上面逐層進行網絡搜尋效率較低,一個自然的思想就是将一些網絡操作組合成一個小子產品,通過小子產品的堆疊實作整體網絡的建構,如下圖所示:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

對于這樣的搜尋情況文章對控制器部分進行了改進:

  • 1)從前序的節點中選擇兩個作為輸入;
  • 2)為這兩個輸入選擇合适的操作類型,不同大小的卷積核以及卷積類型等;

下圖展示了這種搜尋方式的流程示意圖:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

3. 實驗結果

CIFAR-10資料集:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果

搜尋結果的可視化展示:

《ENAS:Efficient Neural Architecture Search via Parameter Sharing》論文筆記1. 概述2. 方法設計3. 實驗結果