天天看點

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

1. 概述

CNN網絡經被在衆多方面展現了其成功,但是随之而來的是巨大的計算量與參數存儲空間。這篇論文中給出一種剪除卷積濾波器的方法(确實會影響精度),但是移除這些濾波器與其對應的feature map之後确實帶來計算量的降低,而且并不會導緻連接配接的稀疏,進而就并不需要支援稀疏的卷積庫,可以使用現有的BLAS庫。在實驗中減少了VGG-16中34%和ResNet-110中38%的計算量,并且通過重新訓練獲得了與原網絡近似的精度。

然而,單純剪裁參數量并不是減少計算時間的必要條件(分類網絡),因為分類網絡諸如VGG-16中90%的參數是在全連接配接層,但是卻隻有1%不到的浮點運算。實際上卷積層也是能被壓縮和加速的,但是需要稀疏的BLAS庫,甚至特定的硬體。參數總量可以使用average pooling減少,卷積層的運算量可以通過在網絡初始階段下采樣來減小,然而,網絡越來越深,卷積層中的計算量占據了計算量的主要部分。

那麼通過移除卷積中多餘的濾波器也能夠加速網絡,這是一種naturally structured way。這樣的方法實作重新訓練,此外這裡使用one-hot的鍵值重新練政策而不是layer-wise的方法,這樣可以加速重新訓練的時間。

2. Channel Pruning

2.1 單個layer的pruning

這裡使用 n i n_i ni​表示第 i i i個卷積層的輸入通道數, ( h i , w i ) (h_i,w_i) (hi​,wi​)是輸入feature map的寬高。目前卷積層将輸入feature map(次元 x i ∈ R n i ∗ h i ∗ w i x_i \in R^{n_i*h_i*w_i} xi​∈Rni​∗hi​∗wi​)轉換到feature map輸出 x i + 1 x_{i+1} xi+1​(次元 x i + 1 ∈ R n i + 1 ∗ h i + 1 ∗ w i + 1 x_{i+1} \in R^{n_{i+1}*h_{i+1}*w_{i+1}} xi+1​∈Rni+1​∗hi+1​∗wi+1​)。這樣的操作是通過使用3D的濾波器 F i , j ∈ R n i ∗ k ∗ k F_{i,j} \in R^{n_i*k*k} Fi,j​∈Rni​∗k∗k在feature map上做運算得到的,這裡是一個濾波器,那麼總的濾波器就可以表示為 F i ∈ R n i ∗ n i + 1 k ∗ k F_i \in R^{n_i*n_{i+1}k*k} Fi​∈Rni​∗ni+1​k∗k,那麼總的計算量就是 n i + 1 n i k 2 h i + 1 w i + 1 n_{i+1}n_ik^2h_{i+1}w_{i+1} ni+1​ni​k2hi+1​wi+1​。那麼剪除掉多餘的濾波器并不隻是目前層的計算量減少,與之相關的後序特feature map也是會消失的,見下圖

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

論文中的方法在訓練好的模型上剪除不太重要的濾波器,并且使得精度的下降最小。這裡使用濾波器中參數的絕對值和 ∑ ∣ F i , j ∣ \sum |F_{i,j}| ∑∣Fi,j​∣(L1範數)作為剪裁的度量标準,該标準反映了對應輸出feature map的重要程度,圖2中的a圖反映了濾波器參數的絕對值在VGG-16中各層的分布情況。論文中發現剪裁最小的濾波器其效果比剪裁随機或是更大濾波器的效果好;與基于激活的特征圖裁剪相比,我們發現“L1-norm”是一個很好的資料自由篩選标準。

在第 i i i個卷積層中剪裁掉 m m m個濾波器的步驟描述如下:

1)對于每個濾波器 F i , j F_{i,j} Fi,j​計算它們的卷積核參數的絕對值和 s j = ∑ l = 1 n i ∑ ∣ K l ∣ s_j=\sum_{l=1}^{n_i}\sum |K_l| sj​=∑l=1ni​​∑∣Kl​∣;

2)對 s j s_j sj​按照從小到大排序;

3)去掉前面 m m m個濾波器,那麼這 m m m個濾波器和其生成的feature map也會被剪除;

4)再将剩下的濾波器參數存儲到新的模型當中。

與權重剪枝(pruning weights)的關系:濾波器剪枝和權重剪枝是類似的。但是權重剪枝的門檻值需要精細設計,并且很難預測剪枝過後濾波器的個數。此外,這會導緻卷積核的稀疏,這會因為缺少有效地稀疏計算庫而變得困難。

