楊 鑫 袁曉彤
1(南京信息工程大學(xué)自動(dòng)化學(xué)院 江蘇 南京 210044) 2(江蘇省大數(shù)據(jù)分析技術(shù)重點(diǎn)實(shí)驗(yàn)室大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心 江蘇 南京 210044)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的成功通常伴隨著一些問題,如占用內(nèi)存過大、計(jì)算成本過高等,而往往參數(shù)數(shù)目超過1億的深度神經(jīng)網(wǎng)絡(luò)所需要的計(jì)算成本更高,這個(gè)問題阻礙了很多實(shí)際應(yīng)用的實(shí)施,特別是基于便攜式設(shè)備和手機(jī)端的應(yīng)用。以經(jīng)典的VGG16[1]為例,它擁有高達(dá)1.3億的參數(shù)數(shù)量,且占用了超過500 MB的存儲空間,僅運(yùn)行VGG16網(wǎng)絡(luò)進(jìn)行圖像識別這一功能就需要完成309億個(gè)浮點(diǎn)運(yùn)算(FLOPs),這些都在嚴(yán)重制約著深度神經(jīng)網(wǎng)絡(luò)在實(shí)際生活中的應(yīng)用。
近年來,越來越多的研究人員加入到深度神經(jīng)網(wǎng)絡(luò)的加速與壓縮的行列中,他們提出了各種新穎的算法,在追求模型性能優(yōu)越的同時(shí),盡可能地降低模型復(fù)雜度,追求性能與資源損耗的平衡。很多網(wǎng)絡(luò)壓縮方法的總結(jié)[2-3]將壓縮方法進(jìn)行了分類,大體上可以分為以下幾種方法:低秩近似[4]、權(quán)重剪枝[5-7]、參數(shù)量化[6]、二值化網(wǎng)絡(luò)[8]、知識蒸餾[9-11]、緊湊卷積濾波器設(shè)計(jì)[12]和通道剪枝[13-21]等。剪枝是實(shí)現(xiàn)網(wǎng)絡(luò)壓縮一種較為直接而且有效的方法,目前大多數(shù)剪枝算法都是先訓(xùn)練一個(gè)大型的復(fù)雜預(yù)訓(xùn)練模型,然后對這個(gè)模型進(jìn)行剪枝,從而得到一個(gè)性能不錯(cuò)且較為緊湊的小模型。
本文采用結(jié)構(gòu)化剪枝方法,利用KL散度定義通道的重要因子,根據(jù)重要因子對CNN的每層卷積層逐層進(jìn)行通道剪枝,從而達(dá)到減少網(wǎng)絡(luò)參數(shù)數(shù)量和FLOPs的目的。Li等[13]和Liu等[18]采用硬剪枝方法,驗(yàn)證了基于范數(shù)剪枝標(biāo)準(zhǔn)的通道剪枝方法有效性,而He等[17]從迭代軟剪枝的角度證明了范數(shù)標(biāo)準(zhǔn)的通用性。本文對比了基于范數(shù)標(biāo)準(zhǔn)的方法,發(fā)現(xiàn)通道之間存在著差異性,保留不同的通道是至關(guān)重要的,且實(shí)驗(yàn)表明在CIFAR-10上剪枝ResNet,基于KL散度的剪枝標(biāo)準(zhǔn)優(yōu)于其他方法,不僅如此,在CIFAR-100這樣稍復(fù)雜的數(shù)據(jù)集上,表現(xiàn)也不錯(cuò)。本文還發(fā)現(xiàn)越深的網(wǎng)絡(luò)存在著越多的通道冗余,往往更加需要網(wǎng)絡(luò)壓縮來減少計(jì)算開銷。同時(shí)在增加剪枝率的情況下,網(wǎng)絡(luò)性能并未下降太多,而在剪枝率過大的時(shí)候,精度下降則會變得嚴(yán)重。平衡好剪枝率與性能的關(guān)系才能在減少占用內(nèi)存和浮點(diǎn)運(yùn)算的同時(shí),還可以提高網(wǎng)絡(luò)的魯棒性。本文的實(shí)驗(yàn)代碼與模型都可以在Github上下載。
隨著CNN深度的加深,大量的研究人員研究了很多不同的算法來加速和壓縮CNN模型,這些算法會以很多指標(biāo)作為壓縮的標(biāo)準(zhǔn),比如降低的內(nèi)存、減少的浮點(diǎn)運(yùn)算、加速推理的速度等。根據(jù)對網(wǎng)絡(luò)結(jié)構(gòu)的破壞程度,本文將目前壓縮算法分為非結(jié)構(gòu)化壓縮方法和結(jié)構(gòu)化壓縮方法。
首先,非結(jié)構(gòu)化壓縮方法分為以下幾種方法:低秩近似[4]、權(quán)重剪枝[5-7]、參數(shù)量化[6]和二值化網(wǎng)絡(luò)[8]等。Denton等[4]利用了幾種基于奇異值分解的張量分解方法,并通過低秩近似權(quán)重矩陣來壓縮卷積層,可以很大程度上減少所需的計(jì)算資源。Han等[5]提出了一種分為三個(gè)步驟的權(quán)重剪枝方法。首先,通過正常的網(wǎng)絡(luò)訓(xùn)練找出“重要的”權(quán)重連接,然后刪除“不重要的”權(quán)重連接,最后對剪枝后的稀疏網(wǎng)絡(luò)進(jìn)行微調(diào),直到更好地達(dá)到性能和計(jì)算開銷的平衡。為了進(jìn)一步地壓縮網(wǎng)絡(luò),Han等[6]繼續(xù)采用霍夫曼編碼來量化剪枝后的權(quán)重,這使得剪枝后的網(wǎng)絡(luò)得到了最大程度上的壓縮和加速。文獻(xiàn)[5-6]的方法是在訓(xùn)練過程結(jié)束后進(jìn)行剪枝操作的,而Jin等[7]則提出了迭代硬閾值的方法來提升深度神經(jīng)網(wǎng)絡(luò)的性能,主要分為兩個(gè)步驟來執(zhí)行,先使用硬閾值方法將一些權(quán)重小于閾值的連接置為0,對保留的有效連接進(jìn)行微調(diào),然后再重新激活置0的連接,可以大大減少網(wǎng)絡(luò)參數(shù)量的大小。Rastegari等[8]提出了兩種二值化網(wǎng)絡(luò):Binary weight network和XNOR-Nets,主要是通過對權(quán)重進(jìn)行二值化操作,達(dá)到減少模型存儲的目的,同時(shí)可以加速模型。參數(shù)量化和二值化網(wǎng)絡(luò)大多旨在最大限度地減小網(wǎng)絡(luò)規(guī)模,會很大程度上改變網(wǎng)絡(luò)原本的結(jié)構(gòu),且需要特殊的硬件來實(shí)現(xiàn)加速功能。
結(jié)構(gòu)化壓縮的方法不會破壞原來的網(wǎng)絡(luò)結(jié)構(gòu),主要包括:知識蒸餾[9-11]、緊湊卷積濾波器設(shè)計(jì)[12]和通道剪枝[13-21]等。CNN主要是從數(shù)據(jù)集中提取特征來完成分類、識別、預(yù)測和分割等任務(wù),在這個(gè)環(huán)節(jié)中提取特征是非常重要的,特征能直接影響到網(wǎng)絡(luò)最終的性能,而越深的神經(jīng)網(wǎng)絡(luò)往往能提取出更魯棒的特征,知識蒸餾也就應(yīng)運(yùn)而生了。Hinton等[9]提出了將一個(gè)大模型作為教師網(wǎng)絡(luò),將一個(gè)小模型作為學(xué)生網(wǎng)絡(luò),讓學(xué)生網(wǎng)絡(luò)從教師網(wǎng)絡(luò)中蒸餾知識,即用學(xué)生網(wǎng)絡(luò)的分類概率去逼近教師網(wǎng)絡(luò)的分類概率,Yang等[11]也使用了知識蒸餾來提升小網(wǎng)絡(luò)的性能。通道剪枝則是另一種較為常見的結(jié)構(gòu)化壓縮方法,這些方法大體上分為兩種:(1) 采用三步驟剪枝方法,先訓(xùn)練好網(wǎng)絡(luò),然后對網(wǎng)絡(luò)剪枝,最后通過微調(diào)來提升準(zhǔn)確率。如:Li等[13]利用L1范數(shù)作為剪枝標(biāo)準(zhǔn),認(rèn)為通道權(quán)重的L1范數(shù)較小的為不重要通道,那么去除后對于網(wǎng)絡(luò)最終的結(jié)果不會有很大影響。He等[15]則是用LASSO回歸來選擇通道,并用剩下的通道與原始網(wǎng)絡(luò)進(jìn)行誤差重構(gòu),使得剪枝后的網(wǎng)絡(luò)與剪枝前的網(wǎng)絡(luò)輸出特征映射盡量相似,這樣經(jīng)過微調(diào)后剪枝網(wǎng)絡(luò)的性能也不會下降太多。(2) 采用軟剪枝的方法,在訓(xùn)練的過程中通過剪枝標(biāo)準(zhǔn)將不重要通道的權(quán)重置0,訓(xùn)練結(jié)束后再進(jìn)行網(wǎng)絡(luò)重構(gòu)得到剪枝后的網(wǎng)絡(luò)。如:He等[16]用L2范數(shù)作為剪枝的標(biāo)準(zhǔn),在訓(xùn)練的每次迭代中將權(quán)重范數(shù)較小的通道置0,在迭代更新參數(shù)的時(shí)候還允許置0通道進(jìn)行更新,讓網(wǎng)絡(luò)在訓(xùn)練過程中選擇剪枝通道。接下來的工作中,He等[17]還提出了通道之間存在冗余,用歐氏距離來判斷通道能否被其他通道所代替,從很大程度上減少了通道的冗余且極大地減少了浮點(diǎn)運(yùn)算。靳麗蕾等[21]則將卷積核剪枝和權(quán)重剪枝結(jié)合起來,混合剪枝CNN,還利用最小化重構(gòu)誤差來提升網(wǎng)絡(luò)的性能。隨著網(wǎng)絡(luò)剪枝的發(fā)展,網(wǎng)絡(luò)結(jié)構(gòu)搜索與自動(dòng)機(jī)器學(xué)習(xí)逐漸流行起來,Liu等[18]總結(jié)了幾種最先進(jìn)的剪枝算法,提出了為了獲得一個(gè)有效的小網(wǎng)絡(luò)去訓(xùn)練一個(gè)參數(shù)過多的大網(wǎng)絡(luò)是不必要的,剪枝算法可以被認(rèn)為是在搜索有效的網(wǎng)絡(luò)結(jié)構(gòu)。由于手工剪枝算法耗費(fèi)很多的人力與時(shí)間,He等[19]提出用強(qiáng)化學(xué)習(xí)來學(xué)習(xí)如何剪枝,當(dāng)準(zhǔn)確率上升或下降時(shí)用獎(jiǎng)勵(lì)懲罰機(jī)制去訓(xùn)練自動(dòng)機(jī)器學(xué)習(xí)工具。目前網(wǎng)絡(luò)結(jié)構(gòu)搜索和自動(dòng)機(jī)器學(xué)習(xí)已經(jīng)成為熱門研究課題,網(wǎng)絡(luò)結(jié)構(gòu)搜索旨在搜索魯棒的遷移性能優(yōu)越的網(wǎng)絡(luò)結(jié)構(gòu)塊,而剪枝標(biāo)準(zhǔn)則可以成為搜索通道的標(biāo)準(zhǔn)。
基于以上結(jié)構(gòu)化剪枝的啟發(fā),不同于使用L1范數(shù)衡量通道的重要性,本文提出利用KL散度去衡量通道之間的差異性,如果一個(gè)通道與另一個(gè)通道的分布比較接近,那就可以說明這兩個(gè)通道可以彼此替換,刪去其中一個(gè)對最終性能可能影響并不大。而KL散度正好可以表示兩個(gè)分布之間的相似度,即KL散度越大說明這兩個(gè)通道差異性越大,所以本文利用KL散度去除差異性較小的通道,實(shí)現(xiàn)對CNN模型的壓縮與加速。
如今CNN的應(yīng)用主要受到以下兩個(gè)方面的制約:(1) 時(shí)間復(fù)雜度,即模型的運(yùn)算次數(shù)(FLOPs),主要包括單個(gè)卷積層和CNN整體的時(shí)間復(fù)雜度,時(shí)間復(fù)雜度決定了模型的訓(xùn)練以及預(yù)測時(shí)間,如果復(fù)雜度過高,則會導(dǎo)致模型訓(xùn)練和預(yù)測耗費(fèi)大量時(shí)間,既無法快速地驗(yàn)證想法和改善模型,也無法做到快速的預(yù)測。(2) 空間復(fù)雜度,主要包括參數(shù)數(shù)量以及模型在實(shí)際運(yùn)行時(shí)每層計(jì)算的輸出特征圖大小,空間復(fù)雜度決定了模型的參數(shù)數(shù)量,由于維度的限制,模型的參數(shù)越多,訓(xùn)練模型所需的數(shù)據(jù)量就越大,這些參數(shù)以及網(wǎng)絡(luò)結(jié)構(gòu)信息都需要存儲在磁盤上面,占用過大的磁盤存儲空間對于嵌入式設(shè)備來說是一個(gè)巨大的資源負(fù)擔(dān)。
通道剪枝的原理是通過某一衡量標(biāo)準(zhǔn)來裁剪不符合要求的通道,減少了卷積通道數(shù)目在不改變網(wǎng)絡(luò)原始結(jié)構(gòu)的基礎(chǔ)上,還可以減少模型占用內(nèi)存和FLOPs,進(jìn)一步提升網(wǎng)絡(luò)的推理速度。但是對預(yù)訓(xùn)練的網(wǎng)絡(luò)直接進(jìn)行通道剪枝會帶來一定準(zhǔn)確率的下降,這是不可避免的。本文采用硬剪枝方法,對一個(gè)預(yù)訓(xùn)練模型直接進(jìn)行剪枝重構(gòu)網(wǎng)絡(luò),這種方式較為暴力,往往會造成精度的急劇下降,所以對硬剪枝過后的網(wǎng)絡(luò)進(jìn)行微調(diào),即在較低學(xué)習(xí)率的情況下,利用數(shù)據(jù)集再次訓(xùn)練重構(gòu)之后的網(wǎng)絡(luò),允許保留的網(wǎng)絡(luò)參數(shù)進(jìn)行更新,經(jīng)過適當(dāng)?shù)牡?,剪枝網(wǎng)絡(luò)的性能會與原始網(wǎng)絡(luò)的性能相差無幾。利用KL散度選擇出重要因子較小的通道并剪枝,然后微調(diào)剪枝網(wǎng)絡(luò),直到達(dá)到性能和計(jì)算開銷上較好的平衡。
首先訓(xùn)練一個(gè)性能優(yōu)越的大網(wǎng)絡(luò),對預(yù)訓(xùn)練網(wǎng)絡(luò)的每一層卷積層的通道分別計(jì)算KL散度;然后通過每個(gè)通道的KL散度來判斷在當(dāng)前卷積層中與其他通道的差異性,即KL散度大的通道則是不可替代的,而KL散度小的通道與其他通道差異性較小則可以裁剪掉,根據(jù)這一方法,CNN的每一層卷積層按照一定的剪枝率剪枝完成后,便可得到剪枝后的模型;最后將剪枝后的網(wǎng)絡(luò)進(jìn)行微調(diào),最終能得到性能優(yōu)越的小模型,小模型不僅推理速度更快,而且擁有較少的參數(shù)量和FLOPs。根據(jù)KL散度進(jìn)行通道剪枝的整體框架如圖1所示。
圖1 基于KL散度的通道剪枝框架
KL散度又叫作相對熵,是描述兩個(gè)概率分布P與Q之間差異的一種方法,可以用來衡量一個(gè)分布偏離另一個(gè)分布的程度,若兩個(gè)分布完全一樣,則它們之間的散度為0,當(dāng)KL散度越小的時(shí)候,兩個(gè)分布越接近。
首先假設(shè)兩個(gè)離散概率分布分別為P與Q,那么兩者的KL散度為:
(1)
卷積層的每個(gè)通道權(quán)重并不是一個(gè)離散概率分布,所以本文將每個(gè)通道權(quán)重進(jìn)行規(guī)范化,即將通道權(quán)重進(jìn)行歸一化,從而獲得通道權(quán)重的離散概率分布。具體實(shí)施是先對單個(gè)通道權(quán)重取絕對值,繼而累加起來,然后除以總和,最后可以得到每個(gè)通道權(quán)重的離散概率分布。
現(xiàn)階段很多研究人員提出了很多不同的剪枝標(biāo)準(zhǔn)來衡量通道的重要性,比較熱門的是用基于范數(shù)的通道選擇,基于范數(shù)的剪枝標(biāo)準(zhǔn)[13,16,18]認(rèn)為通道權(quán)重范數(shù)較大可以認(rèn)定為是重要通道,即這些通道對于最終結(jié)果具有很大影響,相反權(quán)重范數(shù)較小的通道則沒有太大影響,實(shí)驗(yàn)也表明剪枝權(quán)重范數(shù)較小的通道對于最終結(jié)果影響會小一些。當(dāng)然還有Liu等[14]提出的以網(wǎng)絡(luò)BN層的比例因子作為重要因子,來決定哪些通道將會被剪,具體是利用L1正則化重要因子,將重要因子較小的通道剪枝。基于范數(shù)的剪枝標(biāo)準(zhǔn)通常無法考慮到通道之間的相似性,本文則提出利用KL散度來度量通道之間的分布信息,通道之間的差異性相同的通道對于最終的結(jié)果影響是大致一樣的,所以剪枝相似的通道可能是更加合理的。
(2)
在第i層卷積層中,這些通道之間的差異性越高,其KL散度就越小,由于差異性只能判斷兩個(gè)通道之間的關(guān)系,本文便提出重要因子的概念,將通道之間的差異性累加便得到了重要因子,KL散度越小的通道,相似度越高,說明通道之間差異性也就越小,重要因子越小,則需要被剪枝。定義第j個(gè)通道的重要因子為:
(3)
如式(3)所示,第i層的每個(gè)通道都會計(jì)算出相應(yīng)的重要因子,并根據(jù)重要因子排序選擇出重要因子較小的通道,保留重要的通道。
本文實(shí)現(xiàn)的通道剪枝方法如圖2所示,首先對第i層卷積層的通道進(jìn)行KL散度衡量重要性,接下來去除掉差異性較小的通道,最后將剩余通道權(quán)重賦值給新網(wǎng)絡(luò),便可得到剪枝后的網(wǎng)絡(luò)。圖中用白色虛線代表被剪枝的部分,當(dāng)然并不存在于剪枝網(wǎng)絡(luò)中。
圖2 通道剪枝示意圖
算法1給出了本文整體訓(xùn)練過程。首先對于給定的預(yù)訓(xùn)練好的大型原始網(wǎng)絡(luò),根據(jù)每層卷積層的剪枝率,經(jīng)過通道選擇后,確定每次需要剪枝的通道數(shù)量,隨后進(jìn)行硬剪枝,且根據(jù)剪枝率重構(gòu)出一個(gè)新的緊湊網(wǎng)絡(luò)。隨后歸一化通道權(quán)重并計(jì)算通道的重要因子,并將保留重要因子較大的通道權(quán)重賦值給緊湊網(wǎng)絡(luò),這樣得到的緊湊網(wǎng)絡(luò)便是剪枝后的網(wǎng)絡(luò),參數(shù)數(shù)量和FLOPs根據(jù)不同的剪枝率相應(yīng)的降低,然后通過一定的迭代來微調(diào)剪枝網(wǎng)絡(luò),使得剪枝網(wǎng)絡(luò)最終的性能達(dá)到與原始網(wǎng)絡(luò)相近,甚至更加優(yōu)越。
算法1基于KL散度的通道剪枝算法
輸入:網(wǎng)絡(luò)權(quán)重W={Wi,1≤i≤L},剪枝率ri。
輸出:剪枝網(wǎng)絡(luò)Ws={Wsi,1≤i≤L}。
Step1遍歷網(wǎng)絡(luò)中的L層卷積層。
Step3根據(jù)重要因子排序,保留n×(1-ri)個(gè)重要因子較大的通道,并刪除剩余n×ri個(gè)通道。
Step4將保留通道的權(quán)重W賦值給剪枝網(wǎng)絡(luò)。
Step5在數(shù)據(jù)集上微調(diào)剪枝網(wǎng)絡(luò),輸出表現(xiàn)良好的網(wǎng)絡(luò)權(quán)重Ws。
經(jīng)過通道剪枝與網(wǎng)絡(luò)重構(gòu)之后,微調(diào)過后的網(wǎng)絡(luò)性能通常會下降一些,甚至低于原始網(wǎng)絡(luò)準(zhǔn)確率,根據(jù)不同的剪枝率,網(wǎng)絡(luò)的占用內(nèi)存和FLOPs都會不同,且越高的剪枝率會使得越多的計(jì)算開銷下降,當(dāng)然也可能導(dǎo)致性能的急劇下降,所以找到性能與計(jì)算開銷的平衡點(diǎn)是很重要的。
本文在兩種數(shù)據(jù)集(CIFAR-10[22]和CIFAR-100[22])上實(shí)現(xiàn)了利用KL散度來對ResNet[23]進(jìn)行通道剪枝的實(shí)驗(yàn),在Pytorch[24]上實(shí)現(xiàn)了對ResNet的加速與壓縮。ResNet是經(jīng)典的CNN框架,其主要的計(jì)算量集中在卷積層當(dāng)中,全連接層參數(shù)數(shù)量很小,卷積操作的計(jì)算開銷占FLOPs的絕大部分,所以壓縮與加速ResNet可以用來證明剪枝標(biāo)準(zhǔn)的有效性。CIFAR-10數(shù)據(jù)集是深度學(xué)習(xí)圖像分類的一種較為常用的數(shù)據(jù)集,它包含60 000幅像素為32×32的彩色圖片,分為10類,每類含有6 000幅圖片,訓(xùn)練集為50 000幅圖片,測試集為10 000幅圖片。CIFAR-100圖片數(shù)目不變只是類別變成了100類,訓(xùn)練集和測試集圖片數(shù)目不變。
在CIFAR-10數(shù)據(jù)集上,本文對 ResNet56和ResNet110進(jìn)行了通道剪枝,用KL散度來計(jì)算出每個(gè)通道的重要因子,將重要因子較小的通道直接剪枝,并將保留的通道權(quán)重復(fù)制到重構(gòu)后的緊湊模型中,然后將緊湊模型微調(diào)60個(gè)迭代,在每個(gè)迭代中遍歷數(shù)據(jù)集,用隨機(jī)梯度下降算法進(jìn)行后向傳播更新緊湊模型的網(wǎng)絡(luò)權(quán)重,直到達(dá)到令人滿意的性能,并且在迭代過程中采用學(xué)習(xí)率遞減的調(diào)參方式,使得性能提升。
本文主要與四種方法進(jìn)行了比較:L1-pruning[13]、 LCCL[25]、SFP[16]和Rethinking[18]。本文的實(shí)驗(yàn)設(shè)置與文獻(xiàn)[18]的Rethinking算法一致,在ResNet56上跳躍第20、38和54層,在ResNet110上跳躍第36、38和74層,即上述層不進(jìn)行剪枝,因?yàn)樯鲜鰧虞^為敏感,在這些層上應(yīng)用過高的剪枝率會導(dǎo)致性能的急劇下降。由于剪枝設(shè)置一樣,所以本文的FLOPs下降率與Rethinking算法也相同。
如表1所示,本文是基于Rethinking基礎(chǔ)上實(shí)現(xiàn)的算法,所以它們的基本精度相同,而與SFP不同,根據(jù)下降精度來看本文的剪枝標(biāo)準(zhǔn)性能更加客觀一點(diǎn),本文還將每次剪枝后性能最優(yōu)的方法加粗了,這樣可以直觀地看出在CIFAR-10數(shù)據(jù)集上,本文在ResNet56和ResNet110上剪枝10%和30%都超過了上述方法,與原始網(wǎng)絡(luò)性能相比也不遜色,且參數(shù)量與FLOPs都減少很多。卷積神經(jīng)網(wǎng)絡(luò)的本質(zhì)是通過卷積層提取特征,然后通過分類器進(jìn)行分類任務(wù),而通道之間提取到的特征存在著冗余,可以由其他通道提取的特征替換,所以適當(dāng)剪枝后有些網(wǎng)絡(luò)的預(yù)測性能提升,而當(dāng)剪枝率過高時(shí),裁剪掉不可替換的通道時(shí)便會導(dǎo)致網(wǎng)絡(luò)性能的下降。本文通過通道之間的差異性來判別冗余通道,能在最大限度上降低精度損失。
表1 不同剪枝方法在CIFAR-10數(shù)據(jù)集上對ResNet剪枝的實(shí)驗(yàn)結(jié)果對比
續(xù)表1
本節(jié)比較了兩種不同剪枝標(biāo)準(zhǔn)對于剪枝網(wǎng)絡(luò)最終的影響,如表2所示,其中剪枝標(biāo)準(zhǔn)為KL散度是基于KL散度保留差異性較大的通道,而L1范數(shù)則是將通道權(quán)重的L1范數(shù)較大的通道保留。在進(jìn)行對比實(shí)驗(yàn)時(shí),除了剪枝標(biāo)準(zhǔn)不同外,其余設(shè)置都是相同的,都是采用三步剪枝方法,預(yù)訓(xùn)練網(wǎng)絡(luò)相同,且剪枝后微調(diào)次數(shù)也一致,超參數(shù)的設(shè)置也都相同。
表2 不同剪枝標(biāo)準(zhǔn)在CIFAR-10數(shù)據(jù)集上對ResNet剪枝實(shí)驗(yàn)(%)
表2實(shí)驗(yàn)結(jié)果是基于CIFAR-10的,通過剪枝后精度對比原始網(wǎng)絡(luò)精度,用基于KL散度的剪枝標(biāo)準(zhǔn)最高可以提升0.9百分點(diǎn)的精度。此外,剪枝精度大多略高于原始精度,可以看出剪枝從一定程度上提升了網(wǎng)絡(luò)的性能。同樣對比剪枝后的精度發(fā)現(xiàn)基于KL散度的剪枝標(biāo)準(zhǔn)是優(yōu)于L1范數(shù)的剪枝標(biāo)準(zhǔn)的,也可以從另一方面解釋通道之間存在可替代性,所以,利用剪枝標(biāo)準(zhǔn)選擇差異性較大的通道并保留是至關(guān)重要的。
表3是在CIFAR-100數(shù)據(jù)集上剪枝ResNet56和ResNet110的,可以看出精度下降有點(diǎn)嚴(yán)重,可能是網(wǎng)絡(luò)并不存在很大的冗余,每次提取的特征都是很重要的。KL散度方法較之L1范數(shù)的方法也較為有優(yōu)勢,在下降精度方面KL散度大多高于L1范數(shù)。當(dāng)剪枝率從10%增加到30%可以對比看出有時(shí)候剪去20%效果與10%效果相差不大,但是較之原始網(wǎng)絡(luò)下降較多,說明CNN卷積層中剪枝一部分重要通道后,還會存在一些重要通道之間的冗余。ResNet56與ResNet110的下降精度可以看出在大網(wǎng)絡(luò)中冗余度是隨著深度增加而增加的,而且去除更多的通道精度下降并不是很多,所以大網(wǎng)絡(luò)上運(yùn)用剪枝效果會更加明顯。
表3 不同剪枝標(biāo)準(zhǔn)在CIFAR-100數(shù)據(jù)集上對ResNet剪枝實(shí)驗(yàn)(%)
由3.2節(jié)得出的結(jié)論,CNN的卷積層都存在一定的冗余通道,在不同的剪枝率下,卷積層的冗余通道不斷減少,最終達(dá)到性能與計(jì)算開銷的平衡,所以剪枝率的選擇對于網(wǎng)絡(luò)壓縮是很關(guān)鍵的。
如圖3所示,本文通過在CIFAR-10數(shù)據(jù)集上對ResNet56應(yīng)用不同剪枝率,來找到剪枝率對于性能的影響??梢钥闯觯糁β试?0%的時(shí)候精度下降了很多,一些重要通道被剪枝時(shí)導(dǎo)致性能的急劇下降。而在10%~40%剪枝率下,性能略微有所提升,且基本保持不變,可以看出網(wǎng)絡(luò)刪減了冗余的通道,還從一定程度上提高了網(wǎng)絡(luò)的性能。通常網(wǎng)絡(luò)剪枝是需要一個(gè)嚴(yán)格的剪枝標(biāo)準(zhǔn)來衡量濾波器重要性,即使達(dá)到了這個(gè)標(biāo)準(zhǔn),過高的剪枝率還是會對網(wǎng)絡(luò)性能產(chǎn)生影響,使用一些特殊的方法來提升準(zhǔn)確率便必不可少,可以利用特征映射重構(gòu)來最小化重構(gòu)誤差,還可以通過知識蒸餾來提升網(wǎng)絡(luò)性能,即在盡可能減少網(wǎng)絡(luò)尺寸的同時(shí)維持網(wǎng)絡(luò)性能才是關(guān)鍵。
圖3 ResNet56在CIFAR-10上不同剪枝率的性能比較
剪枝后網(wǎng)絡(luò)的參數(shù)數(shù)量、浮點(diǎn)運(yùn)算率(FLOPs)和網(wǎng)絡(luò)測算時(shí)間都是在卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用時(shí)需要重點(diǎn)考慮的事情。表4為剪枝后的ResNet在10 000幅圖片的CIFAR-10數(shù)據(jù)集上推理的時(shí)間、網(wǎng)絡(luò)參數(shù)數(shù)量和浮點(diǎn)運(yùn)算數(shù)量的對比。
表4 ResNet在CIFAR-10數(shù)據(jù)集上的性能指標(biāo)
表4中,Baseline表示未剪枝的原網(wǎng)絡(luò)模型,網(wǎng)絡(luò)測算時(shí)間的計(jì)算方法是推理5次,去除最高值和最低值,剩余3次網(wǎng)絡(luò)測算時(shí)間取平均網(wǎng)絡(luò)測算時(shí)間。隨著剪枝率的提高,參數(shù)數(shù)量和浮點(diǎn)運(yùn)算數(shù)量都大幅地下降了,并與剪枝率基本呈線性關(guān)系,網(wǎng)絡(luò)測算時(shí)間也下降了0.5 s左右。
本文將KL散度用作通道之間差異性的衡量標(biāo)準(zhǔn),并定義通道的重要因子,在精度下降不大的情況下,剪枝不重要的冗余通道,從而達(dá)到減少網(wǎng)絡(luò)參數(shù)以及FLOPs的目的。對于一個(gè)預(yù)訓(xùn)練好的網(wǎng)絡(luò)模型,本文直接對其進(jìn)行剪枝,然后再通過微調(diào)的方法恢復(fù)與原始網(wǎng)絡(luò)相近的性能。一個(gè)嚴(yán)格的剪枝標(biāo)準(zhǔn)在結(jié)構(gòu)化剪枝中是必不可少的,而本文通過實(shí)驗(yàn)證明了KL散度能夠選擇出冗余的通道,是一個(gè)較為有效的標(biāo)準(zhǔn)。實(shí)驗(yàn)還表明越深的網(wǎng)絡(luò)往往存在更多的冗余,設(shè)置合適的剪枝率可以提升網(wǎng)絡(luò)性能,降低網(wǎng)絡(luò)測算時(shí)間。