程小輝,李 鈺,康燕萍
(1.桂林理工大學 信息科學與工程學院,廣西 桂林 541006;2.廣西嵌入式技術與智能系統重點實驗室,廣西 桂林 541006)
近年來,卷積神經網絡(Convolutional Neural Network,CNN)在圖像識別、文本翻譯等領域應用越來越廣泛,引起了國內外諸多學者的關注。然而,卷積神經網絡在計算和存儲上存在大量開銷,尤其是近些年出現的大規模CNN 模型,如VGGNet[1]、GoogleNet[2]、ResNet[3]、AlexNet[4]等,網絡模型均存在巨量的參數,對設備的內存和計算性能要求較高,難以在嵌入式等算力和存儲資源均有限的設備上部署[5]。文獻[6]指出,卷積神經網絡的參數存在大量冗余權值。因此,對大型卷積神經網絡模型進行壓縮極為重要[7]。
神經網絡的壓縮方法主要包括低秩分解、量化、知識蒸餾、剪枝等[8-9],其中,低秩分解是通過分解權重矩陣的方式來減少網絡的計算量。LI 等[10]提出一種基于內核分解的算法,同時設計相關的微架構,可以最大限度地優化卷積網絡。量化算法以占用較少存儲空間的低精度參數權值來替代卷積神經網絡中的高精度浮點型參數,目前最常見的是采用8 位整型參數來替代原有網絡中的32 位浮點型參數。HAN 等[11]提出基于量化和哈夫曼編碼的網絡壓縮方法,在AlexNet 網絡上獲得了35 倍的壓縮比。知識蒸餾的主要思想是通過大網絡訓練小網絡,將大網絡的輸出作為小網絡的監督信息,讓小網絡的準確率逐漸逼近大網絡,從而達到模型剪枝的目的。針對ResNet 等多分支殘差網絡,AGHLI[12]提出了相應的知識蒸餾架構和損失函數,能夠在保持基線模型精度的情況下較好地壓縮模型結構。
通過剪枝方法縮小網絡規模的方式在設備部署、應用等方面更有普適性,因此,本文采用剪枝方法對卷積神經網絡進行壓縮。從剪枝粒度的角度可以將剪枝分成非結構化剪枝(unstructured pruning)和結構化剪枝(structured pruning)兩個大類。其中,非結構化剪枝直接對單體權重進行剪枝,剪枝后模型的部署不易實現,結構化剪枝則是通過修剪整個過濾器的方法對模型進行剪枝,對硬件部署更為友好。
LI 等[13]根據卷積核的L1 范 數來衡量卷積核的重要性,通過裁剪L1 范數較小的卷積核來實現模型剪枝。HE 等[14]通過在歐氏空間中計算每個卷積核對應的幾何中位數,將中心點附近的卷積核進行裁剪,從而實現模型剪枝。文獻[15]所提出的CP 算法通過使用LASSO 回歸方式來完成對卷積神經網絡通道的逐層剪枝。文獻[16]提出的剪枝方法采用計算權重的范數以保留BN 層偏置。文獻[17]提出一種融合卷積層和BN 層參數信息的動態剪枝方法,引入注意力機制來評判卷積核的重要性。文獻[18]提出一種基于BN 層縮放因子和輸出的剪枝方法,對較小縮放因子匹配的通道進行剪枝,并對剪枝后的整個網絡進行微調。文獻[19]提出一種基于矩陣余弦相似度的剪枝方法,通過度量不同通道間的余弦相似度來對網絡進行剪枝。除此之外,文獻[20-23]也都提出關于網絡剪枝的方法。然而,上述方法幾乎都采用固定的剪枝率對卷積層逐層進行操作,忽略了卷積層之間存在的差異性,另一方面,對于模型權重過于重視而忽略了其在實際數據集或者應用場景下的情況,從而在剪枝后造成較大的精度下降。
本文提出一種基于中間圖特征提取的雙標準卷積核剪枝算法,結合BN 層的gamma 因子和卷積核輸出的信息特征與實際標簽之間的互信息,對卷積核的重要性進行全局評測。同時,針對一些如VGG網絡全連接層參數冗余的情況,提出一種基于節點相似度和K-means++聚類的全連接層剪枝算法。
全連接層存在大量節點,占用較大的存儲空間,針對該問題,本文提出一種基于節點相似度和K-means++聚類的全連接層剪枝方法以及剪枝后的權重融合策略,按照指定剪枝率大幅裁剪全連接層的節點。
另外,本文提出一種基于中間圖特征提取的卷積核雙標準剪枝方法,結合卷積核輸出特征與樣本標簽之間的互信息以及BN 層的縮放系數來衡量卷積核提取特征的能力,將其作為評判卷積核重要性的依據,對重要性較小的卷積核進行裁剪。
考慮一個簡單的三層全連接層網絡,如圖1 所示,3 個全連接層分別為Layer1、Layer2 和Layer3,其中,Layer1 的權重矩陣 為,節點S與節點Q以及節點P與節點Q之間的權重分別為,網絡的輸入為x。

