嚴(yán)陽春,郭榮佐,楊錦霞
(四川師范大學(xué) 計算機(jī)科學(xué)學(xué)院,成都 610101)
在近幾年,將卷積神經(jīng)網(wǎng)絡(luò)模型部署到資源受限的設(shè)備上的需求逐漸增大,例如FPGA和移動手機(jī)等終端設(shè)備.同時,隨著模型的精度的不斷提高,其參數(shù)量和計算量也在不斷的增大.因此,在資源受限的終端設(shè)備上部署深層模型的難度逐漸提高,使其應(yīng)用受到了很大的限制.為了打破這種限制,模型剪枝成為了一種在維持模型精度的情況下,十分有效地壓縮和加速模型的方法.模型剪枝通過剪除模型中不重要的參數(shù),來減少模型的參數(shù)量和相關(guān)的計算量,從而使得模型輕量化.模型剪枝按照移除的粒度大小可以被分為兩種類別:非結(jié)構(gòu)化剪枝[1]和結(jié)構(gòu)化的剪枝[2].
非結(jié)構(gòu)化剪枝是一種對每個權(quán)重單獨進(jìn)行評估的方法,它將被認(rèn)為是冗余的權(quán)重置為零并移除.這樣的方法雖然可以更加精準(zhǔn)的判斷權(quán)重的重要性,但也存在著在實際應(yīng)用中難以部署落地,無法有效壓縮加速模型的問題.非結(jié)構(gòu)化的剪枝方法在剪掉不重要的權(quán)重后,會產(chǎn)生非結(jié)構(gòu)化的稀疏,需要在支持稀疏矩陣計算的環(huán)境下才能實現(xiàn)剪枝效果.然而,對于資源受限的設(shè)備,例如FPGA,無法實現(xiàn)對于這些稀疏矩陣計算庫的支持,同時也會造成不規(guī)則的內(nèi)存存取,可能會影響到計算的效率.
結(jié)構(gòu)化的剪枝方法能很好的避開上述問題.其核心思想是通過對結(jié)構(gòu)化的權(quán)重進(jìn)行評估,例如過濾器,剪掉相對不重要的過濾器,以此減少模型的參數(shù)量和計算量[2].根據(jù)剪枝方式,結(jié)構(gòu)化剪枝可以分為局部剪枝和全局剪枝.由于對過濾器評估后得到的評估值一般具有局部性,只能在層內(nèi)進(jìn)行比較,局部剪枝的方法要求使用者指定每層的剪枝比例.為了得到每層的剪枝比例,使用者需要進(jìn)行敏感性分析,不斷地進(jìn)行試錯[2,3].然而,全局剪枝的方法則不需要為每層設(shè)置剪枝比例.全局剪枝通過對具有局部性的評估值進(jìn)行全局標(biāo)準(zhǔn)化,從而實現(xiàn)評估值的全局可比較.
模型剪枝的核心是如何定義權(quán)重的重要性.目前的方法在進(jìn)行評估重要性時,例如,文獻(xiàn)[2]通過計算過濾器權(quán)重的L1范數(shù)值,只考慮了過濾器本身這部分的權(quán)重值,并沒有考慮到依賴過濾器而存在的關(guān)聯(lián)權(quán)重,這部分權(quán)重會隨著過濾器的消失而消失.因此,這些方法忽略了權(quán)重的關(guān)聯(lián)性.剪枝過程中,當(dāng)過濾器的關(guān)聯(lián)權(quán)重較為重要,但卻隨著過濾器而被剪枝掉,這會造成一些本可以避免的損失.同時,局部剪枝的方法需要設(shè)定每層的剪枝比例,這個過程需要不斷的試錯,降低了效率.然而全局剪枝方式,關(guān)鍵點在于利用一種合適的標(biāo)準(zhǔn)化方式實現(xiàn)全局可比較.
為了解決上述的問題,本文提出了一種基于權(quán)重關(guān)聯(lián)性的卷積神經(jīng)網(wǎng)絡(luò)模型剪枝方法.首先該方法在定義過濾器的重要性時,除了考慮到該過濾器本身,還考慮到該過濾器的輸出特征圖在下一層的關(guān)聯(lián)權(quán)重,即該過濾器的關(guān)聯(lián)權(quán)重.其次,該方法通過常見的權(quán)重評估方法L1范數(shù)來獲得該過濾器與其關(guān)聯(lián)權(quán)重的重要性.然后,通過對重要性進(jìn)行全局標(biāo)準(zhǔn)化,實現(xiàn)重要性的全局可比較.最后,根據(jù)具體應(yīng)用場景,設(shè)置整個模型的剪枝比例,即設(shè)置閾值,在全局重要性排序中,將重要性小于閾值的過濾器剪除,獲得緊湊的模型.本文提出的模型剪枝方法,采用結(jié)構(gòu)化的剪枝方式,無需特殊的軟硬件環(huán)境支持,是一種簡單高效的模型壓縮方法.
模型剪枝可以使得存在冗余的模型自身變得更加緊湊,從而實現(xiàn)模型在推理上的加速和減少存儲的消耗.由于方法的普適性,最近,學(xué)術(shù)界和工業(yè)界將更多的目光投向了結(jié)構(gòu)化剪枝.文獻(xiàn)[2]評估一個過濾器的重要性通過計算過濾器本身的L1范數(shù)值,同時由于采用的是局部剪枝的方法,需要設(shè)置每層的剪枝比例.文獻(xiàn)[4]提出了一種軟剪枝的方法,這種方法是一種訓(xùn)練與剪枝相互交替進(jìn)行的方式,將本該被移除的過濾器權(quán)重置為零后,使其在訓(xùn)練時仍然繼續(xù)更新權(quán)重值,其評估方法采用的是計算過濾器本身的L2范數(shù)值.文獻(xiàn)[5]提出使用幾何中值距離來評估每個過濾器的可替代性,對于與其他過濾器的相對距離的總和較高的過濾器,被認(rèn)為是可替代的,即是冗余的.該方法是在軟剪枝上做出的改進(jìn),將之前的對權(quán)重值大小的L2范數(shù)評估,改為了權(quán)重可替代性的評估.文獻(xiàn)[6]通過對每一層輸入少量圖像后計算特征圖的秩并以此排序,該方法認(rèn)為秩越大的特征圖所包含的信息量越大,相應(yīng)的過濾器應(yīng)當(dāng)被保留.以上提及的方法,評估得到的重要性具有局部性,只能在層內(nèi)進(jìn)行比較,采用的都是局部剪枝的方式,需要指定每層的剪枝比例.
目前,全局剪枝的方法由于可以避免設(shè)置層級的剪枝比例而獲得了越來越多的關(guān)注.文獻(xiàn)[7]在損失函數(shù)中增加了對于BN層縮放因子的約束,進(jìn)而使模型中的縮放因子較為稀疏,然后使用縮放因子的值作為相應(yīng)過濾器的全局重要性進(jìn)行全局剪枝.文獻(xiàn)[8]提出了一種通過皮爾森相關(guān)系數(shù)來衡量過濾器間的可替代性的全局剪枝方法,為了提升效果,該方法在全局重要性上添加了一個層級的約束項.文獻(xiàn)[9]提出了一種可學(xué)習(xí)的全局排列重要性的方式,把L2范數(shù)值作為過濾器的重要性,所有層的標(biāo)準(zhǔn)化方式都設(shè)置為線性轉(zhuǎn)換,通過進(jìn)化算法來求解每一層線性轉(zhuǎn)換的參數(shù)值,以此實現(xiàn)全局重要性排列.但是,上述的所有方法評估時都只考慮了過濾器本身,并沒有考慮到過濾器的關(guān)聯(lián)權(quán)重.
最近,個別方法注意到了權(quán)重的關(guān)聯(lián)性.文獻(xiàn)[10]將過濾器和過濾器的關(guān)聯(lián)權(quán)重拼接為一個約束項后添加到損失函數(shù)中,使得過濾器和它的關(guān)聯(lián)權(quán)重變得同時重要或同時冗余.為了得到更好的效果,該方法需要進(jìn)行迭代地剪枝.盡管該方法取得了很好的效果,但是該方法無法實現(xiàn)在經(jīng)過預(yù)先訓(xùn)練后的模型上的壓縮加速,需要從頭開始訓(xùn)練模型,這樣無疑增加了壓縮過程中的工作量.
怎么定義結(jié)構(gòu)化權(quán)重的重要性無疑是整個結(jié)構(gòu)化剪枝方法的核心.本節(jié)主要將通過常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)模型作為范例來主要介紹如何定義一個過濾器的重要性.
過濾器級別的模型剪枝是通過剪掉一部分重要性較低的過濾器,從而減少模型的參數(shù)量和計算量.可以發(fā)現(xiàn),在剪掉一部分過濾器后,該過濾器的輸出特征圖在下一層的關(guān)聯(lián)權(quán)重也會隨之被剪掉,這一現(xiàn)象說明權(quán)重存在著的關(guān)聯(lián)性.之前的一些方法在評估過濾器權(quán)重的重要性時,只對過濾器本身進(jìn)行了評估,并沒有將過濾器的關(guān)聯(lián)權(quán)重考慮進(jìn)去一起進(jìn)行評估,這樣可能會導(dǎo)致相對重要的關(guān)聯(lián)權(quán)重被剪掉,帶來一些原本可以避免的損失.因此,本文同時考慮對過濾器本身權(quán)重和該過濾器關(guān)聯(lián)權(quán)重進(jìn)行評估,如圖1所示,定義一個過濾器
圖1 基于權(quán)重關(guān)聯(lián)性的過濾器評估Fig.1 Evaluation based on weight dependency for a filter
的重要性如公式(1)所示:
(1)
之前的許多模型剪枝方法都采用了“范數(shù)值假設(shè)”,即這些方法認(rèn)為稀疏的權(quán)重向量范數(shù)值越小則越不重要[2,4].文獻(xiàn)[2]采用局部剪枝的方法的同時,通過L1范數(shù)來定義一個過濾器的重要性,如公式(2)所示:
(2)
(3)
由于“范數(shù)值假設(shè)”中范數(shù)值的計算結(jié)果取決于權(quán)重值,然而每層的權(quán)重提取的特征不同導(dǎo)致權(quán)重值的分布不同,因此,該假設(shè)得到的評估值只能在層內(nèi)進(jìn)行比較,具有局部性.為了實現(xiàn)全局比較,本文將公式(3)得到的評估值進(jìn)行全局標(biāo)準(zhǔn)化.經(jīng)過分析和實驗,本文提出通過“l(fā)og”標(biāo)準(zhǔn)化方法實現(xiàn)全局可比較.本文對過濾器的評估值定義如公式(4)所示:
(4)
通過公式(4)獲得整個模型的過濾器的重要性集合M={Imp1,Imp2,…,Impn}后,根據(jù)預(yù)設(shè)的模型剪枝比例P和公式(5)得到剪枝的閾值,對每層的過濾器進(jìn)行篩選:
θ=sortP(M)
(5)
其中,θ為整個模型過濾器重要性的閾值,sortP(M)表示將M進(jìn)行升序排序,并返回n×P位置的數(shù)值作為閾值,n為整個模型的過濾器數(shù)量,P為百分?jǐn)?shù).
針對較為復(fù)雜的模型,本文在剪枝具體流程上做出了一定的適應(yīng)性改變.例如,在 DenseNet的“dense block”結(jié)構(gòu)中,下一層的輸入特征圖為前面一些卷積層的輸出特征圖的集合[11].由于前面層過濾器產(chǎn)生的特征圖不僅會輸入到緊鄰的下一層,還會作為輸入到接下來的一些層,存在著過濾器的“復(fù)用”.因此,在“dense block”中無法直接剪掉一個過濾器.在對DenseNet進(jìn)行壓縮時,可以先將計算得到的過濾器本身的評估值看作特征圖的評估值,然后隨著特征圖輸入到不同的層,在不同的層中加上對應(yīng)的關(guān)聯(lián)權(quán)重的評估值,然后仍然按照上述方法將估值進(jìn)行全局標(biāo)準(zhǔn)化,并以此來剪掉特征圖,即是剪掉相應(yīng)的關(guān)聯(lián)權(quán)重.最后,通過本文提出的剪枝算法可以得到更加緊湊的網(wǎng)絡(luò)模型.在進(jìn)行較大比例的剪枝后,移除一部分的模型權(quán)重,對模型的精度可能會造成一些損失,可以通過對剪枝后的模型進(jìn)行一定的微調(diào),恢復(fù)模型的準(zhǔn)確率.
本文提出的模型剪枝算法可以總結(jié)為以下3步:首先,通過所提出的算法計算得到模型所有過濾器的重要性;其次,對重要性進(jìn)行排序,并通過指定模型的剪枝比例來移除重要性相對較小的過濾器權(quán)重;最后,對剪枝后的模型進(jìn)行微調(diào),恢復(fù)模型的精度.同時,可以選擇性地將該算法從如上所述的一次剪枝擴(kuò)展為迭代剪枝的方法,重復(fù)上述的剪枝流程對模型進(jìn)行壓縮.在擴(kuò)展為迭代剪枝的方法后,可以將每次的模型的剪枝比例調(diào)低,重復(fù)對壓縮后的模型進(jìn)行剪枝,使得剪枝流程更加平滑,模型更加緊湊.
為了驗證該模型剪枝算法的效果,本文在常見的公共數(shù)據(jù)集CIFAR-10和CIFAR-100上進(jìn)行了實驗.這兩個數(shù)據(jù)集中圖片的大小為 32 × 32,CIFAR-10和CIFAR-100中分別含有10個和100個類別的圖片.它們的訓(xùn)練集和測試集的數(shù)量分別為50000張和10000張.本文在一些常見的卷積神經(jīng)網(wǎng)絡(luò)模型上測試了壓縮效果,包括:VGGNet[11]、ResNet[12]和DenseNet[13].特別地,本文在壓縮ResNet時,采用了更為輕量化的“bottleneck”結(jié)構(gòu)[12].
參考之前的一些相關(guān)研究,本文將算法的評價指標(biāo)設(shè)置為剪枝微調(diào)后的模型的準(zhǔn)確率,以及相對于原模型,參數(shù)量的降低比例和計算量的降低比例.
本文的模型訓(xùn)練都采用的隨機(jī)梯度下降(SGD)的方式進(jìn)行優(yōu)化,批量訓(xùn)練數(shù)量(batch size)為64,設(shè)置訓(xùn)練160個epoch.學(xué)習(xí)率的初始值為0.1,在訓(xùn)練到50%和75%時,學(xué)習(xí)率的值會衰減到之前的1/10.權(quán)重衰減的值被設(shè)置為10-4,同時,動量系數(shù)被設(shè)置為0.9.
本文在CIFAR-10和CIFAR-100上的各個模型壓縮前后的測試結(jié)果如表1和表2所示,同時將實驗結(jié)果與目前的一些主流剪枝方法進(jìn)行了比較.參數(shù)量和計算量減少比例分別代表的是剪枝算法在減少參數(shù)量和計算量上的效果,比例越大,說明壓縮和加速的效果越好,模型在推理時所消耗的空間和時間上的資源越少.
表1 在CIFAR-10上的測試結(jié)果Table 1 Test results on CIFAR-10
表2 在CIFAR-100上的測試結(jié)果Table 2 Test results on CIFAR-100
在實驗過程中,通過設(shè)置不同的剪枝比例,在準(zhǔn)確率損失可以接受的前提下,選擇最大的剪枝比例.然后,多次實驗計算出準(zhǔn)確率的平均值.實驗對VGG-16采用了50%或70%的剪枝率,對VGG-19采用了60%或80%的剪枝率,對ResNet-164采用了60%的剪枝率,以及對DenseNet-40采用了70%或80%的剪枝率.從實驗結(jié)果中可以看出,經(jīng)過本文所提出的剪枝算法,模型的參數(shù)量和計算量都得到了一定的減少,但最重要的是,模型的精度卻沒有受到影響.在CIFAR-10數(shù)據(jù)集上,特別是在進(jìn)行了較大比例的剪枝后,VGG-16、VGG-19和DenseNet-40分別獲得了8倍、14倍和4倍的壓縮,而模型的精度卻幾乎沒有損失,進(jìn)一步的證明了原本模型的過度參數(shù)化,也驗證了本文所提出的剪枝方法的有效性.同時,相比于目前的一些主流剪枝方法,本文所提出的方法更加的高效,壓縮和加速的效果更加的好.
在全局剪枝算法中,不同的標(biāo)準(zhǔn)化的方式使得評估值在標(biāo)準(zhǔn)化后的值不同,這會使算法在剪枝時產(chǎn)生不同的效果.為了更好實現(xiàn)全局比較,本文提出對評估值進(jìn)行“l(fā)og”標(biāo)準(zhǔn)化.該標(biāo)準(zhǔn)化方式簡單有效,將評估值進(jìn)行了非線性的轉(zhuǎn)換.將該標(biāo)準(zhǔn)化方式與常見的“max-min”標(biāo)準(zhǔn)化進(jìn)行兩組在CIFAR-100數(shù)據(jù)集上的實驗對比,結(jié)果如表3所示,可以發(fā)現(xiàn)在對模型的壓縮和加速效果幾乎相同時,使用“l(fā)og”標(biāo)準(zhǔn)化方式得到的緊湊模型的準(zhǔn)確率要比使用“max-min”的更高.因此,使用“l(fā)og”標(biāo)準(zhǔn)化方式能更加準(zhǔn)確地將重要的過濾器權(quán)重保留,是一種相對高效的選擇.
表3 使用不同標(biāo)準(zhǔn)化方式的測試結(jié)果Table 3 Test results of using different normalization
在CIFAR-10數(shù)據(jù)集上訓(xùn)練的VGG-16在剪枝前后,模型的準(zhǔn)確率分別為93.68%和93.56%,可以發(fā)現(xiàn)模型在剪枝后精度上幾乎沒有損失.值得注意的是,模型在剪枝過程中參數(shù)量減少了87.5%,計算量減少了56.9%,壓縮和加速效果十分明顯.如圖2所示,模型剪枝前后卷積層各層的過濾器數(shù)量對比,可以看到剪枝操作主要發(fā)生在網(wǎng)絡(luò)的第一層和最后幾層,而中間層的參數(shù)在剪枝后有較大的保留,同時,模型在剪枝后被壓縮了近8倍,而準(zhǔn)確率僅降低了0.12%,模型精度幾乎沒有損失.因此,可以通過分析得到,模型的大部分的重要性較低的參數(shù)集中在模型較深的網(wǎng)絡(luò)層.
同時,從圖2中可以看出,模型剪枝之后,模型結(jié)構(gòu)呈現(xiàn)的是兩端窄,中間寬的特點,尤其最后幾層保留的過濾器數(shù)量較少.這表明模型在該任務(wù)下,較為深層的網(wǎng)絡(luò)結(jié)構(gòu)存在著大量的冗余.因此在針對具體任務(wù)時,本文提出的剪枝方法也可以看作一種針對任務(wù)的最佳網(wǎng)絡(luò)結(jié)構(gòu)搜索方法,通過剪枝前后模型結(jié)構(gòu)的對比,可以驗證當(dāng)前模型設(shè)定是否冗余,從而發(fā)現(xiàn)更為緊湊高效的網(wǎng)絡(luò)結(jié)構(gòu).
圖2 VGG-16中各卷積層過濾器數(shù)量剪枝前后對比Fig.2 Number of filters before and after pruning in VGG-16
在對一個訓(xùn)練完成后的模型進(jìn)行剪枝時,需要根據(jù)具體情況設(shè)定一個對于整個模型的剪枝比例.如果這個比例設(shè)置得過大,會使得一些相對重要的權(quán)重也被減去,模型精度的損失較大,并且可能微調(diào)后精度也不能被恢復(fù).然而,如果這個比例設(shè)置得過小,會使得減掉的過濾器權(quán)重數(shù)量較少,剪枝效果不明顯.本文通過DenseNet-40在CIFAR-10上進(jìn)行實驗來分析剪枝比例的設(shè)定,結(jié)果如圖3所示.
圖3 DenseNet-40在CIFAR-10上的剪枝比例分析Fig.3 Analysis of pruning ratio from DenseNet-40 trained on CIFAR-10
在圖3中,橫軸為模型的剪枝比例,縱軸為測試時的錯誤率.通過分析可以發(fā)現(xiàn),當(dāng)剪枝比例超過一定閾值后,剪枝后或者微調(diào)后的模型測試時的錯誤率會急劇上升.雖然微調(diào)能使得剪枝后的模型的性能得到一定恢復(fù),但如果剪枝的比例設(shè)置在80%這個閾值以上,可以看出微調(diào)后模型在測試時的錯誤率超過正常訓(xùn)練后的錯誤率這條基準(zhǔn)線,急劇上升.
目前,深度卷積神經(jīng)網(wǎng)絡(luò)模型應(yīng)用廣泛,但在推理時,其消耗的資源巨大.本文提出了一種基于權(quán)重的關(guān)聯(lián)性的卷積神經(jīng)網(wǎng)絡(luò)模型剪枝方法,在評估一個過濾器的重要性時,將對過濾器的關(guān)聯(lián)權(quán)重的評估考慮進(jìn)去,避免了關(guān)聯(lián)權(quán)重較為重要但卻被移除所帶來的損失.通過計算L1范數(shù)得到基于權(quán)重的關(guān)聯(lián)性的過濾器評估值后,由于評估值具有局部性,無法實現(xiàn)全局比較.本文提出使用特定的標(biāo)準(zhǔn)化的方式對評估值進(jìn)行處理,以此實現(xiàn)全局可比較.對多種模型進(jìn)行實驗,結(jié)果表明,所提出的剪枝方法可以有效地壓縮和加速模型,并且模型推理時的準(zhǔn)確率幾乎沒有損失.特別地,在CIFAR-10數(shù)據(jù)集上,剪枝后的VGG-19模型減少了92.9%的參數(shù)量和69%的計算量,模型的準(zhǔn)確率只損失了0.34%.
同時,本文的所提出的方法不需要特殊的軟硬件環(huán)境支持即可部署應(yīng)用,該方法高效地實現(xiàn)了對模型的壓縮和加速.下一步將研究模型剪枝與其他模型壓縮方法的結(jié)合,比如知識蒸餾,量化等,進(jìn)一步使得模型更加輕量化.