S2DNAS:北大提出動態推理網路搜索,加速推理,可轉換任意網路 | ECCV 2020 Oral

S2DNAS最核心的點在於設計了豐富而簡潔的搜索空間,從而能夠使用常規的NAS方法即可進行動態推理網路的搜索,解決了動態推理網路的設計問題,可進行任意目標網路的轉換

來源:曉飛的演算法工程筆記 公眾號

論文: S2DNAS: Transforming Static CNN Model for Dynamic Inference via Neural Architecture Search

Introduction


  最近,動態推理作為提升網路推理速度的有效方法,得到了大量關注。相對於剪枝、量化等靜態操作,動態推理能夠根據樣本的難易程度選擇合適的計算圖,可以很好地平衡準確率和計算消耗,公眾號之前也發過一篇相關的Resolution Adaptive Networks for Efficient Inference,有興趣可以看看。為了實現動態推理,大多數的工作都需要專門的策略來動態地根據輸入樣本跳過某些計算操作。

  一種經典的方法上在常規卷積網路上添加中間預測層,如圖a所示,當中間預測結果的置信度大於閾值,則提前退出。但早期的分類器沒有利用深層的語義特徵(低解析度的高維特徵),可能會導致明顯的準確率下降。

  為了解決上述問題,MSDNet設計了二維(Layer-Scale)多階段架構來獲取各層的粗粒度特徵和細粒度特徵,如圖b所示,每個預測層都能利用深層的語義特徵,可達到較好的準確率。然而,MSDNet是精心設計的專用網路結構,若需要轉換其它目標網路,則需要重新設計類似的範式。

  為了解決上述問題且不需要重新設計網路結構,論文提議將目標網路轉換成channel-wise多階段網路,如圖c所示。該方法保持目標網路的結構,在channel層面將目標網路分成多個階段,僅在最後的卷積層添加預測器。為了降低計算量,每個階段的channel數都相對減少。基於圖c的思想,論文提出通用結構S2DNAS,能夠自動地將目標網路轉換成圖c架構的動態網路。

Overview of S2DNAS


  給定目標網路,S2DNAS的轉換流程如圖2所示,主要包含兩個模組:

  • S2D(static-todynamic),生成目標網路特定的搜索空間,由目標網路通過預設的轉換方法生成的多階段網路組成。
  • NAS,在生成的搜索空間中使用強化學習搜索最優的模型,設計了能夠反映準確率和資源消耗的回報函數。

The Details of S2D


  給定目標網路\mathbb{M},S2D生成包含由\mathbb{M}轉換的多個網路的搜索空間\mathcal{Z},如圖3所示,轉換過程包含split操作和concat操作:

  • split操作在channel層面上將目標網路分割成多階段子網,在每個階段最後添加分類器。
  • concat操作是為了增加階段間的特徵交互,強制當前階段的分類器復用前面階段的某些特徵。

Notation

  首先定義一些符號,X^{(k)}=\{ x^{(k)}_1, \cdots, x^{(k)}_C \}為第k層輸入,C為輸入維度,W^{k}=\{ w^{(k)}_1, \cdots, w^{(k)}_O \}O為輸出維度,w^{(k)}_i\in \mathbb{R}^{k_c\times k_c\times C},轉換操作的目標是將目標網路\mathbb{M}轉換成多階段網路a=\{ f_1,\cdots, f_s \}f_ii階段的分類器。

Split

  Split操作將輸入維度的子集賦予不同階段的分類器,假設階段數為s,直接的方法將輸入維度分成s個子集,然後將i個子集賦予i個分類器,但這樣會生成較大的搜索空間,阻礙後續的搜索效率。為了降低搜索空間的複雜度,論文先將輸入維度分成多組,然後將組分成s個子集賦予不同的分類器。
  具體地,將輸入維度分成G組,每組包含m=\frac{C}{G}維,以k層為例,分組為X^{(k)}=\{ x^{(k)}_1, \cdots, x^{(k)}_G \}X^{(k)}_i=\{ x^{(k)}_{(i-1)m+1}, \cdots, x^{(k)}_{im} \}。當分組完成後,使用分割點(p^{(k)}_0, p^{(k)}_1, \cdots, p^{(k)}_{s-1}, p^{(k)}_s)標記分組的分配,p^{(k)}_0=0p^{(k)}_s=G為兩個特殊點,將維度分組\{ X^{(k)}_{p^{(k)}_{i-1}+1}, \cdots, X^{(k)}_{p^{(k)}_{i}}\}分給i階段的分類器f_i