圖1 三層全連接層網絡Fig.1 Network of three full connectivity layers
現在欲將節點S與節點P合并,即裁減掉節點P。在忽略偏置的情況下,節點S和節點P輸出的差值OutSP為:
其中:F(·)為激活函數,可以是ReLU或Sigmiod等函數。從式(1)可以看出,在不考慮輸入x的情況下,當和十分接近時,輸出的差值可以近似看作0,而這也是P節點能被S節點近似代替的條件。對于同一全連接層i的權重和,本文通過計算兩者差值的L2 范數(即歐氏距離)來衡量兩個向量的近似程度:
其中:Sim(,)表示向量和的相似度;L為wix和的長度。通過式(2)能夠得到同一全連接層任意兩個權重向量之間的相似程度,然后根據節點之間的相似度進行聚類,對于每個類的節點集合,只保留一個作為該類的節點參與構成剪枝后的新網絡結構,稱這個節點為代表節點。獲取代表節點的過程可以使用K-means++聚類算法的思想來實現。K-means++是一種基于樣本集合劃分的聚類算法,可以篩選出代表節點集合。
傳統的K-means 算法對初值具有很強的敏感性,K-means++算法在選擇初值時使用概率化選擇方法,以樣本的距離權值作為選擇依據,可以很好地避免原始K-means 算法對初值敏感的問題。K-means++聚類算法以N個數據作為輸入,將數據聚類成k類的結果R*作為輸出,其具體過程如下:
1)令t=0,隨機選擇一個數據點a1作為第一個中心。
2)對于其他數據點,計算其與當前最近的已選擇聚類中心的距離D(n),根據D(n)計算每個數據點被選擇為下一個聚類中心的概率P(n)。
3)選擇P(n)最大的節點作為下一個聚類中心。
4)重復第2 步和第3 步,直至選擇出初始的k個聚類中心at=a1,a2,…,ak。
5)對n中的每個樣本ni,計算其到聚類中心的距離,并且據此進行聚類,得到聚類結果Rt。
6)針對每個類別aj,重新計算其聚類中心,得到新的聚類中心集合at+1。
7)判斷是否滿足停止條件,如果滿足,則令R*=Rt;否則,令t=t+1,返回第5 步。
文獻[21]分析,權重的L2 范數越大,其重要程度越高。基于此思想,對于給定剪枝率的全連接層,可以計算當前層每個節點與當前層權重L2 范數最大的節點的相似度,將其作為分組結合的依據,以此保證該節點不被裁剪,然后基于K-means++聚類算法和剪枝率來確定剪枝的分組集合,這樣可以在不設置閾值的情況下,基于確定的剪枝率完成對該全連接層的剪枝,而且能夠減少計算量。本文提出的基于相似度和K-means++聚類的全連接層剪枝算法描述如算法1 所示。
算法1基于相似度和K-means++聚類的全連接層剪枝算法
剪枝后網絡的精確度必然會受到影響,而且會隨著剪枝率的增加而提高。對于圖1,剪去節點P之后,將會影響當前層以及下一層的權重,從而造成部分特征信息丟失,而這也是剪枝后準確率下降的原因。通過權重融合的方法可以在一定程度上消除裁剪節點對網絡結構的影響。
在采用權重補償的情況下,對節點P進行剪枝前后,Layer3 層任意節點Q所獲得的來自Layer2 層所有節點的特征值之差ValueQ的平方為:
設?=-,而F(·)的導數 不大于1,因此,由拉格朗日中值定理可知:
由Cauchy-Schwarz 不等式可知:
其中:x是與網絡結構無關的輸入。通過式(2)可知,在和相似的情況下,Sim(,)≈0,即。因此,當裁剪P節點時,可以通過將其權重融合到其他節點來彌補精度損失。
在已知某全連接層剪枝后的節點數以及節點聚類結果的情況下,可以根據聚類結果中所有子類節點對于下一全連接層各個節點的權重,然后通過權重融合的方式去彌補裁剪該全連接層節點后所造成的精度損失。
圖2(a)和 圖2(b)分別為VGG16 網絡在CIFAR100[24]和CIFAR10[24]數據集上對全連接層采用不同剪枝策略時的準確率對比,可以看到,與隨機剪枝相比,采用基于節點相似度和K-means++聚類思想的剪枝策略能夠在剪去大量節點后依然保持較高的準確率。相較于不進行權重融合的剪枝,權重融合剪枝能夠在一定程度上彌補剪枝帶來的影響,當分類難度、剪枝比例更大時,權重融合方法對精度的補償效果更為明顯。

