鞏凱強,張春梅,曾光華
(北方民族大學計算機科學與工程學院,銀川 750021)
(?通信作者電子郵箱kq192011@sina.com)
近年來,卷積神經(jīng)網(wǎng)絡(Convolution Neural Network,CNN)為代表的神經(jīng)網(wǎng)絡在計算機視覺、自然語言處理等領域取得了突破性的進展。然而,隨著神經(jīng)網(wǎng)絡的識別精度不斷提升,網(wǎng)絡結構也越復雜,需要占用更多的計算和存儲資源,“深度結構”帶來高效性的同時,也增大了模型的參數(shù)量。卷積網(wǎng)絡模型的復雜度主要體現(xiàn)在兩個方面:一是卷積層包含了網(wǎng)絡90%的運算量;二是卷積層產(chǎn)生的龐大參數(shù)量,解決這兩個問題,具有重要的應用理論意義。現(xiàn)階段的神經(jīng)網(wǎng)絡模型訓練主要在服務器和圖形處理器(Graphics Processing Unit,GPU)端,對于一些應用場景已經(jīng)不能滿足實際的需求,如在自動駕駛、知識推理的落地,當前阻礙神經(jīng)網(wǎng)絡落地的原因主要是龐大的參數(shù)量難以在嵌入式端等資源受限的設備上部署,因此,模型壓縮以降低模型中冗余參數(shù)為目標,將有利于神經(jīng)網(wǎng)絡在嵌入式端的落地。
本文的主要工作如下:
1)研究了卷積神經(jīng)網(wǎng)絡的剪枝方法。以Lenet5 和更快的區(qū)域卷積神經(jīng)網(wǎng)絡(Faster Region with Convolutional Neural Network,F(xiàn)aster RCNN)為剪枝對象,分析不同均值和方差的濾波器提取的圖像特征,得出本文衡量卷積核參數(shù)重要性的評價標準,以此標準對卷積網(wǎng)絡進行剪枝。
2)研究了網(wǎng)絡模型加速方法。以Faster RCNN 為壓縮對象,將本文的剪枝評價標準結合張量分解的方法,在稀疏度較高的卷積核分解,并選擇一組最優(yōu)秩作為張量分解的重構誤差值對Faster RCNN 進行混合壓縮,壓縮后測試模型在樹莓派4B上的加速效果。
剪枝以神經(jīng)網(wǎng)絡的冗余參數(shù)剪除為目標,反向傳播(Back Propagation,BP)神經(jīng)網(wǎng)絡[1]流行之后,對神經(jīng)網(wǎng)絡的剪枝相應地發(fā)展起來[2]。Mozer 等[3]提出Skeletonization 算法對神經(jīng)網(wǎng)絡剪枝;LeCun 等[4]提出了OBD(Optimal Brain Damage),使用二階梯度衡量網(wǎng)絡模型參數(shù)的重要性,從而去除冗余參數(shù)。當卷積神經(jīng)網(wǎng)絡發(fā)展起來后,Jaderberg 等[5]使用低秩分解方法對卷積神經(jīng)網(wǎng)絡進行分解,實現(xiàn)了4.5 倍的加速效果而準確度誤差在1%內;Zhang 等[6]采用多次“剪枝-重訓練”的方式對AlexNet 進行網(wǎng)絡剪枝;Liu 等[7]采用稀疏結構對卷積網(wǎng)絡壓縮;Han 等[8]使用L1 范數(shù)和L2 范數(shù)作為模型參數(shù)的重要性評價;Lebedev 等[9]使用最小絕對值收斂和選擇算子(Least absolute shrinkage and selection operator,Lasso)對參數(shù)約束以產(chǎn)生稀疏性;Yuan 等[10]使用分組變量回歸對權值參數(shù)約束;Molchanov等[11]基于泰勒展開提出使用一階導數(shù)與權重的乘積絕對值作為參數(shù)重要性評價進行漸進式剪枝;Li等[12]提出量級裁剪方式,使用權重的絕對值和大小作為衡量參數(shù)重要性的評價方式進行多次剪枝;He 等[13]對通道剪枝(Channel Pruning)進行改進,使用強化學習得到各層剪枝率的最優(yōu)組合,然后對卷積核進行剪枝。
一個深度卷積網(wǎng)絡模型中,高層卷積層維度較大,其權值稀疏度較高,壓縮的直接方法是低秩表示原張量,低秩分解是通過減少卷積核參數(shù)達到壓縮模型的效果,其思想就是使用因子分解將一個張量用幾個參數(shù)較少的張量來近似表示。低秩分解按照對卷積核的分解維度的不同主要有兩種:空間維度的分解和通道維度的分解,前者將3×3的卷積核分解為3×1或者1×3;后者將輸入和輸出通道的維度分解(如512×512 分解為300×300)。Denton 等[14]用低秩分解的ZFNet網(wǎng)絡的卷積層進行加速,實現(xiàn)2.5倍的實際加速同時準確率下降在1%以內。Lebedev等[15]提出了簡單二步法加速卷積層:第一步,使用非線性最小二乘法來計算CP(Canonical Polyadic)分解,將卷積核張量分解為秩為1的張量形式;第二步,使用CP分解將具有小卷積核的四個卷積層替換原來的卷積層。Tai等[16]提出了一種計算低秩張量分解的新算法,用于去除卷積核中的冗余。
以往的剪枝算法,以權值大小來衡量卷積核的貢獻度,這容易裁剪重要的權值,如在人臉關鍵點檢測時,整張人臉的很多特征:眼睛的邊緣和顏色特征,即使權值很小但它提取的特征有利于分類與回歸。本文基于上述研究,從圖像濾波器的角度出發(fā),剪除每層冗余濾波器來減少模型中的冗余參數(shù)和計算量;同時探索剪枝結合張量分解對卷積神經(jīng)網(wǎng)絡壓縮。
在一個確定結構的深度卷積網(wǎng)絡模型中,大量的參數(shù)能夠提升網(wǎng)絡模型的分類能力,但同時也容易使網(wǎng)絡模型過擬合,反之過少的參數(shù)使網(wǎng)絡模型欠擬合,可見有效的壓縮參數(shù)量方法對網(wǎng)絡模型性能的重要性。
在傳統(tǒng)的圖像處理方法中,通過人工設定卷積核參數(shù)進行卷積運算來獲得圖像的特征表示,提取特征方式通過卷積操作如式(1):
如圖1(卷積核不同權值參數(shù)提取的圖像特征)可得出:Prewitt 算子(圖1(b))和Laplace 算子(圖1(c))可以獲得圖像的邊緣特征,CNN 學習到的卷積核存在與Prewitt 算子和Laplace 算子相似的特征提取作用;若對圖像進行均值濾波器(圖1(d))卷積操作,可以看出提取到圖像的基本輪廓信息,同樣CNN 中存在很多權值相近均值濾波器,這說明圖像集中在低頻和高頻特征可以用不同權值參數(shù)的濾波器提取,通過激活函數(shù)對提取的特征進行非線性變換,多個濾波器提取的非線性變換的向量最后組合成一幅圖像整體特征。
圖1 卷積核不同權值參數(shù)提取的圖像特征Fig.1 Image features extracted by different weight parameters of convolution kernel
基于上述分析,均值較大的卷積核提取到低頻信號,而方差較大的卷積核銳化圖像,提取到高頻信號,方差較大的提取算子更能提取出圖像的邊緣特征。而邊緣是構成圖像的最基本的特征,卷積核邊緣提取的效果直接影響圖像識別和理解。濾波器裁剪的模型壓縮即在裁剪過程中,最大限度地保留能夠提取到圖像輪廓信息和邊緣信息的濾波器,因此,本文認為卷積網(wǎng)絡中均值和方差較小的濾波器為冗余濾波器,采用聚類的方式將均值和方差較小的濾波器分離出進行裁剪。以訓練好的Faster RCNN 模型為例,該主干網(wǎng)絡中共有13 層卷積層:Conv1_1、Conv1_2、Conv2_1、Conv2_2、Conv3_1、Conv3_2、Conv3_3、Conv4_1、Conv4_2、Conv4_3、Conv5_1、Conv5_2、Conv5_3,以及在區(qū)域推薦網(wǎng)絡(Region Proposal Network,RPN)中的RPN_Conv、RPN_Cls 卷積層,分別計算每個卷積核參數(shù)的均值m 和方差s,設定卷積核C 形狀為(h,w,n,t),其均值和方差如式(2)和式(3):
Conv3_1層卷積核均值直方圖如圖2所示,方差直方圖如圖 3 所示,則 Conv3_1 層卷積核均值范圍為-0.000 5~-0.002,Conv3_1層卷積核方差范圍為0.015~0.025,該區(qū)間內的濾波器離散度相似,對其他層的卷積層參數(shù)提取后分布情況與之類似。
依據(jù)卷積核權值分布特征,通過距離相似性度量關系對均值和方差具有相似性的濾波器聚類,則Conv3_1 層卷積核統(tǒng)計量特征分類如圖4所示。
卷積核的貢獻度評估分類展出了卷積核參數(shù)的3 個特點:1)每層卷積核參數(shù)的均值和方差分布在不同區(qū)間,有些卷積核的均值很低,說明該卷積核學習的權值參數(shù)提取到圖像中的低頻信號部分或者背景部分,即存在冗余性參數(shù);2)卷積核參數(shù)類似正態(tài)分布,可以將每個卷積核的貢獻度按照相似性函數(shù)分為兩大類;3)均值較低和方差較大的卷積核說明其學習的權值參數(shù)波動大,提取到圖像的灰度值等變化幅度較大的高頻信號,該類卷積核的貢獻度較大,因此剪枝過程中考慮方差評價標準對卷積核的貢獻度度量也是較為重要。
圖2 Conv3_1層均值直方圖Fig.2 Mean histogram of Conv3_1 layer
圖3 Conv3_1層方差直方圖Fig.3 Variance histogram of Conv3_1 layer
圖4 卷積核統(tǒng)計量特征的貢獻度評估分類Fig.4 Contribution evaluation classification of convolution kernel statistics features
由于卷積神經(jīng)網(wǎng)絡規(guī)模逐漸向更深、更大層次發(fā)展,一般而言,網(wǎng)絡性能正相關于網(wǎng)絡深度和參數(shù)量,但過深的網(wǎng)絡和過多的參數(shù)會帶過擬合、梯度消失現(xiàn)象。一種改進現(xiàn)有網(wǎng)絡結構的手段是將卷積層等密集連接結構轉化為稀疏的連接形式,因為這可以降低計算冗余度,同時維持網(wǎng)絡的表達能力,其數(shù)學依據(jù)是一個大型稀疏矩陣分解為小的密集子矩陣,以此來近似稀疏結構,張量分解對于去除冗余信息和加速卷積計算是一種極為有效的方法,本文對深層次的卷積網(wǎng)絡模型,剪枝結合張量分解進行模型壓縮。向量稱為一維張量,矩陣稱為二維張量,以一個二維張量表示的圖像為例,低秩表示后重構圖像信息如圖5(奇異值數(shù)對圖像壓縮的失真對比)可得出:一張300×200 大小的圖像,奇異值Rank 分別設定為(20,40,150),Rank=40(圖5(c))前40 個奇異值就能大致還原圖像,這是因為在奇異值矩陣中奇異值減小得特別快,可以用最大的奇異值和對應的左右奇異向量來近似描述矩陣,因此對具有稀疏性的矩陣或者張量用其低秩近似表示可以有效壓縮參數(shù)量。
卷積神經(jīng)網(wǎng)絡中的卷積核為四維張量,表示為W ∈Rd×d×I×O,其中d、I、O分別表示卷積核的尺寸、輸入通道和輸出通道。常見的張量分解方法有CP分解和Tucker分解,Tucker 分解可將卷積核分解為一個核心張量與若干因子矩陣,是一種高階張量的主成分分析方法,設分解的秩(r1,r2,r3,r4),其表達形式如式(4):
圖5 奇異值數(shù)對圖像壓縮的失真對比Fig.5 Distortion comparison of singular value number to image compression
圖6 展示了將一個張量W ∈Rd×d×I×O,分解為和W'∈Rr4×d×d×I過程,W(圖6(a))為原始張量,參數(shù)量q=d2IO;P和W('圖6(b))為分解后張量,此時參數(shù)量對于大多數(shù)網(wǎng)絡Or4遠遠小于,并且秩越小,壓縮效果則越明顯。
圖6 張量分解過程示意圖Fig.6 Schematic diagram of tensor decomposition process
本章詳細描述均值方差剪枝結合張量分解的混合壓縮方法,壓縮方法流程如圖7 所示,主要包括剪枝流程和張量分解的低秩表示,剪枝方法剪除相對不重要的權值參數(shù)使得參數(shù)量減少,而張量分解將具有稀疏性的張量低秩表示,通常深層次的卷積神經(jīng)網(wǎng)絡,單獨的剪枝方法會帶來較大的精度損失,在網(wǎng)絡微調時需增加迭代次數(shù)使模型收斂,帶來重訓練時間長的問題,若在稀疏性較大的高維度卷積層低秩分解,就避免了剪枝方法剪除重要的權值帶來的精度損失,同時產(chǎn)生的不同尺寸稀疏級聯(lián)卷積層可以加速壓縮后的網(wǎng)絡模型收斂。
一個卷積核的均值和方差越小的條件下,說明該卷積核學習到背景信息或者低頻冗余信號,在保證網(wǎng)絡精度的前提下裁剪這些貢獻度較小的卷積核。
網(wǎng)絡訓練是優(yōu)化卷積核參數(shù)W 的過程,來減小定義的損失函數(shù)E(T|f,W),T 為訓練集,網(wǎng)絡裁剪時優(yōu)化參數(shù)子集Wp,其中貢獻度較大的卷積核Wp∈W,優(yōu)化裁剪的精度損失如式(5),剪枝流程如圖8所示。
圖7 剪枝結合張量分解的混合壓縮流程Fig.7 Flowchart of mixed compression of pruning and tensor decomposition
基于均值和方差的卷積核裁剪過程,其卷積層的具體剪枝流程如算法1所示。
算法1 剪枝算法。
輸入 訓練好的網(wǎng)絡模型,開始剪枝的卷積層,聚類終止閾值threshold。
輸出 壓縮后的網(wǎng)絡模型。
第1步 根據(jù)2.1節(jié)剪枝標準計算卷積層W的每個卷積核均值和方差,組成聚類數(shù)據(jù)樣本dataset{(m(1),s(1)),(m(2),s(2)),…,(m(n),s(n))},其中m(1),m(2),…,m(n)>T0。
第2步 優(yōu)化值E ≥threshold時
1)初始2 個聚類中心Zj(O),計算dataset 中的每個點與質心的距離Di,j,并劃分到距離較近的質心(C1、C2)所屬集合;
2)重新計算每個集合的質心qi;
4)如果E <threshold,返回C1和C2的索引值Index0 和Index1。
第3 步 比較C1和C2兩類卷積核均值的絕對值和即|S1|、|S2|,保留較大的一類卷積核。
第4 步 在較小的一類卷積核中找出方差大于閾值T1,則該濾波器保留。
第5 步 上一層剪枝后,重構下一層卷積核的連接通道,繼續(xù)用上述剪枝步驟,直到完成所有需剪枝的卷積層。
第6 步 對深度卷積網(wǎng)絡剪枝后進行微調。剪枝完成后,加載剪枝前訓練好的參數(shù)繼續(xù)訓練使網(wǎng)絡重新收斂。
第7步 輸出剪枝的網(wǎng)絡。
算法實現(xiàn)中,從裁剪的第一層卷積層開始,獨立地裁剪每一層濾波器。裁剪時本文沒有采用根據(jù)均值或方差閾值大小直接對模型進行裁剪,因為若在某一層濾波器的均值或方差值均小于閾值,則該層所有濾波器均會被裁剪而對模型產(chǎn)生結構性破壞,本文依據(jù)模型中各層卷積層濾波器學習到的數(shù)據(jù)固有屬性,通過聚類的方法對濾波器分類,這樣做的好處是剪枝中自動找出均值和方差的剪枝閾值,盡可能地將較小均值和方差冗余濾波器提取到圖像重要特征的濾波器分為幾個不同簇,之后保留冗余濾波器中方差大于T1的濾波器,該方法適用于卷積核均值和方差連續(xù)分布在不同區(qū)間,采用類聚方式找出冗余濾波器的分布區(qū)間從而裁剪。
圖8 卷積核裁剪流程Fig.8 Pruning process of convolution kernel
數(shù)學上一個矩陣的奇異值分解是唯一的,從而可以將一個矩陣運算稀疏化,而一個四階張量分解是一個非確定性多項式(Nondeterministic Polynomially,NP)問題,分解結果存在多樣性,目前可行的分解方法為高階正交迭代算法。對于3×3 或者5×5 大小的卷積核,其分解因子矩陣為單位陣,假設待分解張量W(h,w,s,t),卷積核分解的正交迭代步驟如下:
1)確定壓縮張量輸入和輸出通道方向的壓縮秩(r3,r4)。
2)分解輸入和輸出通道方向的因子矩陣A1、A2,其中A1∈Rs×r3,初始化W(1)為展開的前r3個主奇異值對應的左奇異向量組;A2∈Rr4×t,初始化W(2)為展開的前r4個主奇異值對應的左奇異向量組。
3)求解分解的核心張量g,如式(6):
5)得到的核心張量g 及因子矩陣構造相似矩陣Rec(h,w,s,t),然后計算構造誤差如式(7):
6)重復過程3)~5)步驟,直到構造誤差小于閾值10-5。
7)算法返回g(h,w,s,t),U(1,1,s,r3),V(1,1,r4,t),其中g、U、V張量分別作為分解后的第2、1、3個卷積核的權值。
為了驗證上述方法,本文以Lenet5 和VGG16 基礎的Faster RCNN 為研究對象,Lenet5 網(wǎng)絡進行剪枝,剪枝流程如前文所述?!凹糁?張量分解”對深度卷積網(wǎng)絡Faster RCNN 壓縮,訓練集/測試集采用Pascal VOC 數(shù)據(jù)集,實驗環(huán)境:Windows 10 操作系統(tǒng)、8 GB 內存、網(wǎng)絡模型訓練框架tensorflow和嵌入式系統(tǒng)樹莓派4B。
對Lenet5 中的兩層卷積層剪枝,然后測試其準確度在Minst 數(shù)據(jù)集變化,剪枝前后的卷積核形狀和裁剪率如表1所示。
本文中的剪枝方法和主流的剪枝后準確度對比如表2所示。
為了驗證本文中均值和方差的剪枝評價標準,剪枝后的Lenet5 和文獻[12]的剪枝標準在Minst 數(shù)據(jù)集上特征圖可視化,如圖9(不同剪枝標準剪枝后特征)可得出:加入方差剪枝標準(圖9(c))的壓縮方法,剪枝后更能夠準確提取到圖像邊緣、輪廓等特征。
表1 Lenet5剪枝前后卷積核形狀Tab.1 Shape of convolution kernel before and after pruning of Lenet5
表2 所提方法與其他方法的剪枝結果對比 單位:%Tab.2 Pruning result comparison of the proposed method with other pruning methods unit:%
圖9 不同剪枝標準剪枝后Minst數(shù)據(jù)集的特征圖Fig.9 Feature map of Minst dataset after pruning with different pruning standards
Faster RCNN 算法是目標檢測領域領先的算法之一,該算法框架由2 個部分組成:特征提取網(wǎng)絡和區(qū)域生成網(wǎng)絡,本節(jié)對VGG16 為基礎的特征提取網(wǎng)絡和區(qū)域生成網(wǎng)絡的卷積層剪枝結合張量分解壓縮,來驗證這種方法的壓縮效果。Conv4層前網(wǎng)絡的卷積層輸出維度較低,輸出通道的稀疏性較低,因此采用2.1 節(jié)剪枝標準剪除冗余濾波器;而在維度較高的Conv5 層的輸入輸出通道均為512,其權值分布如圖10 所示,縱坐標表示在不同迭代次數(shù)下權值大小,權值參數(shù)范圍為-0.01~0.01,如此稀疏的數(shù)據(jù)分布適合低秩壓縮。
圖10 Faster RCNN中Conv5_1權值分布Fig.10 Weight distribution of Conv5_1 in Faster RCNN
在tensorboard 中可視化本文的剪枝標準結合張量分解的損失值,并比較相同壓縮率下直接用權值閾值方式的損失值,在高維卷積層進行張量分解的剪枝迭代30 000 步收斂于0.6附近,而權值閾值的剪枝方式需要迭代40 000~50 000 步才能達到收斂。這是因為張量分解將稠密的卷積層分解為幾個稀疏結構的卷積層,可以降低計算復雜度和參數(shù)量,同時將一層變?yōu)槎鄬拥牟呗?,通過選擇一組秩得到較小的重構誤差,近似出原卷積核參數(shù),在fine-tune 時可以較快地達到收斂狀態(tài),對于更深層次的卷積網(wǎng)絡而言,結合張量分解的剪枝可以加快網(wǎng)絡收斂,有效縮短了剪枝后的網(wǎng)絡重訓練時間。
混合壓縮后Faster RCNN 卷積核參數(shù)量如表3 所示,Conv4_3~Conv5_2 低秩分解時秩設定為(128,128),網(wǎng)絡層的參數(shù)量為每個維度值之積,計算得出混合壓縮后所有卷積層的參數(shù)量大小為31.3 MB,網(wǎng)絡卷積層參數(shù)量達到了54%的壓縮率。
表3 混合壓縮后的Faster RCNN卷積核參數(shù)量Tab.3 Convolution kernel parameters of Faster RCNN after mixed compression
低秩分解后網(wǎng)絡的前向計算加速如表4所示,以Conv5_1層為例,實驗結果表明,秩值?。?28,128)或者(256,256)基本能重構待分解的張量。
表4 張量分解秩值對卷積層前向計算加速效果Tab.4 Comparison of forward calculation acceleration effect of convolutional layer with tensor decomposition of different rank
壓縮前后Faster RCNN 在PASCAL VOC 的P-R(Precision-Recall)曲線以及AP(Average Precision)如圖11所示。
圖11 壓縮前后Faster RCNN的PR曲線Fig.11 PR curve of Faster RCNN before and after compression
將提出的“均值、方差剪枝+張量分解方法”與其他裁剪算法下的Faster RCNN的AP值進行比較,具體結果如表5所示。
1)基于張量分解的壓縮算法[18]:低維卷積層到高維卷積層均用奇異值分解(Singular Value Decomposition,SVD)。
2)隨機裁剪(Random Pruning)[19]:對于每一個卷積層,隨機裁剪一定量的濾波器來對模型進行壓縮和加速。
3)卷積層先基于Lasso 回歸進行網(wǎng)絡剪枝[20],再進行SVD。
表5 不同壓縮方法下的Faster RCNNTab.5 Faster RCNN under different compression methods
在對比實驗中,以刪除冗余參數(shù)作為有效的壓縮神經(jīng)網(wǎng)絡手段[21],對權值具有稀疏性的Faster RCNN 為壓縮模型,分別用3 種策略進行對比壓縮后的模型效果:文獻[18]中所有卷積層進行張量分解,在稀疏度不大的低維卷積核分解誤差累積到高維卷積核從而影響精確度;文獻[19]隨機方式裁剪濾波器,裁剪率越大,貢獻度較大的濾波器被裁剪的概率也越大;文獻[20]是L1 范數(shù)懲罰權值小的方式,剪枝中也會裁剪離散度較大卷積核,采用均值和方差的權值貢獻度評價方式能夠保留映射邊緣、輪廓特征的卷積核,在具有稀疏性的高維度卷積層只需對訓練好的模型奇異值分解,達到網(wǎng)絡模型加速的目的;本文從不同的角度壓縮模型,提出的均值和方差剪枝標準結合張量分解的方法優(yōu)于其他方法,由于該方法的精確度變化和模型加速取決于分解時的秩,因此需要多組秩值確定壓縮模型的最優(yōu)秩。
本文針對深度卷積神經(jīng)網(wǎng)絡擁有巨大的參數(shù)量和計算量,研究了基于均值和方差剪枝+張量分解的壓縮方法,為了驗證算法有效減少參數(shù)量和計算量,分別在Lenet5 和Faster RCNN 進行了剪枝,明顯降低了模型的存儲需求,使得模型在損失精度極少的情況下,運行效率和存儲效率同時提升。未來工作是進一步探索表征卷積核參數(shù)重要性的量,利用張量稀疏性,找出卷積層最優(yōu)秩占比算法,使得壓縮后模型精確度和加速效果達到最優(yōu)。