Soft Filter Pruning(SFP)論文解讀

論文地址:https://arxiv.org/abs/1808.06866
GitHub:https://github.com/he-y/soft-filter-pruning

Abstract

這篇論文提出了SFP(Soft Filter Pruning)方法來加速CNN網絡的推理過程,特別的地方在於,我們提出的SFP算法在訓練剪枝後的網絡時,對原來已經剪枝的卷積核同樣要做參數更新。與之前的工作相比,SFP有兩大優勢:

  1. 更大的模型容量:對之前剪掉的卷積核更新使得我們的方法相比於固定卷積核爲0,有更大的網絡容量。因此,通過我們的方法訓練得到的網絡由於有更大的網絡容量可以從訓練數據學得更好;
  2. 對預訓練模型的依賴減弱:大的網絡容量使得SFP可以從頭開始訓練,同時對模型進行剪枝。相反,之前的卷積核剪枝方法是在預訓練模型的基礎指導之下保證網絡性能。而從頭開始訓練的SFP優於之前的卷積核剪枝方法;

而且,我們的方法已經在很多先進的CNN結構中展示出了高效性,值得一提的是,在ILSCRC 2012上,SFP講ResNet-101的FLOPs減少了42%,同時top-5的準確率卻提升了0.2%,已經達到了最先進的水平。

1. Introduction

在這裏插入圖片描述
之前的結構化稀疏剪枝——卷積核層面的剪枝只要存在兩個問題:模型容量的減小和對預訓練模型的依賴。具體來講,可以看Figure 1,大多數之前的工作都是"hard filter pruning",它是直接刪除剪掉的卷積核,這樣做的後果就是模型容量減小了,這會使得性能受損。而且,爲了維持一個相對不錯的精度,在之前的工作中我們往往要對剪枝後的模型進行微調,這會降低訓練效率,並且通常要比傳統的訓練方案花費更多的訓練時間。

爲了解決上面的問題,我們提出了一個新穎的SFP(Soft Filter Pruning)方法,SFP算法以一種柔和的方式對卷積核進行剪枝:在第一個訓練epoch之前,我們先將所有層中具有較小的L2範數的卷積核置0,然後在這個epoch中使用訓練數據對所有卷積核(包括被設置爲0的)的參數進行更新,這個訓練過程一直持續指導模型收斂。最後,沒有進一步更新的卷積核被選擇並丟棄。

本文的貢獻:

  1. 我們提出的SFP算法允許剪掉的卷積核在訓練期間繼續更新,這種"柔和"的方式可以動態的維持網絡容量,因此可以得到很高的性能;
  2. 我們的加速方法可以從頭開始訓練網絡,並且與最先進的模型相比實現了更好的性能。通過這種方法,我們不需要微調這個環節,節省了整個微調所需要的訓練時間。而且,使用預訓練模型可以進一步提高我們方法的性能,實現了更加優越的加速;
  3. 我們在兩個基準測試集上做的實驗也驗證了我們SFP算法的高效性,我們在CIFAR-10數據集上,把ResNet-101加速了兩倍,並且精度提高了4個百分點,在ILSVRC-2012上也實現了優越的結果;

2. Related Work

在卷積核剪枝方面的幾篇重要工作:

  • [Li et al., 2017] 使用L1-norm挑選出不重要的卷積核,並且探索了層的敏感度用來指導每層的簡直比例的選擇;
  • [Liu et al., 2017] 將BN層的縮放因子的 L1正則化引入損失函數中,然後將縮放因子小的BN層對應的卷積核刪掉;
  • [Molchanov et al., 2017] 提出了基於剪枝標準的泰勒展開用來近似優於剪枝而造成的損失函數的變化;
  • [Luo etal., 2017] 採用了來自下一層的統計信息對卷積核的重要性做評估;
  • [He et al., 2017] 提出了一種基於Lasso的通道選擇策略和最小二乘重建算法來對卷積核剪枝;

然而,對於這些卷積核剪枝方法,在剪枝之後網絡的表達性能都會受到更小的優化空間影響;

3. Methodology

3.1 初步介紹

