論文筆記:DARTS: Differentiable Architecture Search


DARTS: Differentiable Architecture Search
2019-03-19 10:04:26
accepted by ICLR 2019

Paperhttps://arxiv.org/pdf/1806.09055.pdf 

Codehttps://github.com/quark0/darts 

 

1. Motivation and Background: 

前人的網絡搜索方法,要么是基於 RL 的,要么是基於進化算法的,都是非常耗時的,最近的幾個算法表示他們的計算時間可能需要:1800 GPU days 以及 3150 GPU days。雖然現在也有人對其進行加速處理(Speed Up),例如:

imposing a particular structure of the search space (Liu et al., 2017b,a),

weights or performance prediction for each individual architecture (Brock et al., 2017; Baker et al., 2018)

weight sharing across multiple architectures (Pham et al., 2018b; Cai et al., 2018),  

但是  scalability 根本性的挑戰並沒有得到很好的解決。而導致這種低效率的原因在於:他們將結構搜索這個任務當做是一個 離散領域的黑盒優化問題(Block-box optimization problem over a discrete domain),從而導致需要評價大量的結構。

 

在本文中,作者從不同的角度來解決這個問題,並且提出一種稱為 DARTS(Differentiable ARchiTecture Search) 的方法來進行有效的結構搜索。並非在候選結構的離散集合中進行搜索,而是將搜索空間松弛到連續的領域,從而可以通過梯度下降的方式,用驗證集效果的高低,來進行優化。基於梯度優化的數據效率,與低效率的 block-box 搜索方式相比較,可以得到更加相當的精度,並且可以少用相當多的計算資源。同時,也比現有的改進方法要好,ENAS。可以同時進行卷積和循環結構的搜索。

 

在連續領域中利用結構搜索並不是很新,但是仍然有幾個重大的區別:

首先,前人的工作嘗試微調特定方面的結構,如 filter shapes 或者 分支模式,而 DARTS 可以發現復雜的圖拓撲,實現高性能的結構;

其次,並不受限於特定結構,可以同時發掘 卷積 和 循環網絡。

 

2. Differentiable Architecture Search:  

2.1 Search Space:

跟隨前人的工作,我們搜索一個計算單元(computation cell)作為最終結構的構建模塊(building block)。該學習的單元可以堆疊成 convolutional network 或者 循環鏈接得到一個 recurrent network。

一個 cell 是一個 directed acyclic graph,是一個由 N 個 nodes 組成的有序的序列。每一個節點 $x^{(i)}$ 是一個隱藏表達(即,feature map),有向邊 (i, j) 是用一些操作 $o^{(i, j)}$ 用於轉換 $x^{(i)}$。我們假設該 cell 是由兩個輸入節點,以及單個輸出節點。對於 convolutional cells,輸入節點是由前兩層的 cell 輸出定義得到的。對於 recurrent layer,這些被定義為當前時刻的輸入,以及從前一個時刻的狀態(states)。cell 的輸出是通過對所有的即刻節點(intermediate nodes) concatenation 得到的。

每一個即刻節點都是通過如下的方式進行計算的:

一個特殊的 zero operation 也被引入,來表示兩個節點之間不存在鏈接。所以,cell 的學習被簡化為:learning the operations on its edges。 

 

2.2 Continuous Relaxation and Optimization

假設 O 表示候選操作的集合(即,convolution, max pooling, zero),其中,每一個操作符代表一些函數 o(*) 作用於 $x^{(i)}$。為了使得搜索空間變的連續,我們將特定操作的種類選擇松弛為:所有可能操作的 softmax 函數:

其中,一對節點(i, j)的操作混合權重,是由向量 $\alpha^{(i, j)}$ 進行參數化表示的。在松弛之后,該結構搜索任務就變成了:學習一組連續變量 $\alpha = {\alpha^{(i, j)}}$,如圖 1 所示。在搜索結束之后,我們通過將最像的操作來替換掉每個混合操作符,就獲得了一個離散的結構,即:

在接下來,我們將 $\alpha$ 表示為結構的編碼。

 

