Paper | SkipNet: Learning Dynamic Routing in Convolutional Networks


SkipNet: Learning Dynamic Routing in Convolutional Networks

作者對residual network進行了改進:加入了gating network,基於上一層的激活值,得到一個二進制的決策0或1,從而繼續推斷或跳過下一個block。作者還提出了對應的訓練方法,集成有監督學習和強化學習,從而克服了skipping不可差分的問題。

4_1

1. 概括

難點:skipping決策是不可差分的,那么就無法用基於梯度的優化方法進行學習。

  1. [2,30,31]提出了軟近似,但實驗發現它們的精度很差。

    We show that the subsequent hard thresholding required to reduce computation results in low accuracy.

  2. [4,23]則提出用強化學習解決硬判決問題,但實驗發現它們很脆弱,即精度也很差。

  3. [16,21]還采用了reparametrization技術,但其中的松弛會引入估計誤差,導致習得策略欠佳。

訓練方法大致分為2步:

  1. 借助reparameterization和soft-max松弛,同時訓練網絡和門限。

  2. 取消松弛,借助強化學習,繼續精煉skipping政策。

實驗結果:在CIFAR-10、CIFAR-100、SVHN和ImageNet上,分別能降低50%、37%、86%和30%的計算量。並且,SkipNet也存在一個超參數,可以針對不同計算量約束進行調節。

2. 相關工作

為了實現模型壓縮,大多數工作集中在參數稀疏化、濾波器剪枝,向量量化和蒸餾。這些方法的共同問題:

  1. 通常是后處理,即對已經訓練好的網絡執行的操作。

  2. 並不能根據輸入動態調整網絡。

還有一些工作[6,8,29]通過提前終止實現這一目標。其中[8]是暫停循環過程,[6]和[29]是提前終止CNN。但本文的SkipNet是跳過而不是提前終止。

還有一些工作[1,22,32]集成了不同計算復雜度的多個模型,並設計決策機制或終止機制。但是這樣做嚴重浪費了存儲,並且每個模型並不存在計算共享。

3. 方法細節

基本方法就是:在ResNet的基礎上,加入了門限網絡。其將上一層的輸入映射至0或1,從而跳過或執行下一層。

注意:要求輸入、輸出的維度相同。而ResNet的塊結構正好滿足這一要求。或者要采用池化等操作。

門限模塊的結構

作者嘗試了三種結構:

4_2

前兩種都是CNN結構,第三種是RNN結構。第一種計算量大,作者只用於淺層網絡;第二種計算量小,作者用於超過百層的網絡。在后續實驗中,作者發現循環網絡效果最好,不僅計算量遠小,而且精度也高。這歸功於其時序學習能力。

訓練方法

最簡單直接的方法就是用softmax軟化(例如Highway Networks),使得網絡參數能夠差分;而在推導(測試)時再用硬判決。但實驗發現其精度很差,原因是其中存在誤差。

作者決定在訓練階段保留硬判決。現在我們分析損失函數。假設第\(i\)層的輸入是\(\mathbf{X}^i\),門模塊是\(G^i(\mathbf{X}^i)\),判決結果是\(g_i\)\(g_i = 1\)時,該層執行;\(g_i = 0\)時,該層被跳過(輸入直接恆等映射至輸出)。一共\(N\)層,則總判決為\(\mathbf{g} = \{0, 1\}^N\)

假設網絡每一層參數的集合(包括門模塊)為:\(F_{\theta} = [F_{\theta}^1, ..., F_{\theta}^N]\)。在給定\(\mathbf{X}\)\(\mathbf{g}\)的情況下,損失為:

\[L_{\theta}(\mathbf{g}, \mathbf{X}) = \mathcal{L}(\hat{y}(\mathbf{X}, F_{\theta}, g), y) - \frac{\alpha}{N} \sum_{i=1}^N (1 - g_i) C_i \]

前半部分應該是有監督學習中的保真度(fidelity)或者准確度指標之類的【作者沒提】,后者懲罰的是計算量。其中\(C_i\)用來調節\(F_i\)的重要性【注意負號】,作者設恆為1。\(\alpha\)是權衡計算量和精度的超參數。

進一步,右半部分可以視為強化學習中的獎勵(reward)。

我們的訓練目標嚴格寫是這樣:

\[\min \mathcal{J}(\theta) = \min \mathbb{E}_{\mathbf{X}} \mathbb{E}_{\mathbf{g}} L_{\theta}(\mathbf{g}, \mathbf{X}) \]

即:對訓練集中的所有樣本取統計平均(一般就是平權,因為假設i.i.d.),對所有可能的判決集結果取統計平均,並最終實現 最小化誤差的同時 最小化計算量。二者相對重要性由\(\alpha\)調控。

我們也可以看看該訓練目標函數的梯度。注意梯度是關於參數\(\theta\)的梯度:

4_3

第二步的右半部分是這樣的,熟悉RL的同學都很清楚:

\[\nabla_{\theta} \log p_{\theta}(\mathbf{g} | \mathbf{X}) = \frac{1}{p_{\theta}(\mathbf{g} | \mathbf{X})} \nabla_{\theta} p_{\theta}(\mathbf{g} | \mathbf{X}) \]

對於最終結果,左半部分就可以看作監督學習損失函數的梯度,右半部分就可以看作強化學習損失的梯度。其中:

\[r_i = - [\mathcal{L} - \frac{\alpha}{N} \sum_{j=i}^N R_j] \]

在實際操作中,我們降低對精度的要求,給前半部分加一個超參數:

\[r_i = - [\beta \mathcal{L} - \frac{\alpha}{N} \sum_{j=i}^N R_j] \]

作者設\(\beta = \frac{\alpha}{N}\)或1。

實際上,分兩個部分分別訓練是不完美的,但是一個折衷的處理方式。作者首先使用監督學習,讓網絡參數初步收斂。然后再采用強化學習。實驗發現,如果直接將上式作為強化學習的激勵,那么訓練效果會很不好。原因可能是學習的策略過早收斂於垃圾特征。

實驗有幾個有趣的發現:

  1. 簡單的樣本(跳過層數多)偏亮,清晰,對比度高:

    4_4

  2. 越大尺度的圖像平均需要塊越多(可能因為感受野不夠):

    4_5

  3. 前面層和后面層被跳過比較頻繁,中間層跳過率很低。

  4. 有監督預訓練為強化學習提供了很好的起點。

  5. 在計算量相同的情況下,硬判決的精度遠高於軟判決。

4. 總結

優點:不同於提前退出,這種方法比較新。

不足:每一層或塊的輸入、輸出維度必須相同,否則無法執行跳過判決(跳過或執行的輸出維度必須得一致)。或者需要池化等額外操作。


免責聲明!

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



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