我們先來介紹一下本節中會使用的符號和標記。WiRNi+1×Ni×K×K,1iL{W^{i}\in R^{N_{i+1}\times N_{i}\times K\times K},1\leqslant i\leqslant L}表示第i層的連接權重矩陣,其中NiN_{i}是第i個卷積層的輸入特徵圖的通道數,L是層數,Ni+1N_{i+1}是第i個卷積層的卷積核的個數,輸入張量U 和輸出張量V的形狀分別爲:Ni×Hi×WiN_{i}\times H_{i}\times W_{i}Ni+1×Hi+1×Wi+1N_{i+1}\times H_{i+1}\times W_{i+1}。第i層的卷積操作可以記爲:Vi,j=Fi,jUfor1jNi+1V_{i,j}=F_{i,j}*U for 1\leqslant j\leqslant N_{i+1}

在這裏,Fi,jRNi×K×KF_{i,j}\in R^{N_{i}\times K\times K}代表第i個卷積層的第j個卷積核,即Wi=Fi,j1jNi+1W^{i}={F_{i,j},1\leqslant j\leqslant N_{i+1}}Vi,jV_{i,j}是第i個卷積層的第j個輸出特徵圖。

對卷積核剪枝意味着對輸出特徵圖的移除,通過這種方法,神經網絡的計算成本會明顯的減少。我們假設SFP第i層的剪枝比率爲PiP_{i},該層的卷積核數量由Ni+1N_{i+1}減少至Ni+1(1Pi)N_{i+1}(1-P_{i}),同時輸出張量Vi,jV_{i,j}維度變爲Ni+1(1Pi)×Hi+1×Wi+1N_{i+1}(1-P_{i}) \times H_{i+1}\times W_{i+1}。正因爲第i層的輸出張量又是第i+1層的輸入張量,這意味第i+1層的卷積核通道維度上縮減了,進一步實現了更高的壓縮比率。

3.2 Soft Filter Pruning(SFP)

之前的卷積核剪枝都可以看作是“hard filters pruning”,這些算法首先逐層的對預訓練模型進行剪枝,然後微雕以恢復精度,接着繼續對下一層進行剪枝再微調…直到模型最後一層被剪枝。然而,一旦卷積核被剪枝,這些方法都不會再會這些卷積核更新,因此,模型的容量大幅度縮小,會對模型的性能造成比較大的影響。
在這裏插入圖片描述

正如Algorithm 1所描述的,提出的SFP算法可以以一種柔和的方式對卷積核動態剪枝,關鍵就在於在訓練階段我們對剪枝掉的卷積核仍然是更新的。這樣一種更新方式帶來了幾個優勢,它不僅保持了和原始CNN模型相同的網絡容量,而且避免了貪心的逐層剪枝過程以及它可以同時對所有層進行剪枝。更具體的講,我們的方法不僅適合從頭訓練一個模型的過程,同樣的也適合預訓練好的模型。在每個訓練epoch,整個模型被優化並在訓練數據中做訓練,在每個epoch之後,對每個層的所有卷積覈計算L2範數的值作爲我們卷積核選擇策略的標準,接着我們將選擇的要進行剪枝的卷積核的相關權重參數設置爲0,接下來就是下一個epoch,最後,原始的深度神經網絡被剪枝成一個緊湊高效的模型,SFP算法的細節如Alg 1所示,它可以分爲四個主要步驟:

Filter Selection:我們使用如下的等式(2)所描述的 Lp_norm 來評估每個卷積核的重要性。通常來講,Lp-norm值較小的卷積核的卷積結果會導致相關的激活值比較小,從而對CNN模型的最終預測值影響比較小。基於這種理解,我們優先考慮將 Lp-norm值小的卷積核剪枝掉,對於第i個權重層,我們根據該層的剪枝比率PiP_{i}來挑選出Ni+1PiN_{i+1}P_{i}個不重要卷積核。
在這裏插入圖片描述

Filter Pruning:我們將選擇的Ni+1PiN_{i+1}P_{i}個卷積核置零,這樣可以暫時消除它們對網絡輸出的貢獻,然而,在下一個訓練epoch,我們仍然允許這些被剪枝的卷積核更新參數,這是爲了保持網絡容量而不影響到網絡性能。

