CARS: 華為提出基於進化演算法和權值共享的神經網路結構搜索,CIFAR-10上僅需單卡半天 | CVPR 2020
- 2020 年 4 月 15 日
- 筆記
為了優化進化演算法在神經網路結構搜索時候選網路訓練過長的問題,參考ENAS和NSGA-III,論文提出連續進化結構搜索方法(continuous evolution architecture search, CARS),最大化利用學習到的知識,如上一輪進化的結構和參數。首先構造用於參數共享的超網,從超網中產生子網,然後使用None-dominated排序策略來選擇不同大小的優秀網路,整體耗時僅需要0.5 GPU day
來源:曉飛的演算法工程筆記 公眾號
論文: CARS: Continuous Evolution for Efficient Neural Architecture Search
Introduction
目前神經網路結構搜索的網路性能已經超越了人類設計的網路,搜索方法大致可以分為強化學習、進化演算法以及梯度三種,有研究表明進化演算法能比強化學習搜索到更好的模型,但其搜索耗時較多,主要在於對個體的訓練驗證環節費事。可以借鑒ENSA的權重共享策略進行驗證加速,但如果直接應用於進化演算法,超網會受到較差的搜索結構的影響,因此需要修改目前神經網路搜索演算法中用到的進化演算法。為了最大化上一次進化過程學習到的知識的價值,論文提出了連續進化結構搜索方法(continuous evolution architecture search, CARS)
首先初始化一個有大量cells和blocks的超網(supernet),超網通過幾個基準操作(交叉、變異等)產生進化演算法中的個體(子網),使用Non-dominated 排序策略來選取幾個不同大小和準確率的優秀模型,然後訓練子網並更新子網對應的超網中的cells,在下一輪的進化過程會繼續基於更新後的超網以及non-dominated排序的解集進行。另外,論文提出一個保護機制來避免小模型陷阱問題
Approach
論文使用基因演算法(GA)來進行結構進化,GA能提供很大的搜索空間,對於結構集$C={C_1,…,C_N}$,$N$為種群大小。在結構優化階段,種群內的結構根據論文提出的pNSGA-III方法逐步更新。為了加速,使用一個超網$\mathcal{N}$用來為不同的結構共享權重$W$,能夠極大地降低個體訓練的計算量
Supernet of CARS
從超網$\mathcal{N}$中取樣不同的網路,每個網路$\mathcal{N}_i$可以表示為浮點參數集合$W_i$以及二值連接參數集合$C_i$,其中0值表示網路不包含此連接,1值則表示使用該連接,即每個網路$\mathcal{N}_i$可表示為$(W_i, C_i)$對
完整的浮點參數集合$W$是在網路集合中共享,如果這些網路結構是固定的,最優的$W$可通過標準反向傳播進行優化,優化的參數$W$適用於所有網路$\mathcal{N}_i$以提高識別性能。在參數收斂後,通過基因演算法優化二值連接$C$,參數優化階段和結構優化階段是CARS的主要核心
Parameter Optimization
參數$W$為網路中的所有參數,參數$W_i=W\odot C_i, i\in {1,…,N}$,$\odot$為mask操作,只保留$C_i=1$對應位置的參數。對於輸入$X$,網路的結果為$P_i=\mathcal{N}_i(X,W_i)$,$\mathcal{N}_i$為$i$-th個網路,$W_i$為其參數
給定GT $Y$,預測的損失為$L_i$,則$W_i$的梯度計算如公式1
由於參數$W$應該適用於所有個體,因此使用所有個體的梯度來計算$W$的梯度,計算如公式2,最終配合SGD進行更新
由於已經得到大量帶超網共享參數的結構,每次都集合所有網路梯度進行更新會相當耗時,可以借鑒SGD的思想進行min-batch更新。使用$N_b < N$個不同的網路進行參數更新,編號為${n_1,…,n_b}$。計算如公式3,使用小批量網路來接近所有網路的梯度,能夠極大地減少優化時間,做到效果和性能間的平衡
Architecture Optimization
對於結構的優化過程,使用NSGA-III演算法的non-dominated排序策略進行。標記${\mathcal{N}_1,…,\mathcal{N}_N}$為$N$個不同的網路,${\mathcal{F}_1,…,\mathcal{F}_M}$為希望優化的$M$個指標,一般這些指標都是有衝突的,例如參數量、浮點運算量、推理時延和準確率,導致同時優化這些指標會比較難
首先定義支配(dominate)的概念,假設網路$\mathcal{N}_i$的準確率大於等於網路$\mathcal{N}_j$,並且有一個其它指標優於網路$\mathcal{N}_j$,則稱網路$\mathcal{N}_i$支配網路$\mathcal{N}_j$,在進化過程網路$\mathcal{N}_j$可被網路$\mathcal{N}_i$代替。利用這個方法,可以在種群中挑選到一系列優秀的結構,然後使用這些網路來優化超網對應部分的參數
儘管non-dominated排序能幫助選擇的更好網路,但搜索過程仍可能會存在小模型陷阱現象。由於超網的參數仍在訓練,所以當前輪次的模型不一定為其最優表現,如果存在一些參數少的小模型但有比較高的準確率,則會統治了整個搜索過程。因此,論文基於NSGA-III提出pNSGA-III,加入準確率提升速度作為考慮
假設優化目標為模型參數和準確率,對於NSGA-III,會根據兩個不同的指標進行non-dominated排序,然後根據帕累托圖進行選擇。而對於pNSGA-III,額外添加考慮準確率的增長速度的non-dominated排序,最後結合兩種排序進行選擇。這樣,準確率增長較慢的大模型也能得到保留。如圖2所示,pNSGA-III很明顯保留的模型大小更廣,且準確率與NSGA-III相當
Continuous Evolution for CARS
CARS演算法的優化包含兩個步驟,分別是網路結構優化和參數優化,另外,在初期也會使用參數warmup
- Parameter Warmup,由於超網的共享權重是隨機初始化的,如果結構集合也是隨機初始化,那麼出現最多的block的訓練次數會多於其它block。因此,使用均分抽樣策略來初始化超網的參數,公平地覆蓋所有可能的網路,每條路徑都有平等地出現概率,每種層操作也是平等概率,在最初幾輪使用這種策略來初始化超網的權重
- Architecture Optimization,在完成超網初始化後,隨機取樣$N$個不同的結構作為父代,$N$為超參數,後面pNSGA-III的篩選也使用。在進化過程中生成$t\times N$個子代,$t$是用於控制子代數的超參,最後使用pNSGA-III從$(t+1)\times N$中選取$N$個網路用於參數更新
- Parameter Optimization,給予網路結構合集,使用公式3進行小批量梯度更新
Search Time Analysis
CARS搜索時,將數據集分為數據集和驗證集,假設單個網路的訓練耗時為$T_{tr}$,驗證耗時$T_{val}$,warmup共$E_{warm}$周期,共需要$T_{warm}=E_{warm}\times T_{tr}$時間來初始化超網$\mathcal{N}$的參數。假設進化共$E_{evo}$輪,每輪參數優化階段對超網訓練$I_{param}$周期,所以每輪進化的參數優化耗時$T_{param}=I_{param}\times T_{tr}\times N_b$,$N_b$為mini-batch大小。結構優化階段,所有個體是並行的,所以搜索耗時為$T_{arch}=T_{val}$。CARS的總耗時如公式5
Experiments
Experimental Settings
-
supernet Backbones
超網主幹基於DARTS的設置,DARTS搜索空間包含8個不同的操作,包含4種卷積、2種池化、skip連接和無連接,搜索normal cell和reduction cell,分別用於特徵提取以及下取樣,搜索結束後,根據預設將cell堆疊起來
-
Evolution Details
在DARTS中,每個中間節點與之前的兩個節點連接,因此每個節點有其獨立的搜索空間,而交叉和變異在搜索空間相對應的節點中進行,佔總數的比例均為0.25,其餘0.5為隨機生成的新結構。對於交叉操作,每個節點有0.5的概率交叉其連接,而對於變異,每個節點有0.5的概率隨機賦予新操作
Experiments on CIFAR-10
-
Small Model Trap
圖3訓練了3個不同大小的模型,在訓練600輪後,模型的準確率與其大小相關,從前50輪的曲線可以看出小模型陷阱的原因:
- 小模型準確率上升速度較快
- 小模型準確率的波動較大
在前50輪模型C一直處於下風,若使用NSGA演算法,模型C會直接去掉了,這是需要使用pNSGA-III的第一個原因。對於模型B和C,準確率增長類似,但由於訓練導致準確率波動,一旦模型A的準確率高於B,B就會被去掉,這是需要使用pNSGA-III的第二個原因
-
NSGA-III vs. pNSGA-III
如圖2所示,使用pNSGA-III能避免小模型陷阱,保留較大的有潛力的網路
-
Search on CIFAR-10
將CIFAR分為25000張訓練圖和25000張測試圖,共搜索500輪,參數warmup共50輪,之後初始化包含128個不同網路的種群,然後使用pNSGA-III逐漸進化,參數優化階段每輪進化訓練10周期,結構優化階段根據pNSGA-III使用測試集進行結構更新
-
Search Time analysis
對於考量模型大小和準確率的實驗,訓練時間$T_{tr}$為1分鐘,測試時間$T_{val}$為5秒,warmup階段共50輪,大約耗費1小時。而連續進化演算法共$E_{evo}$輪,對於每輪結構優化階段,並行測試時間為$T_{arch}=T_{val}$,對於每輪的參數優化階段,設定$N_b=1$,$T_{param}$大約為10分鐘,$T_{evo}$大約為9小時,所以$T_{total}$為0.4 GPU day,考慮結構優化同時要計算時延,最終時間大約為0.5 GPU day
-
Evaluate on CIFAR-10
在完成CARS演算法搜索後,保留128個不同的網路,進行更長時間的訓練,然後測試準確率
-
Comparison on Searched Block
CARS-H與DARTS參數相似,但準確率更高,CARS-H的reduction block包含更多的參數,而normal block包含更少的參數,大概由於EA有更大的搜索空間,而基因操作能更有效地跳出局部最優解,這是EA的優勢
Evaluate on ILSVRC2012
將在CIFAR-10上搜索到網路遷移到ILSVRC22012數據集,結果表明搜索到的結構具備遷移能力
CONCLUSION
為了優化進化演算法在神經網路結構搜索時候選網路訓練過長的問題,參考ENAS和NSGA-III,論文提出連續進化結構搜索方法(continuous evolution architecture search, CARS),最大化利用學習到的知識,如上一輪進化的結構和參數。首先構造用於參數共享的超網,從超網中產生子網,然後使用None-dominated排序策略來選擇不同大小的優秀網路,整體耗時僅需要0.5 GPU day
參考內容
- Pareto相關理論 (//blog.csdn.net/qq_34662278/article/details/91489077)
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】