張瑞琰 安軍社 姜秀杰
1(中國(guó)科學(xué)院國(guó)家空間科學(xué)中心復(fù)雜航天系統(tǒng)電子信息技術(shù)重點(diǎn)實(shí)驗(yàn)室 北京 100190) 2(中國(guó)科學(xué)院大學(xué) 北京 100049)
深度卷積神經(jīng)網(wǎng)絡(luò)(DCNN)在圖像分類(lèi)[1]、圖像檢測(cè)[2]和視頻跟蹤[3]等領(lǐng)域有著廣泛應(yīng)用。然而參數(shù)冗余和計(jì)算量大的問(wèn)題限制了其在嵌入式設(shè)備的部署。比如一幅227×227的圖像在AlexNet網(wǎng)絡(luò)中訓(xùn)練時(shí),參數(shù)量可達(dá)122 MB,MFLOPS高達(dá)724,其中高參數(shù)多集中于全連接層,而高計(jì)算量主要集中于卷積層。為解決高參數(shù)的問(wèn)題,多采用卷積層替代全連接層的方法,因此卷積層的優(yōu)化成為網(wǎng)絡(luò)壓縮關(guān)注的熱點(diǎn),這引發(fā)了本文對(duì)算法優(yōu)化的探究。
剪枝[4]作為一種簡(jiǎn)便的網(wǎng)絡(luò)壓縮的有效方法,常用在目標(biāo)檢測(cè)[5]和機(jī)器翻譯[6]等領(lǐng)域。一個(gè)標(biāo)準(zhǔn)化剪枝流程分為:預(yù)訓(xùn)練、剪枝和微調(diào),如圖1(a)所示。預(yù)訓(xùn)練即訓(xùn)練一個(gè)基準(zhǔn)網(wǎng)絡(luò),該網(wǎng)絡(luò)往往是參數(shù)量冗余的復(fù)雜網(wǎng)絡(luò)。網(wǎng)絡(luò)訓(xùn)練完成后,其參數(shù)按照規(guī)定的某個(gè)標(biāo)準(zhǔn)進(jìn)行排序,以判斷這些參數(shù)的重要性,將其中不重要的參數(shù)進(jìn)行剪枝處理,得到精簡(jiǎn)化模型,這一過(guò)程即為剪枝。而此時(shí)模型精度會(huì)有所下降,需要對(duì)模型再進(jìn)行訓(xùn)練達(dá)到要求的精度,稱(chēng)作微調(diào)。該流程中,多次訓(xùn)練十分消耗資源,因此本文更傾向于在預(yù)訓(xùn)練之前實(shí)行一次性剪枝[7],獲取精簡(jiǎn)模型,下一步只需以正常步驟訓(xùn)練精簡(jiǎn)模型即可。如此可節(jié)省大量的計(jì)算和存儲(chǔ)資源,同時(shí)也可以加快前向推斷速度,該流程如圖1(b)所示。
圖1 標(biāo)準(zhǔn)化剪枝流程和初始化剪枝流程
傳統(tǒng)的剪枝往往是數(shù)據(jù)驅(qū)動(dòng)剪枝,根據(jù)訓(xùn)練好的參數(shù)數(shù)值來(lái)進(jìn)行排序。而文獻(xiàn)[8]指出結(jié)構(gòu)化剪枝[9]的意義在于獲得一個(gè)優(yōu)化模型架構(gòu),重要的是結(jié)構(gòu)而非權(quán)重的值。因此,本文試圖尋找一種適合結(jié)構(gòu)化剪枝的方法,得到模型的精簡(jiǎn)結(jié)構(gòu)。同時(shí)考慮到精簡(jiǎn)模型的結(jié)構(gòu)往往是手工設(shè)計(jì)好的,譬如PFEC[9]利用敏感度分析的方法確定基準(zhǔn)網(wǎng)絡(luò)每一層的剪枝通道數(shù),其中敏感度分析是控制其他層不變,改變某一層的輸出通道數(shù)來(lái)訓(xùn)練,對(duì)于一次性全局剪枝而言,該方法并不完全適用;SFP[10]將卷積層按照相同比例進(jìn)行“裁剪”(這里的“裁剪”只是將其置0)?;诖?,本文認(rèn)為以相同比例裁剪網(wǎng)絡(luò)有利于保存網(wǎng)絡(luò)的層間結(jié)構(gòu),輔以某種全局的權(quán)重重要性標(biāo)準(zhǔn),可以一次性得到更好的精簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu)??紤]到權(quán)重的連接敏感度常用來(lái)判斷某個(gè)權(quán)重是否重要,因此可將其擴(kuò)展為整個(gè)濾波器的重要性判斷標(biāo)準(zhǔn)。
綜上,本文提出了一種初始化全局剪枝的方法,綜合考慮層間結(jié)構(gòu)和權(quán)重連接敏感度。剪枝基于濾波器的粗粒度方式,產(chǎn)生了一個(gè)緊湊的精簡(jiǎn)模型,便于后續(xù)訓(xùn)練和部署。
網(wǎng)絡(luò)壓縮已經(jīng)是神經(jīng)網(wǎng)絡(luò)研究中越來(lái)越重要的課題之一。人們?yōu)榱藢⑷斯ぶ悄墚a(chǎn)品(算法)落地化而不得不考慮實(shí)際需求,如計(jì)算量、資源分配、存儲(chǔ)等等。而在網(wǎng)絡(luò)壓縮中,較熱門(mén)的四個(gè)分支為低秩分解、量化、剪枝和輕型網(wǎng)絡(luò)。
低秩分解[11-12]是將權(quán)重矩陣分解為多個(gè)小矩陣,如奇異值分解(SVD)和CP分解等;量化主要是對(duì)權(quán)重和特征圖做量化處理,極限量化方式有二值化[13-14]和低比特[15]量化等,其缺點(diǎn)是需要配套的專(zhuān)用硬件來(lái)進(jìn)行卷積運(yùn)算;輕型網(wǎng)絡(luò)[16-17]即利用小卷積、分組卷積或殘差網(wǎng)絡(luò)的方式設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu),可大大減少運(yùn)算量,其缺點(diǎn)是會(huì)引入新型處理層。
剪枝即為剔除網(wǎng)絡(luò)中的冗余連接,原理來(lái)源于哺乳動(dòng)物的發(fā)育過(guò)程,幼兒時(shí)期神經(jīng)元個(gè)數(shù)達(dá)到巔峰,個(gè)體成熟之后不重要的神經(jīng)元逐漸退化掉。剪枝從方法上分類(lèi),可分為結(jié)構(gòu)化剪枝和非結(jié)構(gòu)化剪枝[18]。其中非結(jié)構(gòu)化剪枝是裁剪掉權(quán)重的連接,形成稀疏化的卷積核,理論上可以提高運(yùn)算速度,減少存儲(chǔ)空間,但需要配套的稀疏運(yùn)算庫(kù)才能實(shí)際加速。結(jié)構(gòu)化剪枝則不同,它將卷積的參數(shù)矩陣以輸出通道為基準(zhǔn)劃分,每個(gè)輸出通道代表的三維參數(shù)矩陣看作一個(gè)濾波器(下文統(tǒng)稱(chēng)filter)。裁剪掉的是若干個(gè)filter,因此不需要對(duì)現(xiàn)有的軟件庫(kù)和算法框架修改,可直接運(yùn)行剪枝算法,本文主要討論結(jié)構(gòu)化剪枝。
剪枝從裁剪過(guò)程上分類(lèi),可分為初始化剪枝、運(yùn)行過(guò)程中剪枝和訓(xùn)練結(jié)束后剪枝。初始化剪枝是在訓(xùn)練的開(kāi)始階段,根據(jù)數(shù)據(jù)集和未剪枝的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)進(jìn)行預(yù)先剪枝,多采用自動(dòng)機(jī)器學(xué)習(xí)方法(AutoML),如強(qiáng)化學(xué)習(xí)[19]和元學(xué)習(xí)[20]等方法;運(yùn)行過(guò)程中剪枝是動(dòng)態(tài)剪枝過(guò)程[21],在訓(xùn)練過(guò)程中隨時(shí)剔除或添加所需結(jié)構(gòu),缺點(diǎn)則是運(yùn)行中的運(yùn)算量和存儲(chǔ)資源比較大;訓(xùn)練結(jié)束后剪枝對(duì)訓(xùn)練完的參數(shù)選擇重要的部分留下,再經(jīng)過(guò)微調(diào)達(dá)到剪枝前的準(zhǔn)確度,現(xiàn)在很多較為成熟的方案便是訓(xùn)練結(jié)束后剪枝,采用l1[9]、l2[10]范數(shù)剪枝或通道相似度[20]方式剪枝。
本文的思路和貢獻(xiàn)如下:為尋求對(duì)數(shù)據(jù)集來(lái)說(shuō)冗余盡可能少的網(wǎng)絡(luò)結(jié)構(gòu),在數(shù)值敏感和結(jié)構(gòu)敏感兩個(gè)方面對(duì)網(wǎng)絡(luò)進(jìn)行裁剪。數(shù)值敏感是指根據(jù)權(quán)重值在方差縮放初始化時(shí)對(duì)損失函數(shù)的影響(即連接敏感度)的方法[22],判斷出filter中反映前景信息較為突出的特征圖,裁剪掉剩余的filter;結(jié)構(gòu)敏感是指以每層特征圖通道數(shù)的一定比例為基準(zhǔn)進(jìn)行層間結(jié)構(gòu)微調(diào)。以通道裁剪率為裁剪條件,提出超參數(shù)α以平衡數(shù)值敏感和結(jié)構(gòu)敏感的關(guān)系,最終得到網(wǎng)絡(luò)的精簡(jiǎn)結(jié)構(gòu)。使用初始化剪枝的方式,實(shí)現(xiàn)一次性全局裁剪。在訓(xùn)練和部署前向推斷時(shí),均可減輕計(jì)算量和存儲(chǔ)量,同時(shí)模型分類(lèi)的準(zhǔn)確度基本保持不變。
對(duì)于一定數(shù)量(batch)大小的輸入特征圖而言,設(shè)其大小為N×C×H×W,其中:N為batch的數(shù)量;C為通道數(shù);H與W為圖像的高和寬,為空間信息。在卷積層中,每層的卷積核大小為Cout×Cin×K×K,Cout為輸出圖像通道數(shù),Cin為輸入通道數(shù),K為卷積核的尺寸,常用大小為3和1,其中Cin×K×K稱(chēng)為一個(gè)filter,每個(gè)卷積層中有Cout個(gè)filter。
結(jié)構(gòu)化剪枝是剪除每個(gè)卷積層的若干個(gè)filter,該過(guò)程如圖2所示。淺色部分為裁剪掉的通道數(shù),深色部分為實(shí)際參與運(yùn)算的部分。由于上層剪枝的緣故,輸入特征圖部分通道被裁剪,因此卷積層的卷積核對(duì)應(yīng)的輸入通道數(shù)也被裁剪,再加上本卷積層自身有部分filter被剪掉,所以輸入特征圖的對(duì)應(yīng)通道數(shù)也被修剪。
圖2 結(jié)構(gòu)化剪枝流程
設(shè)剪枝率為r,假設(shè)每層均裁剪同樣的比例,則對(duì)于網(wǎng)絡(luò)中第i層,裁剪完后的filter數(shù)量為Cout×(1-r),可得到輸出圖像尺度為N×Cout×(1-r)×H×W。那么對(duì)于網(wǎng)絡(luò)中第i+1層,卷積核的大小為Cout×(1-r)×Cin×(1-r)×K×K。這種情況下,設(shè)兩層的輸入圖像空間信息不變,則結(jié)構(gòu)化剪枝的參數(shù)裁剪率Rparameter和運(yùn)算量裁剪率Rflop。此時(shí)可保證參數(shù)量和運(yùn)算量裁剪比例的一致。
(1-r)2
(1)
(1-r)2
(2)
特別地,對(duì)于ResNet殘差網(wǎng)絡(luò),因?yàn)橛衧hortcut層的存在,需要對(duì)剪枝的過(guò)程稍作修改。這里只考慮常規(guī)的兩層Residual block模塊,如圖3所示。引入make_layer層,代表輸出通道數(shù)相同的若干個(gè)相鄰的Residual block模塊的集合。
圖3 ResNet中Residual block模塊
其裁剪分為兩個(gè)并行過(guò)程,即weight layer 1剪枝和weight layer 2剪枝。因?yàn)榧糁χ话敵鐾ǖ罃?shù)的修剪,因此weight layer 1剪枝只涉及該模塊內(nèi)部改變,而不影響整個(gè)模塊的輸入輸出。而weight layer 2剪枝時(shí),其filter個(gè)數(shù)需要和上一個(gè)Residual block模塊的weight layer 2模塊的filter個(gè)數(shù)相同,因此需要同時(shí)考慮make_layer層中的所有weight layer 2模塊,為它們求取一個(gè)共同的filter個(gè)數(shù)。
這里均只考慮卷積層。令L為損失函數(shù),l為層數(shù),X為輸入圖像,Y為分類(lèi)標(biāo)簽,W為原始權(quán)重,其中filter的個(gè)數(shù)為Cl(j∈Cl),W*為剪枝之后的權(quán)重,剪枝后的filter的個(gè)數(shù)為Cn(Cn≤Cl),g為激活函數(shù),S為重要性判斷函數(shù),則優(yōu)化問(wèn)題為:
minL(Y,g(X;W*{0,1,…,Cn}))s.t.W*=S(W{0,1,…,j,…,Cl})
(3)
在第t次迭代更新時(shí),第l層第i個(gè)權(quán)重的更新方式為:
(4)
(5)
可視化其特征圖也可以看出該統(tǒng)計(jì)意義的作用。在VGG16網(wǎng)絡(luò)初始化階段篩選出連接敏感度高的若干個(gè)filter,保持卷積層的參數(shù)不變,將已訓(xùn)練好的網(wǎng)絡(luò)的第一層卷積層的特征圖可視化,如圖4所示。虛線左邊為剪掉的filter,右邊為連接敏感度高的filter。通過(guò)對(duì)比可得出保存的通道具備注意力(較亮的區(qū)域)集中在前景、提取的特征更豐富等特點(diǎn),更便于后續(xù)的高維度特征分辨。
圖4 第一層卷積層的特征圖可視化
考慮到不同層的梯度值有層間差異,與初始化的標(biāo)準(zhǔn)差值以及每層的梯度量級(jí)遞減均有關(guān)。對(duì)VGG網(wǎng)絡(luò),本文考慮實(shí)行層間的歸一化處理,該處理代表了層級(jí)分布的凸顯性,如式(6)所示。而對(duì)于ResNet網(wǎng)絡(luò), shortcut層避免了梯度消失,可按需采用歸一化處理。
(6)
參照SPF的按比例剪枝的方法,既可以預(yù)防凸顯性剪枝造成的通道數(shù)為0的情況,也可以起到層間調(diào)節(jié)的輔助作用,對(duì)維持原始網(wǎng)絡(luò)結(jié)構(gòu)有很大幫助。該特性記作結(jié)構(gòu)維持特性,公式如下:
Struc(Fl)=Cl×r
(7)
綜合這兩個(gè)方面,本文給出最終剪枝的裁剪計(jì)量標(biāo)準(zhǔn)如下:
S(Fl,j)=α×Promi(Fl,j)+(1-α)×Struc(Fl)
(8)
式中:Promi(Fl,j)為數(shù)值參數(shù),Struc(Fl)為結(jié)構(gòu)參數(shù),α為二者占比的調(diào)節(jié)超參數(shù)。
因?yàn)閿?shù)據(jù)集數(shù)量的龐大,如今的訓(xùn)練均采用小批量數(shù)據(jù)集batch運(yùn)算的方法。而用在本算法中,如果只訓(xùn)練一次(不更新各參數(shù))便得出結(jié)果,會(huì)對(duì)結(jié)果造成偏差。因此,本文采用多次訓(xùn)練取平均的方法,且每個(gè)batch的構(gòu)成都由每個(gè)類(lèi)別內(nèi)隨機(jī)采樣的數(shù)據(jù)組合得出。
本文方法簡(jiǎn)單易操作,其基本流程為:先采用如算法1所示的步驟訓(xùn)練出精簡(jiǎn)模型所需要的網(wǎng)絡(luò)結(jié)構(gòu),按照這種結(jié)構(gòu)對(duì)原始網(wǎng)絡(luò)稍作改變,之后采用與原始訓(xùn)練方式相同的步驟訓(xùn)練,即初始化參數(shù),確定學(xué)習(xí)率、動(dòng)量和迭代次數(shù)等超參數(shù),開(kāi)始訓(xùn)練直至網(wǎng)絡(luò)收斂。
算法1獲取精簡(jiǎn)網(wǎng)絡(luò)結(jié)構(gòu)的剪枝算法
輸入:訓(xùn)練數(shù)據(jù)X,裁剪率P,卷積層層數(shù)l,模型參數(shù)W={W(j),0≤j≤l},訓(xùn)練次數(shù)epochmax。
輸出:精簡(jiǎn)網(wǎng)絡(luò)的cfg和cfg_con(若存在)。
初始化模型參數(shù)W,據(jù)P確定保留的filter總數(shù)目
for epoch in range(0,epochmax):
根據(jù)訓(xùn)練數(shù)據(jù)X獲取模型參數(shù)W的梯度值
forjin range(0,l):
據(jù)式(5)記錄每個(gè)filter梯度的l1范數(shù)
據(jù)式(6)做歸一化處理
記錄本卷積層的初始filter數(shù)目
end
據(jù)式(8)計(jì)算后排序獲取cfg和cfg_con(若存在)
更新cfg和cfg_con(若存在)
不更新優(yōu)化器和模型參數(shù)
end
算法1的目的是得到網(wǎng)絡(luò)的各卷積層filter的個(gè)數(shù),用列表cfg表示。對(duì)于ResNet,還需要確定weight layer 2剪枝的結(jié)果,用列表cfg_con表示。首先確定訓(xùn)練次數(shù)epochmax;之后進(jìn)行各filter的敏感度排序,確定精簡(jiǎn)模型的網(wǎng)絡(luò)結(jié)構(gòu),即可得到cfg和cfg_con。
本文在兩個(gè)數(shù)據(jù)集上驗(yàn)證了該方法的有效性,實(shí)驗(yàn)采用Pytorch架構(gòu),使用公開(kāi)的訓(xùn)練數(shù)據(jù)集來(lái)訓(xùn)練。
3.1.1CIFAR-10
CIFAR-10數(shù)據(jù)集由10個(gè)類(lèi)的60 000個(gè)32×32彩色圖像組成,每個(gè)類(lèi)有6 000幅圖像,共50 000幅訓(xùn)練圖像和10 000幅測(cè)試圖像。數(shù)據(jù)集分為五個(gè)訓(xùn)練批次和一個(gè)測(cè)試批次,每個(gè)批次有10 000幅圖像。測(cè)試批次包含來(lái)自每個(gè)類(lèi)別的恰好1 000幅隨機(jī)選擇的圖像。
3.1.2IMAGENET-300
IMAGENET數(shù)據(jù)集包含120萬(wàn)幅訓(xùn)練圖片和5萬(wàn)幅驗(yàn)證圖片,共有1 000個(gè)類(lèi)。因?yàn)橛布南拗?,本文只?xùn)練其中隨機(jī)挑選的300類(lèi)來(lái)進(jìn)行實(shí)驗(yàn)說(shuō)明,并計(jì)算這300類(lèi)的均值和標(biāo)準(zhǔn)差來(lái)進(jìn)行預(yù)訓(xùn)練處理。
3.2.1CIFAR對(duì)應(yīng)網(wǎng)絡(luò)
本文主要采用的基準(zhǔn)網(wǎng)絡(luò)架構(gòu)為簡(jiǎn)化版的VGG16和ResNet系列網(wǎng)絡(luò),這個(gè)簡(jiǎn)化版本是正常版本的一種變異形式[9]。其中,簡(jiǎn)化版VGG16最后只采用了兩層全連接層,因?yàn)檩斎雸D像的空間尺寸較小,因此最后的平均池化層參數(shù)不是7,而是2。對(duì)于ResNet而言,shortcut層會(huì)涉及到卷積步長(zhǎng)大于1或輸入輸出通道不匹配的問(wèn)題,標(biāo)準(zhǔn)的ResNet使用的1×1的卷積核來(lái)做變換,這里簡(jiǎn)化版的ResNet只是通過(guò)補(bǔ)0或置0來(lái)使輸出通道適應(yīng)輸入通道,不引入多余參數(shù)和計(jì)算量。同時(shí)只有3個(gè)make_layer層,即每個(gè)殘差模塊的輸出通道數(shù)都一樣,每個(gè)make_layer層的第一個(gè)殘差網(wǎng)絡(luò)可能會(huì)進(jìn)行通道變換或者特征圖尺度放縮。綜上,這些簡(jiǎn)化版本更適合于小尺寸的輸入圖像。
3.2.2IMAGENET對(duì)應(yīng)網(wǎng)絡(luò)
IMAGENET數(shù)據(jù)集的圖像較大,不適宜再采用簡(jiǎn)化版的網(wǎng)絡(luò),因此直接采用標(biāo)準(zhǔn)化的ResNet網(wǎng)絡(luò)。采用上述的Residual block兩部分剪枝, shortcut層沿用標(biāo)準(zhǔn)化的1×1卷積核運(yùn)算。
CIFAR數(shù)據(jù)集中,采用簡(jiǎn)化版VGG16、ResNet20、ResNet56和ResNet110網(wǎng)絡(luò),優(yōu)化器為SGD,初始學(xué)習(xí)率0.1,均在總迭代數(shù)的0.5和0.75處進(jìn)行學(xué)習(xí)率縮小十倍的操作,動(dòng)量值設(shè)置為0.9,權(quán)重衰減率設(shè)置為1e-4。CIFAR10數(shù)據(jù)集的預(yù)處理包括周?chē)?像素外填充padding,隨機(jī)裁剪之后隨機(jī)水平翻轉(zhuǎn),其余設(shè)置均未改變。batch的數(shù)量取128,訓(xùn)練硬件為GPU GTX 1080。
IMAGENET數(shù)據(jù)集中,采用ResNet18和ResNet34網(wǎng)絡(luò),分別在總迭代數(shù)的1/3處學(xué)習(xí)率變?yōu)橹暗?.1。其余設(shè)置與CIFAR10數(shù)據(jù)集相同。
為保證訓(xùn)練結(jié)果的公平性,未剪枝模型的計(jì)算量應(yīng)保證和精簡(jiǎn)網(wǎng)絡(luò)的計(jì)算量保持一致[8]:
epochbase×FLOPbase=epochprune×FLOPprune
(9)
式中:epoch代表訓(xùn)練迭代次數(shù);FLOP代表模型計(jì)算量;下標(biāo)base和prune分別代表基準(zhǔn)網(wǎng)絡(luò)和裁剪后的網(wǎng)絡(luò)。
3.4.1總體實(shí)驗(yàn)結(jié)果
在數(shù)據(jù)集CIFAR10上,驗(yàn)證集結(jié)果如表1所示。采用的網(wǎng)絡(luò)框架為簡(jiǎn)化版VGG16、ResNet20、ResNet56和ResNet110。表格括號(hào)內(nèi)前者為通道裁剪率,后者為超參數(shù)α的取值,ACC為訓(xùn)練的分類(lèi)準(zhǔn)確度,F(xiàn)LOPS為前向訓(xùn)練時(shí)的計(jì)算量,Para為參數(shù)量,Pruned為計(jì)算量裁剪和參數(shù)量裁剪的百分比。
表1 CIFAR驗(yàn)證集結(jié)果
在VGG16基準(zhǔn)網(wǎng)絡(luò)下,baseline為不裁剪的訓(xùn)練結(jié)果??紤]到VGG網(wǎng)絡(luò)較為冗余,本文將通道裁剪率設(shè)置為60%和70%,可以看出分類(lèi)準(zhǔn)確度與PFEC和baseline結(jié)果相比無(wú)降低,且部分略有提升,同時(shí)實(shí)驗(yàn)的參數(shù)量裁剪率在80%以上,計(jì)算量裁剪率在40%左右。在ResNet基準(zhǔn)網(wǎng)絡(luò)下,在分類(lèi)準(zhǔn)確度基本維持不變時(shí),本文實(shí)驗(yàn)的計(jì)算量裁剪率和參數(shù)裁剪率均比對(duì)照組高。特別地,ResNet110網(wǎng)絡(luò)在計(jì)算量及參數(shù)量均裁剪掉50%以上時(shí),模型分類(lèi)的準(zhǔn)確度依然維持較高水平。
在數(shù)據(jù)集IMAGENET300上,驗(yàn)證集結(jié)果如表2所示,采用的網(wǎng)絡(luò)框架為Resnet18和Resnet34。表中均為通道剪枝率30%下的結(jié)果,與不裁剪的訓(xùn)練結(jié)果baseline相比,準(zhǔn)確度略微降低,且降低率在0.4%以?xún)?nèi)。此時(shí),計(jì)算量裁剪率可達(dá)到30%左右,參數(shù)裁剪率為50%左右。
表2 IMAGENET驗(yàn)證集結(jié)果
3.4.2α系數(shù)的影響
以ResNet20為例的cfg結(jié)果如圖5所示??梢钥闯靓恋拇笮】刂浦煌瑢拥耐ǖ谰獬潭取&邻呌?時(shí),意味著結(jié)構(gòu)參數(shù)控制較大,各層裁剪通道數(shù)與原始輸出參數(shù)成比例;而α為1時(shí),代表只有數(shù)值參數(shù)參與判斷,圖線波動(dòng)較大,抖動(dòng)很大,同時(shí)在shortcut層處的敏感度很高,因此保留的通道數(shù)較大。圖6為ResNet56各卷積層的通道數(shù)實(shí)例。
圖5 ResNet20的cfg結(jié)果
對(duì)于VGG網(wǎng)絡(luò)而言,只需要做層間歸一化,同時(shí)使用層間因子調(diào)節(jié)一下輸出通道數(shù)不為0即可,因此一般使α取趨向1的值。而對(duì)于簡(jiǎn)化版的ResNet,考慮到shortcut層和make_layer層,為了保證shortcut層不引入多余的參數(shù),本文將每個(gè)make_layer層看作一個(gè)整體而得出一個(gè)統(tǒng)一的輸出通道數(shù),因此各個(gè)殘差模塊的中間輸出通道數(shù)的差距不應(yīng)過(guò)大,所以α值取值比VGG網(wǎng)絡(luò)稍小。
圖6 ResNet56的cfg結(jié)果
3.4.3預(yù)訓(xùn)練模型與初始化模型的cfg對(duì)比
使用本文方法分析預(yù)訓(xùn)練模型的參數(shù)剪枝后能否恢復(fù)精度。實(shí)驗(yàn)一使用初始化模型訓(xùn)練出網(wǎng)絡(luò)結(jié)構(gòu)列表cfg,之后對(duì)預(yù)訓(xùn)練模型進(jìn)行連接敏感度排序,每層只保留排序靠前的cfg中規(guī)定數(shù)目的通道數(shù),之后進(jìn)行40次的微調(diào);實(shí)驗(yàn)二使用預(yù)訓(xùn)練模型直接進(jìn)行全局連接敏感度排序及訓(xùn)練cfg,剪枝后微調(diào)相同次數(shù)。
在VGG16上進(jìn)行測(cè)試,將初始化參數(shù)固定。pre_cfg是采用實(shí)驗(yàn)二得到的網(wǎng)絡(luò)結(jié)構(gòu)列表cfg;initial_cfg是實(shí)驗(yàn)一初始化階段得到的cfg。經(jīng)過(guò)同樣的迭代次數(shù)之后,結(jié)果如表3所示。二者訓(xùn)練出的通道數(shù)列表如圖7所示。實(shí)驗(yàn)結(jié)果表明,前者的效果要比后者提高約0.7%。這說(shuō)明了該方法只適應(yīng)于初始化剪枝的方法,在已經(jīng)訓(xùn)練好的模型上效果并不理想。
表3 預(yù)訓(xùn)練模型與初始化模型訓(xùn)練結(jié)果對(duì)比
圖7 預(yù)訓(xùn)練模型與初始化模型的cfg對(duì)比
本文認(rèn)為損失函數(shù)對(duì)權(quán)重的影響隨著訓(xùn)練是會(huì)發(fā)生變化的。在剛開(kāi)始時(shí)所有的權(quán)重都是需要訓(xùn)練的,而在訓(xùn)練多次之后,有些權(quán)重被認(rèn)為已達(dá)到穩(wěn)定值,此時(shí)損失函數(shù)對(duì)權(quán)重的影響是很小的。對(duì)于預(yù)訓(xùn)練網(wǎng)絡(luò),權(quán)重梯度的統(tǒng)計(jì)值更傾向于隨著網(wǎng)絡(luò)深度加速而逐級(jí)遞減的趨勢(shì),此時(shí)如果按照當(dāng)前權(quán)重梯度的l1范數(shù)進(jìn)行裁剪,會(huì)對(duì)分類(lèi)準(zhǔn)確度造成較大損失。這說(shuō)明本文的方法更適合于初始化模型剪枝,同時(shí)也側(cè)面印證了文獻(xiàn)[8]觀點(diǎn)的正確性,結(jié)構(gòu)化剪枝最終得到的是網(wǎng)絡(luò)結(jié)構(gòu),而不是網(wǎng)絡(luò)參數(shù)。
本文提出一種卷積層的初始化剪枝方式,無(wú)須更新訓(xùn)練中參數(shù)便可得出精簡(jiǎn)模型的網(wǎng)絡(luò)結(jié)構(gòu),操作簡(jiǎn)單,較易實(shí)現(xiàn),且后續(xù)精簡(jiǎn)模型訓(xùn)練與正常訓(xùn)練相同,而計(jì)算量和參數(shù)量有了大幅度減少,對(duì)通用的前向推斷硬件十分友好。
經(jīng)過(guò)在不同數(shù)據(jù)集和不同架構(gòu)上的測(cè)試,對(duì)比原始網(wǎng)絡(luò)分類(lèi)訓(xùn)練的結(jié)果,本文方法分類(lèi)準(zhǔn)確度基本不會(huì)下降,部分有所提升,其中ResNet110網(wǎng)絡(luò)在計(jì)算量及參數(shù)量均裁剪掉50%以上時(shí),模型分類(lèi)的準(zhǔn)確度基本保持不變。
未來(lái)將研究對(duì)于輕小型網(wǎng)絡(luò)的剪枝優(yōu)化算法,同時(shí)結(jié)合網(wǎng)絡(luò)量化的相關(guān)內(nèi)容,進(jìn)一步減少深度卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算量和參數(shù)量,便于其在嵌入式設(shè)備中的部署和應(yīng)用。