在松弛之后,我們的目標是:聯合的學習結構化參數 $\alpha$ 和 權重 $w$ 。與強化學習 或者 進化算法類似,我們將驗證集的性能看做是最終的獎勵或者擬合程度,DARTS 的目標就是優化該驗證集損失,但是用的是 gradient descent。

 

我們用 $L_{train}$ and $L_{val}$ 表示 訓練和驗證集的損失。這兩個損失不但由結構 $\alpha$ ,也與網絡的權重 $w$ 相關。結構化搜索的目標是:找到一個最優的參數 $\alpha*$ 使其可以最小化驗證集的損失函數 $L_{val} (w*, \alpha*)$,並且與結構相關的模型權重 $w*$ 也緊跟着通過最小化 訓練集損失而得到,即:$w* = arg min_w L_{train} (w, \alpha^*)$。

 

這是一個 bilevel optimization problem,其中 $\alpha$ 是 upper-level variable,$w$ 是 lower-level variable:

這個嵌套的表達也在 gradient-based hyperparameter optimization 中被提出,雖然其維度較高,且更難被優化。

 

2.3 Approximation

求解上述雙向優化問題,計算量是非常大的,因為一旦上層的 $\alpha$ 變掉了,那么,里面模型的權重 $w*(\alpha)$ 就必須重新計算。我們所以提出一種近似的迭代優化策略:將 w 和 $\alpha$ 用梯度下降步驟來相互優化,如算法 1 所示。

在 step k,給定當前的結構 $\alpha_{k-1}$,我們通過朝向降低訓練損失的方向去移動 $w_{k-1}$ 來得到 $w_k$。然后,保持權重 $w_k$ 不變,去更新網絡結構,使其可以最小化驗證集損失(在執行一次梯度下降之后):

其中, 是該虛擬梯度步驟的學習率。公式 5 的動機是:we would like to find an architecture which has a low validation loss when its weights are optimized by (a single step of) gradient descent, where the one-step unrolled weights serve as the surrogate for w(α)

一個相關的方法也被用於 meta-learning 來進行模型遷移。需要注意的是,作者所提出的這種動態迭代算法,定義了一種 $\alpha$'s optimizer (leader) 和 $w$'s optimizer (follower) 之間的 Stackelberg game ,為了達到平衡,這通常要求 the leader 參與到 follower 的下一步移動。我們當前沒有注意到收斂性保證,實際上,適當的調整學習率,是可以確保收斂的。我們也注意到:對於權重優化,當動量可以確保時,one-step forward learning objective(5)也被隨之而改變,所以我們的分析,都是適用的。

 

通過微分公式 5,我們可以得到結構梯度,即 $\alpha$:

其中,代表一個 one-step forward model 的權重。公式 6 的第二項包含了一個 matrix-vector product,其計算代價昂貴。幸好,finite difference approximation 可以用於降低其復雜性。用  表示一個小的 scalar,那么我們有:

然后,我們可以得到:

評估該 finite difference 僅需要兩次前向傳播即可得到 weights,兩次反向傳播,就可以得到 $\alpha$,運算復雜度大大的降低了:

 

First-order Approximation

當學習率  為 0,公式 6 中的二階衍生物就消失了。在這種情況下,結構梯度就是: 

 

2.4 Deriving Discrete Architectures

在得到連續結構編碼 $\alpha$ 之后,離散的結構可以通過如下的結構得到:

1). Retaining k strongest predecessors for each intermediate node, where the strength of an edge is defined as: 

2). Replacing every mixed operation as the most likely operation by taking the argmax. 

 

 

3. Experiments and Results: 

作者在 CIFAR-10 和 PTB 上面做了實驗,分為兩個階段:architecture search 和 architecture evaluation。

在第一個階段,作者搜索 the cell architectures,然后根據其 驗證集的性能,確定最優的 cell。 

在第二個階段,我們利用這些 cell 來構建大型的結構,然后 train from scratch,並且在測試集上查看最終性能。

最終,作者探索了 the best cells 的遷移能力,並且在 ImageNet 和 WikiText-2 (WT2)數據集上進行了性能測試。

 

划重點:

效果對比:

 

 

== 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM