自動化機器學習(AutoML)最近變得越來越火,是機器學習下個發展方向之一。其中的神經網絡結構搜索(NAS)是其中重要的技術之一。人工設計網絡需要豐富的經驗和專業知識,神經網絡有衆多的超參數,導致其搜索空間巨大。NAS即是在此巨大的搜索空間裏自動地找到最優的網絡結構,實現深度學習的自動化。自2017年穀歌與MIT各自在ICLR上各自發表基於強化學習的NAS以來,已產出200多篇論文,僅2019年上半年就有100多篇論文。此係列文章將解讀AutoDL領域的經典論文與方法,筆者也是剛接觸這個領域,有理解錯誤的地方還請批評指正!
此係列的文章:
本次介紹的兩篇論文是谷歌的《Efficient Neural Architecture Search via Parameter Sharing》和自動化所、圖森的《You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization》。一般自動生成的網絡模型龐大而冗餘,且搜索過程耗時耗力,這次的論文是用權值共享的辦法來加速模型搜索。
一、Efficient Neural Architecture Search via Parameter Sharing
1、總覽
這篇論文也是基於NAS的框架,對其進行了改進,稱之爲ENAS。NAS搜索到的圖是一個更大的圖的子圖,也就是說NAS的搜索空間可以用一個有向無環圖(DAG)來表示。下圖給出了一個例子:
上面的圖是整個搜索空間,紅色的線連起來的子圖是控制器發現的模型。ENAS的DAG是NAS搜索空間裏所有可能子模型的疊加,圖中的結點表示具體的計算操作,邊表示信息流動。每個節點都有其自己的參數,這些參數在所有的子模型中都可以共享。其實ENAS要學習的就是節點之間的連線關係,通過不同的連線產生大量的模型。
2、生成RNN的cell
爲了生成RNN的cell,作者使用一個有N個節點的DAG。ENAS的控制器是個RNN,它決定兩個方面:(1)哪個邊被激活;(2)DAG中的結點選擇哪種操作。原NAS論文裏的RNN生成,cell的結構被固定爲二叉樹結構,只決定樹上每個節點的操作。而這裏ENAS即設計節點操作也設計cell的結構。以下圖爲例說明控制器生成cell的過程:
假設有N=4個節點,是cell的輸入,是前一個時間步的輸出。採樣過程如下:
- 在節點1:控制器採樣一個激活函數。圖中例子選擇了tanh,那麼節點1的計算爲
- 在節點2:控制器採樣之前節點的編號和激活函數。例子中選擇了編號1和ReLU,則節點2的計算爲
- 在節點3:控制器再次採樣之前節點的編號和激活函數。例子中選擇了編號2和ReLU,則節點3的計算爲:
- 在節點4:控制器再次採樣之前節點的編號和激活函數。例子中選擇了編號1和tanh,則節點3的計算爲:
- 對於輸出,將那麼沒有被選做其他任何節點輸入的結點取平均。例子中,節點3和節點4沒有被選爲其他節點的輸入,那麼
在上面的例子中可以看出,對於每個節點對都有獨立的參數矩陣,通過選擇前面節點的標號,控制器也選擇了使用哪個參數矩陣,因此搜索空間裏所有的cell都共享同樣的參數集合。如果一個cell有N個節點,選擇4種激活函數(tahn,ReLU,identity,sigmoid),那麼搜索空間有種配置。
3、訓練ENAS、導出網絡結構
這裏控制器LSTM有100個節點,通過softmax分類器進行採樣。在ENAS中,有兩類需要學習的參數:控制器LSTM的參數和子模型共享的參數。訓練過程也包括兩個階段,第一個階段用整個數據集訓練,第二個階段是訓練,兩個階段輪流訓練,具體細節如下:
-
訓練。這步中,控制器的策略被固定,用SGD去最小化交叉熵損失函數,是從中採樣得到的一個模型。梯度使用蒙特卡洛估計:
上式是對梯度的無偏估計,有較大的方差。但作者發現當的時候效果就比較好,也就是說使用從採樣到的任意一個模型上計算到的梯度就可以更新。 -
訓練參數。在這步中固定來更新,以最大化期望獎勵。獎勵是在驗證集上計算得到的。
-
導出網絡結構。首先從訓練的策略採樣幾個模型,對於每個採樣的模型,直接在驗證集上計算獎勵,然後選擇獎勵最高的模型從頭訓練。實際上這個過程會進行很多次,共享的權重也會在一段時間後更新。
4、設計卷積網絡
在生成CNN時,控制器作出兩個方面的決定:(1)連接前面的那個些節點;(2)使用哪種操作。這兩個決策構造了一個卷積層。選擇連接到前面的那些節點可以用來產生跨連接,在第層,前面最多有個可選的結點,這會有種可能的決策。舉例如下圖:
上圖中,在第層,控制器選擇了前面的第1、3個節點,所以第1、3層的輸出在深度這個軸連接起來送到第4層。
對於可選的操作,一共有6種:3x3大小卷積、5x5大小卷積、3x3大小的可分離卷積、5x5大小可分離卷積、3x3的最大池化、3x3的平均池化。做這樣的決策一共L次,可以得到一個L層的網絡,在搜索空間裏一共有種網絡。
5、設計卷積cell
上述的搜索是從頭搜索整個網絡,也稱作macro搜索。也可以只搜索卷積cell,然後將它們連接起來組成整個網絡,這稱爲micro搜索。在每個cell裏有B個節點,節點1和節點2作爲cell的輸入,是前兩個cell的輸出。對於剩下的B-2個節點,使用控制器取做兩個決策:(1)選擇兩個前驅節點作爲當前節點的輸入;(2)選擇兩個操作作用在這兩個前驅節點上。上述操作之後,將兩個節點相加。可能的操作有5種:identity,3x3和5x5的可分離卷積,3x3的最大池化和平均池化。以B=4舉例,如下圖所示:
- 對於節點1、2,其作爲輸入,控制器不對此作決策。用和表示。
- 在節點3,控制器選擇兩個前驅節點和兩種操作。這裏選擇了節點2和節點2,選擇的操作爲5x5可分離卷積和identity,所以
- 在節點4,控制器選擇了節點3和節點1,選擇的操作爲3x3可分離卷積和3x3可分離卷積,所說
- 最終除了其他節點都作爲了其他節點的輸入,所以作爲cell的輸出
從此搜索空間中還可以生成reduction cell,只需:(1)採樣一個卷積cell;(2)應用步長爲2的操作。卷積cell和reduction cell同時採樣,則控制器RNN一共作種決策。在節點,控制器從前個節點任意選擇2個節點,從5種操作中任意選擇2個,所以總共有種可能的cell,算上reduction cell,一共有種可能的cell。
二、You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization
1、總覽
在這篇論文裏,作者將NAS重新表述爲從一個大型網絡中剔除無用的連接,因此只需一個模型被訓練。由於模型在訓練階段就直接被優化了,作者稱之爲直接稀疏優化NAS(Direct Sparse Optimization NAS, DSO-NAS)。作者進一步論證了這個稀疏正則化可以被改進的加速近端梯度(proximal gradient)方法優化,不需要任何的控制器、性能預測或者搜索空間鬆弛(搜索空間鬆弛是可微分方法的內容)。DSO-NAS也第一次論證了NAS可以直接在大型數據集上使用而沒有塊結構的共享。
2、Motivation
DSO-NAS通用是根據神經網絡的結構空間可以用有向無環圖DAG表示,在此空間的任何結構都是其子圖。也就是說一個特定的結構可以從整個圖中選擇節點和邊來得到。這裏作者用完整的圖來表示單個block的搜索空間,整個網絡是由這些block用跨連接堆疊起來。
對於一個有T個節點的DAG,第個節點的輸出可以通過變換所有前驅節點輸出的和來得到:
下圖展示了DAG裏的一個特定的block,節點表示操作,邊表示信息流動。
上圖中節點1和節點6是輸入節點和輸出節點,虛線表示沒被連接起來的結點。那麼節點5的輸出是,也就是
然後結構搜索問題可以看作邊裁剪問題。在搜索過程中,我們移除沒有用的邊和節點,留下最重要的結構。這裏作者對每個節點的輸出都乘上一個乘子,上式變成:
是作用在從節點到節點的乘子,然後對這些乘子使用稀疏正則化,使其在搜索過程中有些爲0。如果爲0,則相關的邊和節點就被移除了。
3、搜索空間
DSO-NAS可以搜索block然後堆疊起來(micro-search),也可以搜索不帶block的整個網絡(macro-search)。
對於要搜索的block,設定裏面有M個層級,每個層級包含N個不同的操作(也就是節點)。每個操作將其所有前層級的節點和block的輸入連接起來,block的輸出就是將block裏的所有節點連接起來。對於每個連接,都乘上一個乘子。對其使用稀疏正則化,優化之後移除爲0的連接和節點,得到最終的block結構。整個過程如下圖所示:
圖(a)是完整的DAG,圖(b)是優化每個邊的乘子,圖(c)是移除了沒有用的邊和節點後最終的block。
第個block裏第層級的第個節點可以用如下公式表示:
這裏和分別是第個block的輸入節點和輸出節點。第個層級有個輸入。第個block的輸出是對所有連接到輸出的結點應用reduction操作(1x1的卷積)得到的:
整個由block堆疊的完整網絡如下圖所示:
整個網絡有個stage,每個stage有個卷積block。除了最後一個stage,每個stage的最後都有一個reduction block。這裏作者嘗試了兩種搜索空間:(1)在所有block中都共享的搜索空間;(2)每個block中都不同的搜索空間。
卷積操作遵循Conv-Bn-ReLU的順序,使用下面幾種操作:
- 3x3的可分離卷積
- 5x5的可分離卷積
- 3x3的平均池化
- 3x3的最大池化
對於reduction block,使用1x1和3x3大小的卷積核,步長爲2。
搜索block的任務因此可以簡化爲學習每個邊的,可以用下式表示:
和是輸入數據和標籤,表示訓練樣本的數目,表示網絡的權重,和表示正則化權重。可以設
4、優化、訓練
正則化參數優化起來非常困難,尤其在有隨機性的深度神經網絡裏,雖然啓發式的閾值方法可行,但優化是不穩定的。不過使用稀疏結構選擇(Sparse Structure Selection,SSS)可以解決這個問題,SSS通過修改理論上合理的優化方法加速近端梯度(Accelerated proximal Gradient,APG)方法,重寫公式避免在計算梯度時重複地前向和反向計算:
是迭代地輪數,表示軟閾值操作,表示梯度步長,是動量大小。這種方法稱之爲APG-NAG。和使用NAG(Nesterov Accelerated Gradient )和APG-NAG同時被更新。然而APG-NAG不能直接用在這裏,裁剪的搜索空間是有限的,會導致一定程度的過擬合。這裏作者將訓練數據分成兩部分,一部分用來更新,另一部分用來更新。
整個方法包括三個階段:
- 訓練DAG全部連接的網絡,得到好的權重初始化
- 從預訓練的模型中搜索結構
- 從頭訓練最終的網絡
在前兩個階段,BN層的參數被固定爲1,爲了避免影響的學習。在第二步之後,作者通過一個全局寬度乘法器來調整每個操作中的濾波器數量,以滿足計算預算。
參考文獻
[1] Pham H, Guan M Y, Zoph B, et al. Efficient Neural Architecture Search via Parameter Sharing[J]. 2018.
[2] Zhang X , Huang Z , Wang N . You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization[J]. 2018.
[3] 你想要的神經網絡自動設計,谷歌大腦幫你實現了:用參數共享高效地搜索神經網絡架構(ENAS)
[4] https://blog.csdn.net/weixin_34319817/article/details/89581856
[5] Huang Z , Wang N . Data-Driven Sparse Structure Selection for Deep Neural Networks[J]. 2017.
[6] 《深入理解AutoML和AutoDL》