Concat

  Concat操作用於增加階段間的特徵交互,使得分類器能夠復用前面階段的特徵。指示矩陣\{ I^{(k)}\}^L_{k=1}用來表明不同位置的特徵是否復用,k為層數,L為網路的深度,成員m^{(k)}_{ij} \in I^{(k)}表明是否在j階段復用i階段的k層特徵。這裡有兩個限制,首先只能復用前面階段的特徵m^{(k)}_{ij}=0, j<i, \forall k < L,其次L層必須復用前面所有階段的特徵。

Architecture Search Space

  基於上面的兩種轉換操作,S2D可以生成包含豐富多階段網路的搜索空間。不同分割點和指示矩陣有不同的意義,調整分割點能夠改變分組特徵的分配方式,從而改變不同階段分類器在準確率和資源消耗上的trade-off,而調整指示矩陣則伴隨特徵復用策略的改變。為了降低搜索空間的大小,在實驗時規定目標網路中相同特徵大小的層使用相同的分割點和指示矩陣。

The Details of NAS


  在生成搜索空間後,下一個步驟就是找到最優的動態網路結構,搜索過程將網路a表示為兩種轉換的設置,並標記\mathcal{Z}為包含不同設置的空間。論文採用NAS常用的policy gradient based強化學習方法進行搜索,該方法的目標是優化策略\pi,進而通過策略\pi得到最優的網路結構,優化過程可公式化為嵌套的優化問題:

\theta_a是網路a的權值,\pi是用來生成轉換設置的策略,\mathcal{D_{val}}\mathcal{D_{train}}標記驗證集和訓練集,R為驗證多階段網路性能的回報函數。為了解決公式1的優化問題,需要解決兩個子問題,根據\theta^{*}_a優化策略\pi和優化網路a\theta_{a}

Optimization of the Transformation Settings

  與之前的NAS方法類似(公眾號有很多NAS的論文解讀,可以去看看),使用RNN生成目標網路每層的不同轉換設置的分布,然後policy gradient based演算法會優化RNN的參數來最大化回報函數:

ACC(a, \theta_a, \mathcal{D})為準確率,COST(a, \theta_a, \mathcal{D})為動態推理的平均資源消耗。為了與其它動態推理研究比較,採用FLOPs表示計算消耗,w為平衡準確率和資源消耗的超參數。

Optimization of the Multi-stage CNN

  使用梯度下降來優化內層的優化問題,修改常規的分類損失函數來適應多階段模型的訓練情況:

CE為交叉熵損失函數,公式3可認為是連續訓練不同階段的分類器,可使用SGD及其變種進行參數\theta的優化。為了縮短訓練時間,僅用幾個訓練周期來接近\theta^{*},沒有完整地訓練網路到收斂。訓練完成後,在測試集進行回報函數的測試,優化RNN。最後選擇10個搜索過程中最優的網路結構進行完整地訓練,選擇性能最好的網路結構輸出。

Dynamic Inference of the Searched CNN

  對於最優的多階段網路a=\{f_1, \cdots, f_s \}後,在使用時為每個階段預設一個閾值。按計算圖依次進行多階段推理,當該階段的預測結果達到閾值時,則停止後續的推理,直接使用該階段結果。

Experiments


  與多種類型的加速方法對比不同目標網路的轉化後性能。

  與MSDNet進行DenseNet轉換性能對比。

  不同目標網路轉換後各階段的性能對比。

  準確率與計算量間的trade-off。

  多階段ResNet-56在CIFAR-10上的模型。

Conclustion


  S2DNAS最核心的點在於設計了豐富而簡潔的搜索空間,從而能夠使用常規的NAS方法即可進行動態推理網路的搜索,解決了動態推理網路的設計問題,可進行任意目標網路的轉換。不過S2DNAS沒有公布搜索時間,而在採用網路訓練的時候僅用少量訓練周期,沒有列出驗證訓練方式和完整訓練得出的準確率是否有偏差。此外,S2DNAS的核心是將靜態網路轉換成動態網路,如果轉換時能夠將靜態網路的權值用上,可以更有意義,不然直接在目標數據集上搜索就好了,沒必要轉換。



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

work-life balance.