DARTS
Related Work
傳統的NAS的方法:
1.基於強化學習的NAS
2.基於進化學習的NAS
現存優化傳統NAS的方法:
1.搜索空間的特殊結構
2.單個結構的權重或者性能的預測
3.多個結構之間的權值共享
可以應用於NAS上的傳統優化方法
1.強化學習
2.進化學習
3.MCTS
4.SMBO
5.Bayesian Optimization
以上方法並不能Work的原因在於:NAS是一種基於離散空間上的黑盒優化過程,因此在過多的結構搜索中,存在着過多的結構性能評估的過程
Motivation
Tips 1: Search Space
很多現存的NAS的搜索空間是離散的,因此本文將搜索空間弱化爲一個連續的空間結構,以此可以使用梯度夏下降進行性能優化,DARTS能夠在豐富的搜索空間中搜索到一種具有複雜圖形拓撲結構的高性能框架
- Search Space 的連續性並不是首創的方法,但是Darts與傳統的方法不同的是,傳統的方法是在一個連續搜索空間中,搜索一種特殊的結構(Filters Shape、Branch Pattern),而DARTS是搜索一種完整的網絡結構
Method
Search Space
目標:搜索一種Convolutional Cell(有向無環圖,其中包含個節點-Feature Map,有向邊是一種對Feature Map進行轉換的的相互關聯的操作)作爲網絡最終結構的Building Block,得到的Cell既可以通過Stack成Classification network,也可以循環連接形成Recurrent Network
細節:
-
Class Cell: Cell的輸入對應其上一層的輸出
-
Recurrent Cell: 當前的輸入State是前一步運算過後的State
-
Cell 的總輸出:在所有網絡結構內部的Nodes進行Reduction Operation(e.g. Concatenation)
-
爲了表示某些節點之間是沒有任何聯繫的,因此此處引入了****
Continuous Relaxation Scheme
目的:能夠在Architecture和Weight兩者的聯合優化問題上能夠學到一個可微的目標
具體實現:爲了能夠使得搜索空間連續,我們將特殊操作的類別選擇簡化成對於所有可能的Operations的Softmax
-
[說明]
-
成對Nodes之間混合權重的操作被向量進行參數化,此時的結構化搜索被簡化成學習一系列連續的變量的過程
-
在搜索過程的最後,通過利用最大可能替換的方式,得到最終的網絡結構
-
同樣利用了Reward機制,DARTS將Validation Performance 當作自己的Reward
-
方法目標——Bilevel Optimization:
-
: [Upper-Level] 找到一個合適的來最小化
-
:[Lower-Level] 找到合適的權重來最小化訓練Loss,
KaTeX parse error: Expected group after '_' at position 98: …\mathop{argmin}_̲\limits{w}\quad…
Approximation
**具體內容:**使得能夠在各自的搜索空間中,分別利用梯度下降法進行交錯優化
的優化問題:
-
一階近似:,此時,基於結構的二階導消失,也即:與之間相互獨立,實驗證明,其效果比較差
-
二階近似:,與一階近似相反,其效果比較好
作者通過特例的收斂效果圖來解釋了一下學習率對於網絡收斂性的影響,如下圖所示
Tips:在(5)式中,後面一項是利用了矩陣乘法運算,因此本文利用了有限差分方法進行計算上的近似運算
Deriving Discrete Architectures
Step 1:爲每一箇中間節點保留個強有力的先驅,統計計算邊上的可選的操作,Convolutional Cell中,Recurrent Cell中
**Step 2:**通過的操作選擇最有效的邊上的Optimation
a:初始化Nodes,其中,兩點之間的操作是不可知的
b:通過在每個邊上混合操作生成一個連續的可選的操作空間
c:通過解決Bilevel的優化問題,聯合優化混合操作概率和權重
d:從混合操作概率中得到最終的網絡結構
搜索空間預定義:
Optimations:
[Normal]
separable convolutions | dilated convolutions | max pooling | average pooling | Identity | Zero |
---|---|---|---|---|---|
、 | 、 |
- 以上所有操作的Stride均設置爲1,同時還帶有Padding操作
- 使用了爲順序的卷積操作,每一個Separable Convolution均利用兩次這樣的順序結構
Cell:
- 每個Cell包含7個Nodes
- Nodes的輸出定義爲所有中間Nodes(除輸入)的結果的Depthwise Concatenate
- 第個Cell的第一個輸入對應於第個Cell的輸出,第個Cell的第二個輸入對應於第個Cell的輸出
- Network是將得到的Cell進行Stack組成
[Reduce]
在網絡總深度的和處Reduction Cell(e.g. Concatenat),同時在Reduce Cell中,除了引入上面所有的操作以外,還使用了卷積,Cell中所有的靠近輸入節點的操作的Stride均設爲2