圖2 不同剪枝策略的準確率對比Fig.2 Comparison of accuracy of different pruning strategies
本節提出一種新的卷積核重要性評估框架,使用卷積核輸出特征與樣本標簽之間的互信息以及BN 層的縮放系數作為雙標準,衡量卷積核的特征提取能力,以此作為卷積核的重要程度評判指標。然后將卷積核按照重要程度進行排序,裁剪重要性較小的卷積核。使用這一框架可以裁減掉不重要的卷積核,從而達到對復雜模型進行加速和壓縮的目的,使其適用于不帶殘差結構的普通卷積神經網絡以及帶有殘差結構的殘差神經網絡。
1.2.1 卷積核重要性評價指標
互信息是衡量兩個變量之間相關性的信息度量,廣泛應用于圖像處理領域,尤其是圖像配準任務。對于配準多模圖像而言,互信息不需要對圖像進行預處理而且魯棒性強,是一種經典的相似性測度方法。對于兩個變量X和Y而言,其互信息計算公式如下:
其中:p(x,y)表示x和y的聯合概率;p(x)和p(y)分別表示x和y的邊緣概率。式(6)是概率層面上的互信息計算公式。
對于卷積神經網絡的某一卷積層而言,結合文獻[25]提出的使用全局平均池化(GAP)層構建網中網的思想,本文提出一種卷積核重要性評價框架,即在每個卷積核后放置一個全局平均池化層,得到這一層輸入對于該卷積核的特征,然后求解特征所對應的真實標簽之間的互信息,并且結合該通道對應的BN 層縮放因子來判斷卷積核的重要性。
首先劃定一部分數據作為計算卷積核與標簽之間互信息的計算集E,將計算集E輸入到要剪枝的網絡中,對于某一卷積層,可以得到一個特征矩陣F∈RN×C×W×H,其中,N為計算集E所包含的數據量,C為該卷積層的通道數,W和H分別代表輸出特征矩陣的寬和高。
對于特征矩陣F,可以認為是計算集E的圖像在經過卷積后形成的“子圖”,即中間生成特征矩陣。全局平均池化層的工作機理如圖3 所示。全局平均池化層可以提取子圖在某一通道上對于計算集E圖像的特征向量,具有提取并且簡化特征的作用,可以將原本的四維特征矩陣縮放到二維空間,然后基于計算集E和子圖通道輸出的特征向量完成互信息計算。