與濾波器上group-sparse正則化的關系:在卷積濾波器上使用group-sparse正則化( ∑ j = 1 n i ∣ ∣ F i , j ∣ ∣ 2 \sum_{j=1}^{n_i}||F_{i,j}||_2 ∑j=1ni​​∣∣Fi,j​∣∣2​),會導緻權重趨近于0。在實際中并沒有發現L1與L2的在濾波器選擇上的顯著差別,濾波器中權重大的自然也就是重要的。對于L1與L2作為剪枝的依據在論文中做了論述,得到的實驗結果如下:

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

從中得到的結果就是兩個差的并不是很大,在它給出的結果裡面L1還好于L2。

2.2 多個layer的pruning

在實驗中對VGG-16中涉及到的層進行剪枝得到他們對于剪枝自後對準确率的影響。為了避免引入層之間的中間參數,使用相同的裁剪比例。對于一些對剪裁比較敏感的層,使用更小的剪裁比例設定不剪裁。

在CNN網絡中進行逐層剪枝是相當耗時的,了解怎麼實作多層上進行濾波器剪裁是很有必要的。1)在整個網絡中進行剪裁使得擁有網絡魯棒性的全局視角,進而可以得到更小的網絡。2)對于複雜的網絡,全局的方法是相當必要的。例如,ResNet,剪裁殘差快的feature map會導緻對其它層額外地剪裁。對于多層剪裁,可以從以下兩個層間濾波器選擇政策:

1)單獨剪裁(Independent pruning)以确定哪些濾波器應該被剪裁,圖中在剪除右邊的濾波器的時候要考慮黃色的值,相當于兩組濾波器互相獨立。

2)貪婪剪枝(Greedy pruning)不需要考慮在前一層中已經删除的filter,也就是圖中黃色的方塊區域。

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

論文指出greedy的方法在多個濾波器組剪裁的時候效果更好。該政策在計算絕對權值和時不考慮前面修剪過的特征映射的核。

2.3 多分枝結構的pruning

對于複雜網絡結構,比如殘差網絡的處理。這裡處理濾波器組就不能像在之前的網絡一樣了,它的結構就要求必須仔細地進行處理。首先,殘差塊的第一個卷積是可以被任意剪裁的,因為并不會影響最後的輸出feature map數量;殘差塊的第二卷積與之前映射過來的feature map是一一對應的,這就使得比較難以剪裁;但是由于對應過來的feature map重要性是強于殘差網絡的輸出的,是以剪裁應該由前者決定。

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

2.4 剪裁網絡的康複訓練

使修剪之後的網絡獲得原有的精度主要由兩種政策可選:

1)剪裁一次之後重新練,剪裁多層的濾波器,之後重新訓練達到原始網絡的精度。

2)剪裁和重新練交替進行,逐層或是逐濾波器剪裁然後重新練,在進行下一層剪裁的時候需要完成重新練,讓網絡去适應這個改變。

這兩種方法都是隻進行一次剪裁與重新練(layer by layer),因而整個剪裁的周期很短。但是,要是剪裁的比例過大或者剪裁了一些比較敏感的層那就gg了。第二種方式就是需要花太多時間去疊代了-_-||。顯然第二種的要好一些,第一種未免太過于暴力,造成無法挽救的剪裁。

3. 實驗

3.1 剪裁實驗

先給一個總的剪裁結果總表吧,如下圖所示:

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

對于VGG這種類型的網絡沒什麼好說的,重點是那種多分支的網絡結構,操作起來就比較困難了。作者先後嘗試了不修剪殘差塊的輸出,隻修剪殘差塊中的第一個卷積(因為可以随便整),但是要操作後面的時候就出問題了,可以從下面的兩幅圖中看出,剪裁就變得很敏感,不好搞了。

首先,剪裁殘差塊的第一個卷積得到的實驗結果:

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

接下來就是剪裁第二個了

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

就可以看到這個東西就不是很好操作了。

3.2 剪裁政策

濾波器删除規則的實驗,從實驗結果中可以看出删除小的濾波器政策,随機删除政策,最大濾波器删除政策,它們的結果是依次遞減的。也就是說明了文章提出剪裁依據有效(這裡并沒有說最佳喲,而且它也沒提出來呀)。

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

除此之外,還嘗試了使用其它的剪裁政策

《Pruning Filters for Efficient Convnets》論文筆記1. 概述2. Channel Pruning4. 個人總結

4. 個人總結

在這篇論文中具體給出了CNN網絡剪裁的方法,但是網絡剪裁本來就是一個沖突的問題,一方面需要裁剪網絡的大小,一方面需要保持原有網絡的表達能力。使用channel權重排序進行channel pruning的方式有其實際依據,但是pruning本來就是一個組合優化問題,單純使用排序取top k的方式也有它的局限性,但是至少沒有太差。後面學者使用最優化方法去解決該問題的,效果還不錯。

繼續閱讀