靳麗蕾,楊文柱,王思樂(lè),崔振超,陳向陽(yáng),陳麗萍
(河北大學(xué) 網(wǎng)絡(luò)空間安全與計(jì)算機(jī)學(xué)院,河北 保定 071002)
近幾年,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)作為深度學(xué)習(xí)中的經(jīng)典模型,在圖像分類、目標(biāo)檢測(cè)和語(yǔ)義分割等諸多領(lǐng)域取得了一系列的研究成果.自2012年深度學(xué)習(xí)算法在識(shí)別精度方面表現(xiàn)出巨大優(yōu)勢(shì)后,各種深度學(xué)習(xí)模型便相繼涌現(xiàn).但是這些模型在不斷逼近計(jì)算機(jī)視覺(jué)任務(wù)精度極限的同時(shí),其模型深度和參數(shù)也在成倍增長(zhǎng),使得這些模型很難應(yīng)用于資源受限的設(shè)備.由表1[1-4]可以看出,CNN的層數(shù)越來(lái)越多,使得其計(jì)算復(fù)雜度越來(lái)越高,而過(guò)高的計(jì)算復(fù)雜度要使用GPU或者更高性能的CPU實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)運(yùn)算.由于手機(jī)等移動(dòng)設(shè)備、車(chē)載嵌入式設(shè)備等存在計(jì)算能力、存儲(chǔ)容量等諸多方面的約束,現(xiàn)有的深度神經(jīng)網(wǎng)絡(luò)無(wú)法在這些資源受限設(shè)備上進(jìn)行很好的部署使用.目前模型壓縮的關(guān)鍵就是如何在保持現(xiàn)有神經(jīng)網(wǎng)絡(luò)性能基本不變的情況下,通過(guò)減小網(wǎng)絡(luò)的計(jì)算量和網(wǎng)絡(luò)模型存儲(chǔ),使其能在資源受限的設(shè)備上高效運(yùn)行.因此,模型壓縮與加速受到學(xué)術(shù)界和工業(yè)界的極大關(guān)注,其中合理有效地修剪冗余參數(shù)最具挑戰(zhàn)性.
自AlexNet[1]在2012 ILSVRC上取得突破性成果后,越來(lái)越多的研究人員開(kāi)始研究CNN模型.最具代表性的CNN模型,如VGG[2],GoogLeNet[3],ResNet[4]和DenseNet[5],大大提高了模型精度.其中,VGG網(wǎng)絡(luò)的卷積層占據(jù)了大約 90-95% 的計(jì)算時(shí)間和參數(shù)規(guī)模;全連接(FC)層占據(jù)了大約 5-10% 的計(jì)算時(shí)間和95% 的參數(shù)量,這為研究深度模型的壓縮提供了統(tǒng)計(jì)依據(jù).深度神經(jīng)網(wǎng)絡(luò)在各種計(jì)算機(jī)視覺(jué)任務(wù)中(比如遙感圖像的分類[6])都非常有效,但由于參數(shù)過(guò)多難以部署在手機(jī)等資源受限的設(shè)備上.
表1 幾種經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)模型的對(duì)比Table 1 Comparison between some CNN models
剪枝是用于降低網(wǎng)絡(luò)復(fù)雜度、加速網(wǎng)絡(luò)模型的有效方法,可以在幾乎不損失模型精度的前提下移除網(wǎng)絡(luò)中的冗余參數(shù),達(dá)到模型壓縮的目的.20世紀(jì)90年代,LeCun等人[7]便提出了Optimal Brain Damage方法對(duì)模型進(jìn)行剪枝,有效降低了網(wǎng)絡(luò)復(fù)雜性并緩解了過(guò)擬合問(wèn)題.神經(jīng)網(wǎng)絡(luò)中包含很多參數(shù),但有些參數(shù)對(duì)最終輸出的貢獻(xiàn)很小,可以認(rèn)為這些參數(shù)是冗余的.因此,需要找到有效的評(píng)估方法,對(duì)不重要的參數(shù)進(jìn)行剪枝以減少模型參數(shù)冗余.Han等人[8]提出了一種簡(jiǎn)單的剪枝方法,不會(huì)損失準(zhǔn)確性;其主要思想是移除權(quán)重低于指定閾值的所有連接.雖然這個(gè)方法稀疏度很高,但在實(shí)際加速中其效果有限.卷積核剪枝可以解決該方法的局限性,有效實(shí)現(xiàn)模型壓縮與加速.但在模型壓縮時(shí),單獨(dú)使用權(quán)重剪枝或卷積核剪枝得到的網(wǎng)絡(luò)仍然存在參數(shù)冗余.本文提出了一種結(jié)合權(quán)重剪枝和卷積核剪枝的混合剪枝方法,以實(shí)現(xiàn)最大限度的模型壓縮.
為了提升網(wǎng)絡(luò)的性能,深度卷積神經(jīng)網(wǎng)絡(luò)在增加深度的同時(shí),極大增加了參數(shù)量.Denil等人[9]證明了卷積神經(jīng)網(wǎng)絡(luò)可以用它原始參數(shù)的一個(gè)子集進(jìn)行有效的重建,表明網(wǎng)絡(luò)中存在參數(shù)冗余問(wèn)題.目前有很多不同的模型壓縮與加速方法,大致可以分為五類:新型網(wǎng)絡(luò)模塊設(shè)計(jì)、知識(shí)蒸餾、低秩分解、量化、剪枝.
關(guān)于新型網(wǎng)絡(luò)模塊設(shè)計(jì)的研究有很多,比如SqueezeNet[10],MobileNet[11]和ShuffleNet[12].基于更細(xì)致更高效的原則設(shè)計(jì)新型網(wǎng)絡(luò)模型有效減小模型尺寸且有良好的性能,但設(shè)計(jì)新的網(wǎng)絡(luò)結(jié)構(gòu)對(duì)技巧和經(jīng)驗(yàn)要求較高.Lei等人[13]基于知識(shí)遷移[14]提出了知識(shí)蒸餾(Knowledge Distillation,KD)方法,該方法在保持一定性能的前提下將深層網(wǎng)絡(luò)壓縮成較淺的網(wǎng)絡(luò),有效降低了計(jì)算量;但它只能用于具有SoftMax 損失函數(shù)的分類任務(wù),且模型假設(shè)有時(shí)過(guò)于嚴(yán)格,導(dǎo)致在性能方面無(wú)法與其它方法競(jìng)爭(zhēng).權(quán)重矩陣分解利用網(wǎng)絡(luò)中計(jì)算單元的矩陣來(lái)實(shí)現(xiàn)信息重組,達(dá)到網(wǎng)絡(luò)壓縮的目的.網(wǎng)絡(luò)模型中,每層的權(quán)重都可以通過(guò)該層的權(quán)重子集進(jìn)行精確預(yù)測(cè),可使用奇異值分解(SVD)[15]來(lái)對(duì)每一層進(jìn)行低秩近似.然而,低秩分解技術(shù)已經(jīng)很成熟,并且現(xiàn)在越來(lái)越多網(wǎng)絡(luò)中采用諸如1×1、3×3這樣的小卷積核,而對(duì)這些小卷積核用矩陣分解的方法很難實(shí)現(xiàn)網(wǎng)絡(luò)加速和壓縮;另外,目前的分解方法都是逐層執(zhí)行低秩近似,無(wú)法執(zhí)行全局參數(shù)壓縮.嵌入式處理器由于位寬和性能的限制,導(dǎo)致常規(guī)的計(jì)算需求在該環(huán)境下難以得到滿足.面對(duì)這種情況,在保證網(wǎng)絡(luò)模型精度的同時(shí)對(duì)網(wǎng)絡(luò)中的權(quán)重?cái)?shù)據(jù)使用量化方法已成為一種趨勢(shì),但由于實(shí)現(xiàn)難度大、準(zhǔn)確性不穩(wěn)定等問(wèn)題導(dǎo)致量化方法使用門(mén)檻較高.
剪枝方法被廣泛應(yīng)用于壓縮CNN模型.Srinivas等人[16]研究了神經(jīng)元之間的冗余問(wèn)題,并提出了一種無(wú)數(shù)據(jù)剪枝方法.Chen等人[17]提出了一個(gè)HashedNets模型,使用低成本的散列函數(shù)將權(quán)重分組為哈希表進(jìn)行參數(shù)共享.Han等人[18]提出了“Deep Compression”方法,主要包括參數(shù)剪枝、量化和霍夫曼編碼.Ullrich等人[19]提出了一種基于軟權(quán)重共享的簡(jiǎn)單正則化方法.韓等人[20]提出了網(wǎng)絡(luò)刪減、參數(shù)共享相結(jié)合的壓縮方案.對(duì)于已經(jīng)訓(xùn)練好的模型,可以找到一種有效的評(píng)估方法,對(duì)不重要的卷積核進(jìn)行剪枝以減少模型冗余,這是目前模型壓縮中使用最多的方法.Li等人[21]基于權(quán)重的大小提出了一種簡(jiǎn)單的剪枝方法來(lái)衡量每個(gè)卷積核的重要性,對(duì)每個(gè)卷積核中所有權(quán)重的絕對(duì)值求和作為該卷積核的評(píng)價(jià)指標(biāo).Hu等人[22]定義零的平均百分比APoZ(Average Percentage of Zeros)來(lái)衡量每一個(gè)卷積核中激活函數(shù)值為零的數(shù)量,作為評(píng)價(jià)卷積核重要與否的標(biāo)準(zhǔn).這兩個(gè)標(biāo)準(zhǔn)簡(jiǎn)單明了,但與最終損失沒(méi)有直接關(guān)系.因此,Molchanov等人[23]采用泰勒展開(kāi)式來(lái)近似的計(jì)算移除每個(gè)卷積核對(duì)損失函數(shù)的影響程度.Luo等人[24]認(rèn)為難以通過(guò)權(quán)重大小判定每個(gè)卷積核的重要性,提出了基于熵的剪枝方法.Luo等人[25]在基于熵的剪枝方法基礎(chǔ)上進(jìn)行改進(jìn),設(shè)計(jì)出了效果更優(yōu)的 ThiNet框架.該框架利用下一層的統(tǒng)計(jì)信息指導(dǎo)當(dāng)前層的剪枝,在不改變?cè)W(wǎng)絡(luò)結(jié)構(gòu)的前提下實(shí)現(xiàn)模型的加速與壓縮.
基于模型剪枝的方法很多,其主要思想都是挑選出模型中不重要的權(quán)重或卷積核將其移除.移除不重要的權(quán)重或卷積核后,通過(guò)再訓(xùn)練來(lái)恢復(fù)模型的性能,這樣就可以在保證模型性能的前提下,最大程度的壓縮模型參數(shù),實(shí)現(xiàn)模型加速.該類方法中,如何找到一個(gè)有效衡量權(quán)重或卷積核重要性的標(biāo)準(zhǔn)是關(guān)鍵問(wèn)題.
對(duì)CNN進(jìn)行剪枝能夠有效降低它的參數(shù)量和運(yùn)行需要的計(jì)算開(kāi)銷,解決CNN模型難以應(yīng)用于資源受限設(shè)備的問(wèn)題.對(duì)于權(quán)重剪枝,去掉低于閾值的權(quán)重連接,通過(guò)再訓(xùn)練恢復(fù)模型精度,最后可以得到一個(gè)稀疏模型.卷積核剪枝可以保持原始的網(wǎng)絡(luò)模型不被改變,也不需要額外的深度學(xué)習(xí)庫(kù)支持.為了得到更好的壓縮效果,綜合考慮卷積核剪枝與權(quán)重剪枝兩種方法,提出了混合剪枝方法.
給定一個(gè)原始網(wǎng)絡(luò),首先刪除重要性低的卷積核來(lái)進(jìn)行卷積核剪枝;然后,使用權(quán)重剪枝實(shí)現(xiàn)進(jìn)一步壓縮.與原始CNN相比,剪枝后的CNN具有更少的卷積核和權(quán)重.混合剪枝的框架如圖1所示.
圖1 網(wǎng)絡(luò)混合剪枝的框架圖Fig.1 Framework of mixed network pruning
卷積核剪枝包括以下四個(gè)步驟:
1)評(píng)估卷積核的重要性.主要思想是使用i+1層的統(tǒng)計(jì)信息來(lái)指導(dǎo)i層的剪枝,使用i+1層輸入的子集近似i+1層的輸出.
2)剪除不重要的通道及其相對(duì)應(yīng)的卷積核.i+1層輸入中的通道由i層中的卷積核產(chǎn)生,因此可把i+1層不重要的通道和相應(yīng)i層的卷積核安全地移除.
3)剪枝后會(huì)損壞模型的泛化能力,將整個(gè)網(wǎng)絡(luò)微調(diào)一遍或兩遍恢復(fù)其性能.
4)最后,判斷剪枝是否結(jié)束.如果剪枝停止,可微調(diào)多次獲得更準(zhǔn)確的模型.否則,重復(fù)步驟(1)-(3)繼續(xù)對(duì)下一層進(jìn)行剪枝.
針對(duì)網(wǎng)絡(luò)模型的第i+1層進(jìn)行壓縮,使用第i+1層的輸入,即第i層的輸出來(lái)模擬其輸出的線性過(guò)程.如果通過(guò)優(yōu)化的方法可以找到對(duì)于第i+1層的輸入中線性組合等于零的部分,并將相應(yīng)的第i層輸出的卷積核舍棄掉,就可以利用較少的輸入得到相似的輸出,即在盡量不影響模型效果的前提下實(shí)現(xiàn)壓縮模型.尋找線性組合的值接近于零的具體過(guò)程包括收集訓(xùn)練樣本、用于通道選擇的貪心算法、最小化重構(gòu)誤差等優(yōu)化方法.
3.2.1 收集訓(xùn)練集
收集訓(xùn)練集以評(píng)估通道的重要性,確定通道是否可以安全地移除.由y表示的元素從i+2層中隨機(jī)采樣.i+1層中的相應(yīng)卷積核和滑動(dòng)窗口也可以根據(jù)其位置來(lái)確定.
卷積運(yùn)算如下式:
(1)
進(jìn)一步定義如下公式:
(2)
然后,公式(1)卷積操作可以簡(jiǎn)化為:
(3)
(4)
3.2.2 通道選擇
卷積核剪枝的關(guān)鍵是衡量卷積核的重要性,常用的方法包括:通過(guò)卷積結(jié)果的稀疏程度、卷積核對(duì)損失函數(shù)的影響、卷積結(jié)果對(duì)下一層結(jié)果的影響等.訓(xùn)練之后,移除一些不重要的卷積核,然后每一層剪枝后微調(diào)一遍或兩遍,以便恢復(fù)模型精度.
(5)
其中,|S|是子集S中元素的數(shù)量,r是預(yù)定義的壓縮率.等價(jià)的,T表示被移除通道的子集,即S∪T={1,2,…,C} andS∩T=φ,就可以最小化下面的公式6來(lái)替代公式5:
(6)
公式(6)等價(jià)于公式(5),但|T|的個(gè)數(shù)通常是小于|S|的,因此公式(6)比公式(5)更快更簡(jiǎn)單.解決公式(6)仍然是NP難題,可以使用如算法1所示的貪心算法來(lái)解決.假設(shè)T表示已移除通道的子集,其初始值為空集.U是所有通道的集合,對(duì)于每個(gè)i∈U,通過(guò)公式6計(jì)算值,每次選擇添加一個(gè)通道使得通過(guò)當(dāng)前樣本得到的誤差最小,最后獲得移除通道的子集.這種方法是局部最優(yōu)的,可通過(guò)微調(diào)來(lái)彌補(bǔ)這種方法造成的影響.
算法1. 貪心算法
輸出:移除通道的子集T
1.T←φ;U←{1,2,…,C};
2.while |T| 3.min_value←+∞; 4. for each itemi∈Udo 5.tmpT←T∪{i}; 6. computevaluefrom Eq.(6)usingtmpT; 7. ifvalue 8.min_value←value;min_i←i; 9. end if 10. end for 11. movemin_ifromIintoT; 12.end while 3.2.3 最小化重構(gòu)誤差 在確定要保留哪些卷積核之后,通過(guò)通道的加權(quán)來(lái)進(jìn)一步減少重構(gòu)誤差: (7) 權(quán)重剪枝包括3個(gè)步驟: 1)評(píng)估權(quán)重的重要性.正常訓(xùn)練得出的權(quán)重被視為相對(duì)重要和不重要的權(quán)重. 2)設(shè)置一個(gè)閾值,將小于閾值的權(quán)重設(shè)置為零,此時(shí)網(wǎng)絡(luò)變?yōu)橄∈柽B接的網(wǎng)絡(luò). 3)重新訓(xùn)練這個(gè)稀疏網(wǎng)絡(luò)以獲得最終結(jié)果. 因數(shù)據(jù)量有限、訓(xùn)練參數(shù)多并且訓(xùn)練過(guò)度,卷積神經(jīng)網(wǎng)絡(luò)面臨過(guò)擬合的問(wèn)題,目前正則化和dropout是防止過(guò)擬合常用的兩種方法.正常訓(xùn)練網(wǎng)絡(luò)后,得到相對(duì)重要和不重要的權(quán)重;在權(quán)重剪枝時(shí),L1/L2正則化方法、卷積層和全連接層會(huì)具有不同的敏感度. 3.3.1 正則化 通過(guò)增加深度,網(wǎng)絡(luò)可以更好地近似損失函數(shù),增加非線性,獲得更好的特征表示.然而增加深度,網(wǎng)絡(luò)的復(fù)雜性也會(huì)增加,使得網(wǎng)絡(luò)難以優(yōu)化并且更易過(guò)擬合.使用L1 / L2正則化和dropout等生成稀疏權(quán)重的方法來(lái)訓(xùn)練大而密的網(wǎng)絡(luò),然后刪除網(wǎng)絡(luò)中貢獻(xiàn)較小的權(quán)重,即刪掉一些冗余連接.另外,防止過(guò)擬合的最直接方法是增加使用的數(shù)據(jù)集和縮小使用的網(wǎng)絡(luò)結(jié)構(gòu).但是,擴(kuò)大數(shù)據(jù)集并不簡(jiǎn)單.減少網(wǎng)絡(luò)結(jié)構(gòu)固然可以有效減少參數(shù)數(shù)量,但一般網(wǎng)絡(luò)越深,表達(dá)能力越強(qiáng).因此,正則化和dropout的使用旨在解決過(guò)擬合的問(wèn)題. L2 正則化是最常用的正則化方法,可表示為: (8) 其中C是正則化后的損失函數(shù),C0是原始的損失函數(shù).λ表示正則化因子.所以常用的交叉熵?fù)p失函數(shù)可以表示為: (9) 其中x代表樣本,n代表樣本總數(shù),y是實(shí)際值,a是輸出值.由上面的公式,正則化是通過(guò)在損失函數(shù)中加入權(quán)重懲罰因子來(lái)增加損失值以減小權(quán)重.使用正則化因子調(diào)整正則化:λ越大,越傾向于減小權(quán)重;λ越小,越傾向于減小原始的損失函數(shù).在剪枝過(guò)程的第一次訓(xùn)練中,確定權(quán)重的重要與否.正則化程度將影響權(quán)重的大小,從而影響網(wǎng)絡(luò)中的哪些連接需要進(jìn)行剪枝. 與L2正則化不同,dropout通過(guò)改變網(wǎng)絡(luò)結(jié)構(gòu)解決過(guò)擬合的問(wèn)題.在訓(xùn)練期間,dropout以一定概率將某些權(quán)重隨機(jī)置為零,通過(guò)設(shè)置隨機(jī)剪枝的概率,以增加網(wǎng)絡(luò)稀疏性加速收斂,可按公式(10)(11)計(jì)算: Ci=NiNi-1 (10) (11) 其中Ci表示第i層的連接數(shù),Ni表示第i層的神經(jīng)元數(shù)目,Cio表示原來(lái)的連接數(shù),Cir表示再訓(xùn)練時(shí)的連接數(shù),Do表示原始的 dropout. 3.3.2 敏感度 不同的正則化方法和不同類型的層在剪枝時(shí)具有的敏感度不同,因此它們的剪枝閾值對(duì)精確度也會(huì)有不同的影響.逐層對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行靈敏度分析,將權(quán)重置為零后對(duì)神經(jīng)網(wǎng)絡(luò)精度影響很小的部分.然后對(duì)權(quán)重進(jìn)行排序并設(shè)置一個(gè)閾值,將低于閾值的權(quán)重重置為零,保持這些權(quán)重不變,繼續(xù)訓(xùn)練直到模型精度恢復(fù),最后重復(fù)上述過(guò)程,通過(guò)增加閾值來(lái)增加模型中零的比例. 實(shí)驗(yàn)采用兩種數(shù)據(jù)集,MNIST[26]手寫(xiě)數(shù)字識(shí)別和用于物體識(shí)別的CIFAR-10[27].CNN架構(gòu)使用經(jīng)典的LeNet-5和VGG-16.MNIST數(shù)據(jù)集有60,000個(gè)訓(xùn)練集和10,000個(gè)測(cè)試集.CIFAR-10由10類60,000個(gè)32×32彩色圖像組成,每個(gè)類別有6000個(gè)圖像.有50,000個(gè)訓(xùn)練圖像和10,000個(gè)測(cè)試圖像.分別與原始網(wǎng)絡(luò),權(quán)重剪枝和卷積核剪枝結(jié)果進(jìn)行對(duì)比,驗(yàn)證混合剪枝方法的有效性.然后,將混合剪枝結(jié)果與現(xiàn)有方法(如APoZ,Weight sum和Taylor)進(jìn)行比較.本實(shí)驗(yàn)在PyTorch[28]環(huán)境下進(jìn)行. 實(shí)驗(yàn)中使用LeNet-5網(wǎng)絡(luò),它有兩個(gè)卷積層,兩個(gè)下采樣層,兩個(gè)FC層和一個(gè)分類層,在MNIST數(shù)據(jù)集上的錯(cuò)誤率為0.8%.在MNIST數(shù)據(jù)集上進(jìn)行剪枝和訓(xùn)練CNN.混合網(wǎng)絡(luò)剪枝與三個(gè)基準(zhǔn)比較: 1)原始模型:正常訓(xùn)練一個(gè)小的CNN不進(jìn)行剪枝. 2)權(quán)重剪枝:移除權(quán)重低于閾值的所有連接. 3)卷積核剪枝:移除重要性低的卷積核. 使用LeNet-5網(wǎng)絡(luò)在MNIST數(shù)據(jù)集上評(píng)估權(quán)重剪枝方法的性能.對(duì)于網(wǎng)絡(luò)中低于閾值的所有權(quán)重進(jìn)行剪枝獲得壓縮模型.如圖2所示,將LeNet-5上的存儲(chǔ)開(kāi)銷與不同的壓縮比進(jìn)行比較.在90%的壓縮率下最大的降低存儲(chǔ)代價(jià),精度僅下降0.18%. 使用LeNet-5網(wǎng)絡(luò)在MNIST數(shù)據(jù)集上評(píng)估卷積核剪枝方法的性能.從收集用于通道選擇的訓(xùn)練集開(kāi)始,從訓(xùn)練集中的每個(gè)類別中隨機(jī)選擇10個(gè)圖像構(gòu)成評(píng)估集.并且對(duì)于每個(gè)輸入圖像,用不同的通道和不同的空間位置隨機(jī)采樣10個(gè)實(shí)例.因此,總共有1000個(gè)訓(xùn)練樣本用于通過(guò)貪心算法找到最佳通道子集.實(shí)驗(yàn)證明了這種選擇的有效性(每個(gè)類10個(gè)圖像,每個(gè)圖像10個(gè)位置),足以進(jìn)行神經(jīng)元重要性評(píng)估.每層剪枝后微調(diào)一遍.當(dāng)所有層都被修剪完,微調(diào)10遍以獲得更高的準(zhǔn)確度. 圖2 不同壓縮率下存儲(chǔ)代價(jià)的比較Fig.2 Storage overhead comparison of different compression rate圖3 LeNet-5在MNIST上參數(shù)減少的統(tǒng)計(jì)數(shù)據(jù)Fig.3 Parameters reduction statistics for LeNet-5 on MNIST 使用LeNet-5網(wǎng)絡(luò)在MNIST數(shù)據(jù)集上評(píng)估混合剪枝方法的性能.卷積核剪枝的主要優(yōu)點(diǎn)是該方法能直接影響網(wǎng)絡(luò)結(jié)構(gòu)的大小,刪除對(duì)最后結(jié)果貢獻(xiàn)不大的卷積核得到的網(wǎng)絡(luò)可實(shí)現(xiàn)一定程度的壓縮.對(duì)剪枝后的模型,再進(jìn)行權(quán)重剪枝實(shí)現(xiàn)進(jìn)一步壓縮.如圖3所示,LeNet-5在MNIST上通過(guò)不同剪枝方法得到每層參數(shù)數(shù)量的對(duì)比.FC層可用全局平均池化層(global average pooling,GAP)替換,但MNIST數(shù)據(jù)集和LeNet-5網(wǎng)絡(luò)比較簡(jiǎn)單,因此本實(shí)驗(yàn)中保留了FC層.針對(duì)LeNet-5網(wǎng)絡(luò)剪枝,主要對(duì)conv2和FC1中的權(quán)重和卷積核進(jìn)行剪枝操作.實(shí)驗(yàn)結(jié)果表明,與僅進(jìn)行權(quán)重剪枝或卷積核剪枝相比,所提出的混合網(wǎng)絡(luò)剪枝方法可以顯著減少參數(shù)的數(shù)量. 表2 剪枝前后LeNet-5模型的性能變化Table 2 Performance changes of the LeNet-5 model before/after pruning 如表2所示,剪枝前后的LeNet-5模型的性能變化.對(duì)于LeNet-5模型,使用權(quán)重剪枝雖然可以實(shí)現(xiàn)較好的壓縮效果,但是沒(méi)有加速效果.使用卷積核剪枝,可以實(shí)現(xiàn)壓縮與加速,但是壓縮效果與權(quán)重剪枝相比效果略差.而使用所提出的混合剪枝方法可以實(shí)現(xiàn)13.01×壓縮和3.23×加速. VGG-16是一個(gè)16層的CNN,有13個(gè)卷積層和3個(gè)FC層,在CIFAR-10數(shù)據(jù)集上進(jìn)行剪枝和訓(xùn)練CNN.與4.1節(jié)類似,提出的混合剪枝方法與三種基準(zhǔn)在cifar10數(shù)據(jù)集上進(jìn)行對(duì)比實(shí)驗(yàn). 使用VGG-16網(wǎng)絡(luò)在cifar10數(shù)據(jù)集上評(píng)估權(quán)重剪枝的性能.創(chuàng)建和VGG-16相同的架構(gòu),但將掩碼和閾值變量添加到需要進(jìn)行剪枝的層.變量掩碼與網(wǎng)絡(luò)層的權(quán)重張量具有相同的形狀,確定哪些權(quán)重參與圖的正向執(zhí)行.然后,將操作添加到訓(xùn)練圖中,該圖監(jiān)視層中權(quán)重大小的分布并確定層閾值,掩蓋低于該閾值的所有權(quán)重,達(dá)到當(dāng)前訓(xùn)練步驟所需的稀疏度水平. 表3 剪枝前后VGG-16模型的性能變化Table 3 Performance changes of the VGG-16 model before/after pruning 使用VGG-16網(wǎng)絡(luò)在CIFAR-10數(shù)據(jù)集上評(píng)估卷積核剪枝方法的性能.CIFAR-10數(shù)據(jù)集包含從10個(gè)類別中抽取的50,000個(gè)訓(xùn)練圖像.收集用于通道選擇的訓(xùn)練集,然后從訓(xùn)練集中的每個(gè)類別中隨機(jī)選擇10個(gè)圖像以構(gòu)成我們的評(píng)估集.總共有1000個(gè)訓(xùn)練集用于通過(guò)貪婪算法找到最優(yōu)通道子集.微調(diào)期間,網(wǎng)絡(luò)每修剪一層后微調(diào)一遍.當(dāng)所有層都被剪枝后,微調(diào)15遍以恢復(fù)準(zhǔn)確性. 圖4 VGG-16在Cifar10上每層參數(shù)減少統(tǒng)計(jì)Fig.4 Parameters reduction statistics for VGG-16 on Cifar10 使用VGG-16網(wǎng)絡(luò)在cifar10數(shù)據(jù)集上評(píng)估混合剪枝方法的性能.首先移除不重要的卷積核,再對(duì)剪枝后的模型進(jìn)行權(quán)重剪枝實(shí)現(xiàn)進(jìn)一步的壓縮.如圖4所示,VGG-16在Cifar10數(shù)據(jù)集上通過(guò)不同剪枝方法得到每層參數(shù)剪枝數(shù)量的對(duì)比.結(jié)果表明,與僅使用權(quán)重剪枝或卷積核剪枝相比,所提出的混合剪枝方法顯著減少了參數(shù)的數(shù)量.VGG-16網(wǎng)絡(luò)的卷積層占有約90%的浮點(diǎn)運(yùn)算,而FC層有89.36%的參數(shù).出于模型加速的考慮,使用GAP層替換FC層會(huì)更簡(jiǎn)單有效.剪枝前后的VGG-16模型的性能變化如表3所示.與其它基準(zhǔn)相比,混合剪枝方法可以實(shí)現(xiàn)更好的壓縮與加速.對(duì)于VGG-16模型,使用所提出的混合剪枝方法可以實(shí)現(xiàn)19.20×壓縮和3.31×加速. 針對(duì)不同的卷積核選擇方法,在Dogs vs.Cats Kaggle數(shù)據(jù)集上對(duì)其性能進(jìn)行實(shí)驗(yàn)評(píng)估,該數(shù)據(jù)集包含25000張狗和貓的圖像.出于加速的考慮,使用GAP層替換FC層.因此,VGG-16中的所有FC層都將被刪除并在新數(shù)據(jù)集上進(jìn)行微調(diào).然后,在獲得該微調(diào)模型之后,以不同的壓縮率逐層對(duì)網(wǎng)絡(luò)剪枝.每一層剪枝之后微調(diào)一遍,最后一層剪枝完微調(diào)15遍以提高準(zhǔn)確性,使用不同的卷積核選擇策略重復(fù)該過(guò)程若干次.除了卷積核選擇標(biāo)準(zhǔn)外,其它所有設(shè)置均保持不變.在Dogs vs.Cats Kaggle數(shù)據(jù)集上針對(duì)不同卷積核選擇標(biāo)準(zhǔn)的剪枝結(jié)果,如圖5所示. 圖5 不同卷積核選擇標(biāo)準(zhǔn)的性能比較Fig.5 Performance comparison of different filter selection criteria 與其他選擇方法相比,Data-driven通道的選擇標(biāo)準(zhǔn)幾乎在整個(gè)剪枝比的范圍內(nèi)性能最優(yōu).與Data-driven的通道選擇標(biāo)準(zhǔn)相比,泰勒標(biāo)準(zhǔn)性能稍差.Random選擇標(biāo)準(zhǔn)表現(xiàn)出相當(dāng)好的性能.但是,這個(gè)標(biāo)準(zhǔn)魯棒性不好,并且在壓縮所有層之后精度非常低,在實(shí)踐中并不適用.Weight sum標(biāo)準(zhǔn)由于它只考慮權(quán)重的大小,具有相當(dāng)差的精度.實(shí)際上,去除大量小的卷積核也會(huì)對(duì)精度產(chǎn)生很大影響. 表4 在VGG-16上與現(xiàn)有方法的比較Table 4 Comparison with existing methods on VGG-16 將所提出的方法與幾種現(xiàn)有剪枝方法進(jìn)行比較,結(jié)果如表4所示.APoZ旨在減少參數(shù)數(shù)量,但其性能有限.相反,Taylor旨在模型加速,并且只對(duì)卷積層進(jìn)行剪枝.但計(jì)算過(guò)程可能非常耗時(shí),因此他們使用Taylor展開(kāi)來(lái)近似剪枝的優(yōu)化問(wèn)題.我們?cè)贒ata-driven的通道選擇方法基礎(chǔ)上進(jìn)行權(quán)重剪枝,最后得到的結(jié)果優(yōu)于其他方法. 在模型壓縮中,單獨(dú)使用權(quán)重剪枝或卷積核剪枝,壓縮后的卷積神經(jīng)網(wǎng)絡(luò)仍然存在參數(shù)冗余問(wèn)題,因此提出了一種結(jié)合卷積核剪枝和權(quán)重剪枝的混合剪枝方法.通過(guò)刪除不太重要的卷積核,達(dá)到壓縮網(wǎng)絡(luò)的初步目的;對(duì)剪枝過(guò)的模型再進(jìn)行權(quán)重剪枝實(shí)現(xiàn)進(jìn)一步的模型壓縮;剪枝過(guò)程中通過(guò)重新訓(xùn)練來(lái)恢復(fù)模型精度.實(shí)驗(yàn)結(jié)果表明,提出的混合剪枝方法可以有效減少CNN中存在的參數(shù)冗余,實(shí)現(xiàn)了網(wǎng)絡(luò)加速.進(jìn)一步的工作將在更深的神經(jīng)網(wǎng)絡(luò)上進(jìn)行實(shí)驗(yàn)以觀察模型壓縮的綜合性能.3.3 權(quán)重剪枝
4 實(shí)驗(yàn)結(jié)果及分析
4.1 LeNet-5剪枝結(jié)果與分析
4.2 VGG-16剪枝結(jié)果與分析
4.3 對(duì)比現(xiàn)有方法
5 結(jié) 論