圖3 全局平均池化層Fig.3 Global average pooling layer
BN(Batch Normalization)層[26]一般放在卷積層后,用于對特征圖進行歸一化,BN 層歸一化過程如式(11)~式(14)所示:
其中:D為數值集合,D={d1,2,…,m};γ和β分別為可學習參數縮放因子和平移因子;數值集合E={e1,2,…,m}為批歸一化后的輸出。
式(11)和式(12)分別計算D的均值和方差,式(13)和式(14)分別為歸一化和重構變換的過程。γ和β是可訓練參數,在基礎模型的訓練過程中,添加系數約束后每個卷積核對應的γ參數會呈現分化趨勢,重要卷積核所對應的γ參數會越大,不重要卷積核的γ參數會變小。BN 層進行批量歸一化后,γ小的通道對應的激活也會更小,修剪這樣的通道能夠在縮減網絡規模的同時盡可能地減小對網絡輸出的影響。
文獻[20]分析表明,BN 層的縮放因子γ與卷積層通道的重要性密切相關。根據此思想,結合互信息的特點,本文提出一種結合BN 層縮放因子與互信息的卷積核重要性衡量方法。對于某一卷積層的卷積核f,通過計算其與標簽的互信息及所對應的BN層縮放因子γ得出重要程度Im(f) :
根據卷積核的重要程度,可以對卷積層進行裁剪。本文提出的基于中間圖特征提取的卷積層雙標準剪枝算法描述如算法2 所示。對卷積神經網絡卷積核進行裁剪的具體過程如圖4 所示。

圖4 卷積核裁剪流程Fig.4 The clipping process of convolution kernel
算法2基于中間圖特征提取的卷積層雙標準剪枝算法
在CIFAR100 測試集上利用式(15)對已經訓練好的VGG16 卷積神經網絡模型的卷積層進行重要性計算,得到的結果如圖5 所示,圖中橫軸代表VGG16 模型的13 層卷積層,縱軸表示不同剪枝率下保留及裁減掉的節點分布,其中,越靠近圖像上方的卷積核重要程度越高。從圖5 可以看到,卷積核的重要性大體上隨著層次的加深呈遞減趨勢,處于網絡中間部分的卷積層的卷積核攜帶大量特征信息,而這也與經驗相符。將卷積核按照重要性進行全局排序,根據設定的卷積層剪枝率的大小,裁剪重要程度較小的卷積核,便可達到對卷積神經網絡卷積核進行裁剪的目的。

圖5 不同剪枝率下裁剪的節點個數Fig.5 Number of cut nodes under different pruning rates
1.2.2 帶有殘差結構的卷積網絡卷積核剪枝方法
與VGG 網絡不同,殘差網絡模型一般都含有殘差模塊(也就是shortcut),存在“分支”結構。以ResNet網絡模型為例,其兩種主要的殘差模塊如圖6 所示。