在對網絡剪枝時,我們簡單的同時將所有層的待剪枝的卷積核置0,這是並行發生的,幾乎不會造成計算時間上的成本。相反,之前的卷積核剪枝方法允許逐層的貪心剪枝,在完成對但單個層的剪枝後,已有的方法都是總是需要重新訓練直到網絡收斂,這個過程需要額外的訓練時間。在這裏,我們對所有層使用同一個剪枝比率Pi=PP_{i}=P,這樣做是爲了減少網絡訓練時的超參數搜索,同時避免了複雜的層敏感度分析。因爲我們允許剪枝掉的卷積核更新參數,所以模型有更大的網絡容量且更靈活,我們可以平衡每個卷積核的貢獻來做出最終預測。

Reconstruction:在剪枝之後,我們在下一個epoch會對網絡進行訓練來使得上次"失活"的卷積核重建,正如Figure 2所示,剪掉的卷積核經過反向傳播更新之後可能會變爲非零值。通過這種方法,SFP允許剪枝的模型在訓練期間和原始模型具有同樣的容量。相反,"hard filter pruning"會縮減卷積核的數目,這會導致網絡容量的減小和性能受損。以前的剪枝方法通常需要一個預訓練模型並做微調,然而,當我們將剪枝步驟整合到正常的訓練方案,我們的方法可以從頭訓練模型,因此微調這個階段對於SFP算法並非必須。正如我們在實驗中展示的那樣,通過SFP算法從頭訓練得到的網絡可以取得與通過其他方法藉助預訓練模型得到的結果相媲美,通過利用與訓練模型,SFP可以獲得更高的性能。
在這裏插入圖片描述

Obtaining Compact Model:SFP交替執行"filter selection"、“filter pruning”、"reconstruction"這幾個步驟,直到網絡收斂,我們獲得一個包含有很多"zero filters"的稀疏模型,每一個參數爲零的卷積核都會導致輸出feature maps的一個輸出通道爲0,其在後續的推理階段中將一直沒什麼作用,因此將這些卷積核移除對網絡性能是不會造成什麼影響的。具體來講,對於剪枝率爲PiP_{i}的第i層來說,最終只會保留Ni+1(1Pi)N_{i+1}(1-P_{i})個對最終預測有影響的卷積核,考慮到前一層的剪枝,第i層的輸入通道由NiN_{i}變爲Ni(1Pi1)N_{i}(1-P_{i-1})個,因此重新申請的模型第i層的卷積核維度更小了,其第i層權重爲WiRNi+1(1Pi)×Ni(1Pi1)×K×K,1iL{W^{i}\in R^{N_{i+1}(1-P_{i})\times N_{i}(1-P_{i-1})\times K\times K},1\leqslant i\leqslant L}

3.3 Computation Complexity Analysis

理論上的加速分析:假設第i個卷積層的卷積核剪枝比率爲PiP_{i},這意味着該層有Ni+1PiN_{i+1}P_{i}個卷積核被剪枝,剩下Ni+1(1Pi)N_{i+1}(1-P_{i})個卷積核不會改變,假定原本第i層輸入特徵圖的寬和高、輸出特徵圖的寬和高分別爲 Hi×WiH_{i} \times W_{i}Hi+1×Wi+1H_{i+1} \times W_{i+1},經過卷積核之後,第i層有用的輸出特徵圖維度由Ni+1×Hi+1×Wi+1N_{i+1} \times H_{i+1} \times W_{i+1} 變爲 Ni+1(1Pi)×Hi+1×Wi+1N_{i+1}(1-P_{i}) \times H_{i+1} \times W_{i+1} ,第i層的輸出是第i+1層的輸入,我們進一步考慮剪枝率爲Pi+1P_{i+1}的第i+1層,其計算量由原來的Ni+2×Ni+1×K×K×Hi+2×Wi+2N_{i+2} \times N_{i+1} \times K \times K \times H_{i+2} \times W_{i+2}變爲 Ni+2(1Pi+1)×Ni+1(1Pi)×K×K×Hi+2×Wi+2N_{i+2}(1-P_{i+1}) \times N_{i+1}(1-P_{i}) \times K \times K \times H_{i+2} \times W_{i+2},換句話來講,原始計算量中1(1Pi+1)(1Pi)1-(1-P_{i+1})(1-P_{i})的比例被減少了,這將會使得神經網絡在推理階段速度加快。

實際的加速分析:在理論的加速分析中,我們沒有考慮除卷積操作之外的其他操作,諸如BN層、池化層等,我們只考慮了卷積操作的FLOPs。然而,減少FLOPs不能帶來相同量級上的實際加速,因爲一些非張量層(如BN、pool層)在GPU上推理時也需要時間,另外,還有IO延遲、緩衝器限制和BLAS庫的高效性也會使得理論和實際的加速存在較大差別。