圖6 兩種殘差模塊對比Fig.6 Comparison of two residual modules
本文所提基于卷積核互信息與縮放因子的卷積核剪枝方法同樣可以應用于殘差網絡,但是需要進行以下兩點補充:
1)對于Conv1、Conv1_1 和Conv2_1 而 言,直接采用本文所提卷積核剪枝方法進行裁剪即可。
2)殘差結構存在權重依賴,對于兩種殘差結構而言,都要求分支1 的輸出通道和分支2 的輸出通道數量保持一致,因此,如果在同一層次內,對于Conv2、Conv1_2 和Conv2_2,在剪枝時,取兩者通道的并集作為整個模塊的保留通道數。以殘差結構2為例,分支1 的通道剪枝掩碼mask1={1,0,1,…,1,0},分支2 的通道剪枝掩碼mask2={0,1,1,…,1,0},其中,0 表示經過重要性計算后該通道應該舍棄,1 表示應當保留。因此,最終保留通道為mask1∪mask2={1,1,1,…,1,0},即只要兩個分支 中有一個分支認為該通道重要,裁剪便跳過該通道。
對于不同層之間,本文采用每層保留通道數中的最大值作為整個層次串聯模塊的保留通道數。
在CIFAR10 和CIFAR100 數據集上,對同時含有圖6 中兩種殘差結構的殘差網絡ResNet34 進行實驗,結果如表1 所示。表2 為采用本文所提針對卷積核的剪枝方法,對ResNet34 網絡在CIFAR10上進行60%剪枝前后ResNet34 網絡各卷積層的通道數變化情況,其中,含有“^”的數組表示圖5 中的殘差結構2,含有該符號的元素表示圖5 中的殘差結構2 的分支2 部分。從表2 可以看出,本文所提針對殘差網絡的基于互信息和BN 縮放因子的聯合剪枝算法,能夠在滿足殘差網絡權重依賴的情況下實現剪枝。除此之外,通過觀察ResNet34 剪枝前后保留通道數可以發現,相對于單分支網絡,殘差網絡由于加入了跨層連接,其剪枝掉的節點在各層的分布更加“均勻”。

表1 ResNet34 剪枝前后性能對比Table 1 Performance comparison of ResNet34 before and after pruning %

表2 ResNet34 剪枝前后通道數對比Table 2 Comparison of the number of channels on ResNet34 before and after pruning
本文以Ubuntu18.04 系統、英偉達2080Ti 顯卡和i7-6700HQ CPU 為實驗環境,將本文所提基于相似度和K-means++聚類的全連接層剪枝算法與基于中間圖特征提取的卷積核雙標準剪枝算法,分別在CIFAR10 和CIFAR100 兩個數據集上進行實驗。CIFAR10 是深度學習中經常使用的一種數據集,共包含60 000 張長、寬均為32 像素的彩色圖片,總共分為10 類,每類含有6 000 張圖片,訓練集總共為50 000 張圖片,測試集為10 000 張圖片。CIFAR100的圖片大小與CIFAR10 一致,測試集和訓練集的數目也相同,但是分類數量為100 類。
對于不同算法的對比實驗,在網絡結構上采用VGG16 卷積神經網絡與ResNet56 卷積神經網絡進行實驗。其中,VGG16 為傳統的卷積神經網絡,ResNet56為帶有殘差的卷積神經網絡。訓練基準網絡用于剪枝。對于VGG16,設定訓練輪次為160,初始學習率為0.1,在訓練輪次達到1/2 和3/4 時學習率分別變為原來的1/10。對于ResNet56,設置訓練輪次為200,其他設置與VGG16 相同。兩個網絡均使用SGD 優化方法,采用交叉熵函數計算損失。在CIFAR10 和CIFAR100 上分別按照上述參數訓練VGG16 和ResNet56 網絡得到基準網絡,然后在基準網絡的基礎上進行剪枝。
實驗中的對比算法包括:文獻[20]提出的PF 算法,即基于L1 范數的剪枝方法;文獻[14]提出的FPGM 算法,即基于幾何中位數的剪枝策略;文獻[27]提出的SFP 算法,即柔性剪枝策略;文獻[28]提出的Taylor 算法,即基于Taylor 展開的剪枝標準;文獻[29]提出的VCNNP 算法,即基于變分貝葉斯的剪枝策略;文獻[15]提出的CP 算法,即基于LASSO回歸和最小二乘法的剪枝策略。
在CIFAR10 數據集上不同剪枝算法的比較結果如表3 所示。從表3 可以看出:

表3 在CIFAR10 數據集上的實驗結果Table 3 Experimental results on CIFAR10 dataset %
1)對于單分支的卷積神經網絡VGG16,本文所提針對卷積層和全連接層的剪枝算法,在剪枝率為60%的情況下分別能夠剪掉網絡94.5%的參數量和64.4%的計算量,而準確率幾乎保持不變。相較PF等剪枝算法,本文算法因為分別針對卷積層和全連接層進行剪枝,在保持精度基本不變的情況下獲得了更大的參數量和FLOPs 的剪枝比例。
2)對于殘差網絡ResNet56,本文所提剪枝算法在剪枝率為40%時,能夠在保持精度僅下降0.19%的情況下裁減掉48.2%的參數量和46.7%的計算量,如果再犧牲不到1%的精度,能夠獲得60.7%的參數量裁剪率和57.6%和計算量裁剪率。隨著剪枝比例的提高,網絡保留的卷積核數量減少,但是帶來了精度上的損失。當剪枝率設置為60%時,能夠獲得參數量減少71.3%和計算量減少66.0%的網絡模型,但是準確率減少比例也達到了1.83%。
使用本文針對卷積層的聯合剪枝算法與針對全連接層的基于相似度和K-means++聚類的剪枝算法,在CIFAR100數據集上與其他算法進行對比實驗,結果如表4所示。從表4可以看出:VGG16網絡能夠在裁減掉95.0%參數量和51.2%計算量的情況下保持準確率基本不變;ResNet56在經過大幅裁剪后準確率僅下降很小幅度,在設置剪枝率為30%時,在準確率、參數量和FLOPs上基本達到了平衡。盡管本文算法相對于PF算法在準確率的減少比例上高了0.5%,但是獲得了更大的剪枝比例,在參數量和計算量的裁剪上比PF算法表現更好。當剪枝比例設置為40%時,本文算法能夠裁減掉41.3%的參數量和61.2%的FLOPs,準確率僅下降1.96%。

表4 在CIFAR100 數據集上的實驗結果Table 4 Experimental results on CIFAR100 dataset %
相對于其他剪枝算法,本文所提算法能夠在準確率下降幅度很小的情況下實現對參數量和計算量的大幅裁剪,這是因為本文采取的針對卷積層的聯合剪枝算法,結合了網絡的權重參數和網絡在實際數據集應用場景下的雙重表現。
在CIFAR10 數據集上,使用本文提出的剪枝算法在剪枝率為60%的情況下對VGG16 網絡進行剪枝,剪枝前后各個卷積層的通道數對比情況如圖7所示。在CIFAR10 數據集上,使用本文算法在40%剪枝率下對ResNet56 進行剪枝,剪枝前后各個卷積層模塊的通道數對比如表5 所示。

圖7 VGG16 剪枝前后通道數對比Fig.7 Comparison of the number of channels on VGG16 before and after pruning

表5 ResNet56 剪枝前后通道數對比Table 5 Comparison of the number of channels on ResNet56 before and after pruning
從圖7可以看出,對于VGG16卷積網絡而言,其淺層的卷積核蘊含了大量的特征信息,而深層的卷積核攜帶的信息較少,對其進行剪枝,不會對網絡結構和精度產生較大影響。表5的結果也證明了這一點,ResNet56網絡呈現出和VGG16 網絡一樣的特征,即淺層網絡剪枝比例較小,深層網絡剪枝比例較大。
針對現有卷積神經網絡參數量和計算量過大,較難在存儲能力和算力均有限的設備上進行部署的問題,本文提出一種新的卷積核重要性評估框架,使用卷積核輸出特征與樣本標簽之間的互信息以及BN 層的縮放系數來衡量卷積核的特征提取能力,更好地兼顧權重在實際應用數據集上的表現。在此基礎上,提出一種基于相似度和K-means++聚類的全連接層剪枝算法,在確定的剪枝率下完成對網絡模型的優化。實驗結果表明,該算法在對模型進行大幅剪枝的同時能夠保持較小的精度損失。下一步將分析剪枝后的權重優化問題并探索量化等網絡模型壓縮方法,在不損失準確率的情況下更大幅度地壓縮卷積神經網絡,使其能夠在端設備上進行部署。