4. Evaluation and Results

4.1 Benchmark Datasets and Experimental Setting

實驗設置:

  • 我們的SFP操作是在每一個訓練epoch之後;
  • 對於從頭開始訓練的模型剪枝,我們使用正常的訓練方案;對於一個預訓練模型進行剪枝時,學習率比從頭訓練的相比減少了10倍。

4.2 ResNet on CIFAR-10

我們在ResNet 20、32、56和100上測試了我們的SFP方法,我們使用了不同的剪枝比率,並且分析了從頭開始訓練和使用預訓練模型的差別。
在這裏插入圖片描述

Result,table 1展示了實驗結果,我們的SFP算法可以實現比最先進的結果更高的性能表現。舉個例子, [Li et aL, 2017]中對ResNet 110使用"hard filter pruning"實現了38.6%的加速比例,精度只掉了0.61%(沒有微調),但使用了預訓練模型和微調後精度只掉了0.2%。然而通過SFP方法,我們可以將模型加速40.8%,且在不微調的情況下精度只掉了0.3%,在使用預訓練模型之後,精度甚至上升了0.18%。

4.3 ResNet on ILSVRC-2012

我們在ILSVRC-2012數據集上對ResNet-18、34、50、101上進行了測試。對所有的模型都使用了相同的剪枝比率——30%,ResNet的所有層同時進行剪枝(爲了簡單化對於projection shortcuts不進行剪枝)。
在這裏插入圖片描述

4.4 Ablation Study

我們設計廣泛的消融研究來進一步分析SFP的每一個元素。

Filter Selection Criteria:基於量級的標準(比如Lp-norm)被廣泛用於卷積核選擇,因爲它需要的計算資源小。我們將L2-norm和L1-norm進行了比較,對於L1-norm標準,在10%、20%、30%的剪枝比率下模型的準確率分別爲 93.68 ±\pm 0.60%, 93.68 ±\pm 0.76%, 93.34 ±\pm 0.12%。對於L2-norm標準,準確率爲 93.89 ±\pm 0.19%, 93.93 ±\pm 0.41%, 93.38 ±\pm 0.30%。可以出來,L2-norm的結果比L1-norm好一點,這是由於L2的結果受最大元素支配,L1的結果受其他小元素影響更大,因此,對於L2標準來說擁有大權重的卷積核會被保留下來,所以相應的判別特徵被保留下來導致模型性能更好。

Varing pruning rates:爲了全面瞭解SFP,我們測試了對於ResNet-110不同的剪枝比率的影響,正如Figure 3(a)所示,當剪枝比率增加時,模型的精度先上升到基準線上再近似的線性下降。當剪枝比率在0-23%之間時,加速模型的精度比基準模型要高,這也說明了我們的模型有一個正則化的效果。可以減少過擬合。

Sensitivity of SFP interval:默認情況下,在每一個訓練epoch之後我們都會進行SFP操作,然而,不同的SFP間隔也會導致不同的表現,所以我們探索了SFP間隔的敏感度,我們使用剪枝率爲30%的ResNet-110作爲基線,然後將SFP 間隔從1-10變化,結果如Figure 3(b)所示,它展示了模型準確率在不同的SFP間隔下沒有太大的波動。而且,大多數(超過80%)的間隔準確率都比間隔爲1時高,因此,通過調節這個超參數我們可以進一步提高模型的精度。

Selection of pruned layers:之前的工作總是對網絡中的一部分層做剪枝,並且不同層設置不同的剪枝比率。舉個例子,[Li et al., 2017] 僅僅剪枝不敏感的層,[Luo et al., 2017] 跳過ResNet的殘差模塊的最後一層,[Luo et al., 2017] 對於淺層的剪枝更加激進,對於深層則剪枝的少一點,類似地,我們也比較了對ResNet中所有殘差塊的第一層和第二層進行剪枝的性能,我們將剪枝比率設置爲30%,對塊中所有第一層進行剪枝後模型的精度爲 93.96 ±\pm 0.13%,然而第二層剪枝之後精度只有 93.38 ±\pm 0.44%,因此,不同層的敏感度不同,更加細緻的剪枝層的選擇可能會導致性能上的提高,儘管這會引入更多的超參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章