嚴陽春,郭榮佐,楊錦霞
(四川師范大學 計算機科學學院,成都 610101)
在近幾年,將卷積神經網絡模型部署到資源受限的設備上的需求逐漸增大,例如FPGA和移動手機等終端設備.同時,隨著模型的精度的不斷提高,其參數量和計算量也在不斷的增大.因此,在資源受限的終端設備上部署深層模型的難度逐漸提高,使其應用受到了很大的限制.為了打破這種限制,模型剪枝成為了一種在維持模型精度的情況下,十分有效地壓縮和加速模型的方法.模型剪枝通過剪除模型中不重要的參數,來減少模型的參數量和相關的計算量,從而使得模型輕量化.模型剪枝按照移除的粒度大小可以被分為兩種類別:非結構化剪枝[1]和結構化的剪枝[2].
非結構化剪枝是一種對每個權重單獨進行評估的方法,它將被認為是冗余的權重置為零并移除.這樣的方法雖然可以更加精準的判斷權重的重要性,但也存在著在實際應用中難以部署落地,無法有效壓縮加速模型的問題.非結構化的剪枝方法在剪掉不重要的權重后,會產生非結構化的稀疏,需要在支持稀疏矩陣計算的環境下才能實現剪枝效果.然而,對于資源受限的設備,例如FPGA,無法實現對于這些稀疏矩陣計算庫的支持,同時也會造成不規則的內存存取,可能會影響到計算的效率.
結構化的剪枝方法能很好的避開上述問題.其核心思想是通過對結構化的權重進行評估,例如過濾器,剪掉相對不重要的過濾器,以此減少模型的參數量和計算量[2].根據剪枝方式,結構化剪枝可以分為局部剪枝和全局剪枝.由于對過濾器評估后得到的評估值一般具有局部性,只能在層內進行比較,局部剪枝的方法要求使用者指定每層的剪枝比例.為了得到每層的剪枝比例,使用者需要進行敏感性分析,不斷地進行試錯[2,3].然而,全局剪枝的方法則不需要為每層設置剪枝比例.全局剪枝通過對具有局部性的評估值進行全局標準化,從而實現評估值的全局可比較.
模型剪枝的核心是如何定義權重的重要性.目前的方法在進行評估重要性時,例如,文獻[2]通過計算過濾器權重的L1范數值,只考慮了過濾器本身這部分的權重值,并沒有考慮到依賴過濾器而存在的關聯權重,這部分權重會隨著過濾器的消失而消失.因此,這些方法忽略了權重的關聯性.剪枝過程中,當過濾器的關聯權重較為重要,但卻隨著過濾器而被剪枝掉,這會造成一些本可以避免的損失.同時,局部剪枝的方法需要設定每層的剪枝比例,這個過程需要不斷的試錯,降低了效率.然而全局剪枝方式,關鍵點在于利用一種合適的標準化方式實現全局可比較.
為了解決上述的問題,本文提出了一種基于權重關聯性的卷積神經網絡模型剪枝方法.首先該方法在定義過濾器的重要性時,除了考慮到該過濾器本身,還考慮到該過濾器的輸出特征圖在下一層的關聯權重,即該過濾器的關聯權重.其次,該方法通過常見的權重評估方法L1范數來獲得該過濾器與其關聯權重的重要性.然后,通過對重要性進行全局標準化,實現重要性的全局可比較.最后,根據具體應用場景,設置整個模型的剪枝比例,即設置閾值,在全局重要性排序中,將重要性小于閾值的過濾器剪除,獲得緊湊的模型.本文提出的模型剪枝方法,采用結構化的剪枝方式,無需特殊的軟硬件環境支持,是一種簡單高效的模型壓縮方法.
模型剪枝可以使得存在冗余的模型自身變得更加緊湊,從而實現模型在推理上的加速和減少存儲的消耗.由于方法的普適性,最近,學術界和工業界將更多的目光投向了結構化剪枝.文獻[2]評估一個過濾器的重要性通過計算過濾器本身的L1范數值,同時由于采用的是局部剪枝的方法,需要設置每層的剪枝比例.文獻[4]提出了一種軟剪枝的方法,這種方法是一種訓練與剪枝相互交替進行的方式,將本該被移除的過濾器權重置為零后,使其在訓練時仍然繼續更新權重值,其評估方法采用的是計算過濾器本身的L2范數值.文獻[5]提出使用幾何中值距離來評估每個過濾器的可替代性,對于與其他過濾器的相對距離的總和較高的過濾器,被認為是可替代的,即是冗余的.該方法是在軟剪枝上做出的改進,將之前的對權重值大小的L2范數評估,改為了權重可替代性的評估.文獻[6]通過對每一層輸入少量圖像后計算特征圖的秩并以此排序,該方法認為秩越大的特征圖所包含的信息量越大,相應的過濾器應當被保留.以上提及的方法,評估得到的重要性具有局部性,只能在層內進行比較,采用的都是局部剪枝的方式,需要指定每層的剪枝比例.
目前,全局剪枝的方法由于可以避免設置層級的剪枝比例而獲得了越來越多的關注.文獻[7]在損失函數中增加了對于BN層縮放因子的約束,進而使模型中的縮放因子較為稀疏,然后使用縮放因子的值作為相應過濾器的全局重要性進行全局剪枝.文獻[8]提出了一種通過皮爾森相關系數來衡量過濾器間的可替代性的全局剪枝方法,為了提升效果,該方法在全局重要性上添加了一個層級的約束項.文獻[9]提出了一種可學習的全局排列重要性的方式,把L2范數值作為過濾器的重要性,所有層的標準化方式都設置為線性轉換,通過進化算法來求解每一層線性轉換的參數值,以此實現全局重要性排列.但是,上述的所有方法評估時都只考慮了過濾器本身,并沒有考慮到過濾器的關聯權重.
最近,個別方法注意到了權重的關聯性.文獻[10]將過濾器和過濾器的關聯權重拼接為一個約束項后添加到損失函數中,使得過濾器和它的關聯權重變得同時重要或同時冗余.為了得到更好的效果,該方法需要進行迭代地剪枝.盡管該方法取得了很好的效果,但是該方法無法實現在經過預先訓練后的模型上的壓縮加速,需要從頭開始訓練模型,這樣無疑增加了壓縮過程中的工作量.
怎么定義結構化權重的重要性無疑是整個結構化剪枝方法的核心.本節主要將通過常規的卷積神經網絡模型作為范例來主要介紹如何定義一個過濾器的重要性.
過濾器級別的模型剪枝是通過剪掉一部分重要性較低的過濾器,從而減少模型的參數量和計算量.可以發現,在剪掉一部分過濾器后,該過濾器的輸出特征圖在下一層的關聯權重也會隨之被剪掉,這一現象說明權重存在著的關聯性.之前的一些方法在評估過濾器權重的重要性時,只對過濾器本身進行了評估,并沒有將過濾器的關聯權重考慮進去一起進行評估,這樣可能會導致相對重要的關聯權重被剪掉,帶來一些原本可以避免的損失.因此,本文同時考慮對過濾器本身權重和該過濾器關聯權重進行評估,如圖1所示,定義一個過濾器

圖1 基于權重關聯性的過濾器評估Fig.1 Evaluation based on weight dependency for a filter
的重要性如公式(1)所示:
(1)

之前的許多模型剪枝方法都采用了“范數值假設”,即這些方法認為稀疏的權重向量范數值越小則越不重要[2,4].文獻[2]采用局部剪枝的方法的同時,通過L1范數來定義一個過濾器的重要性,如公式(2)所示:
(2)

(3)

由于“范數值假設”中范數值的計算結果取決于權重值,然而每層的權重提取的特征不同導致權重值的分布不同,因此,該假設得到的評估值只能在層內進行比較,具有局部性.為了實現全局比較,本文將公式(3)得到的評估值進行全局標準化.經過分析和實驗,本文提出通過“log”標準化方法實現全局可比較.本文對過濾器的評估值定義如公式(4)所示:
(4)

通過公式(4)獲得整個模型的過濾器的重要性集合M={Imp1,Imp2,…,Impn}后,根據預設的模型剪枝比例P和公式(5)得到剪枝的閾值,對每層的過濾器進行篩選:
θ=sortP(M)
(5)
其中,θ為整個模型過濾器重要性的閾值,sortP(M)表示將M進行升序排序,并返回n×P位置的數值作為閾值,n為整個模型的過濾器數量,P為百分數.
針對較為復雜的模型,本文在剪枝具體流程上做出了一定的適應性改變.例如,在 DenseNet的“dense block”結構中,下一層的輸入特征圖為前面一些卷積層的輸出特征圖的集合[11].由于前面層過濾器產生的特征圖不僅會輸入到緊鄰的下一層,還會作為輸入到接下來的一些層,存在著過濾器的“復用”.因此,在“dense block”中無法直接剪掉一個過濾器.在對DenseNet進行壓縮時,可以先將計算得到的過濾器本身的評估值看作特征圖的評估值,然后隨著特征圖輸入到不同的層,在不同的層中加上對應的關聯權重的評估值,然后仍然按照上述方法將估值進行全局標準化,并以此來剪掉特征圖,即是剪掉相應的關聯權重.最后,通過本文提出的剪枝算法可以得到更加緊湊的網絡模型.在進行較大比例的剪枝后,移除一部分的模型權重,對模型的精度可能會造成一些損失,可以通過對剪枝后的模型進行一定的微調,恢復模型的準確率.
本文提出的模型剪枝算法可以總結為以下3步:首先,通過所提出的算法計算得到模型所有過濾器的重要性;其次,對重要性進行排序,并通過指定模型的剪枝比例來移除重要性相對較小的過濾器權重;最后,對剪枝后的模型進行微調,恢復模型的精度.同時,可以選擇性地將該算法從如上所述的一次剪枝擴展為迭代剪枝的方法,重復上述的剪枝流程對模型進行壓縮.在擴展為迭代剪枝的方法后,可以將每次的模型的剪枝比例調低,重復對壓縮后的模型進行剪枝,使得剪枝流程更加平滑,模型更加緊湊.
為了驗證該模型剪枝算法的效果,本文在常見的公共數據集CIFAR-10和CIFAR-100上進行了實驗.這兩個數據集中圖片的大小為 32 × 32,CIFAR-10和CIFAR-100中分別含有10個和100個類別的圖片.它們的訓練集和測試集的數量分別為50000張和10000張.本文在一些常見的卷積神經網絡模型上測試了壓縮效果,包括:VGGNet[11]、ResNet[12]和DenseNet[13].特別地,本文在壓縮ResNet時,采用了更為輕量化的“bottleneck”結構[12].
參考之前的一些相關研究,本文將算法的評價指標設置為剪枝微調后的模型的準確率,以及相對于原模型,參數量的降低比例和計算量的降低比例.
本文的模型訓練都采用的隨機梯度下降(SGD)的方式進行優化,批量訓練數量(batch size)為64,設置訓練160個epoch.學習率的初始值為0.1,在訓練到50%和75%時,學習率的值會衰減到之前的1/10.權重衰減的值被設置為10-4,同時,動量系數被設置為0.9.
本文在CIFAR-10和CIFAR-100上的各個模型壓縮前后的測試結果如表1和表2所示,同時將實驗結果與目前的一些主流剪枝方法進行了比較.參數量和計算量減少比例分別代表的是剪枝算法在減少參數量和計算量上的效果,比例越大,說明壓縮和加速的效果越好,模型在推理時所消耗的空間和時間上的資源越少.

表1 在CIFAR-10上的測試結果Table 1 Test results on CIFAR-10

表2 在CIFAR-100上的測試結果Table 2 Test results on CIFAR-100
在實驗過程中,通過設置不同的剪枝比例,在準確率損失可以接受的前提下,選擇最大的剪枝比例.然后,多次實驗計算出準確率的平均值.實驗對VGG-16采用了50%或70%的剪枝率,對VGG-19采用了60%或80%的剪枝率,對ResNet-164采用了60%的剪枝率,以及對DenseNet-40采用了70%或80%的剪枝率.從實驗結果中可以看出,經過本文所提出的剪枝算法,模型的參數量和計算量都得到了一定的減少,但最重要的是,模型的精度卻沒有受到影響.在CIFAR-10數據集上,特別是在進行了較大比例的剪枝后,VGG-16、VGG-19和DenseNet-40分別獲得了8倍、14倍和4倍的壓縮,而模型的精度卻幾乎沒有損失,進一步的證明了原本模型的過度參數化,也驗證了本文所提出的剪枝方法的有效性.同時,相比于目前的一些主流剪枝方法,本文所提出的方法更加的高效,壓縮和加速的效果更加的好.
在全局剪枝算法中,不同的標準化的方式使得評估值在標準化后的值不同,這會使算法在剪枝時產生不同的效果.為了更好實現全局比較,本文提出對評估值進行“log”標準化.該標準化方式簡單有效,將評估值進行了非線性的轉換.將該標準化方式與常見的“max-min”標準化進行兩組在CIFAR-100數據集上的實驗對比,結果如表3所示,可以發現在對模型的壓縮和加速效果幾乎相同時,使用“log”標準化方式得到的緊湊模型的準確率要比使用“max-min”的更高.因此,使用“log”標準化方式能更加準確地將重要的過濾器權重保留,是一種相對高效的選擇.

表3 使用不同標準化方式的測試結果Table 3 Test results of using different normalization
在CIFAR-10數據集上訓練的VGG-16在剪枝前后,模型的準確率分別為93.68%和93.56%,可以發現模型在剪枝后精度上幾乎沒有損失.值得注意的是,模型在剪枝過程中參數量減少了87.5%,計算量減少了56.9%,壓縮和加速效果十分明顯.如圖2所示,模型剪枝前后卷積層各層的過濾器數量對比,可以看到剪枝操作主要發生在網絡的第一層和最后幾層,而中間層的參數在剪枝后有較大的保留,同時,模型在剪枝后被壓縮了近8倍,而準確率僅降低了0.12%,模型精度幾乎沒有損失.因此,可以通過分析得到,模型的大部分的重要性較低的參數集中在模型較深的網絡層.
同時,從圖2中可以看出,模型剪枝之后,模型結構呈現的是兩端窄,中間寬的特點,尤其最后幾層保留的過濾器數量較少.這表明模型在該任務下,較為深層的網絡結構存在著大量的冗余.因此在針對具體任務時,本文提出的剪枝方法也可以看作一種針對任務的最佳網絡結構搜索方法,通過剪枝前后模型結構的對比,可以驗證當前模型設定是否冗余,從而發現更為緊湊高效的網絡結構.

圖2 VGG-16中各卷積層過濾器數量剪枝前后對比Fig.2 Number of filters before and after pruning in VGG-16
在對一個訓練完成后的模型進行剪枝時,需要根據具體情況設定一個對于整個模型的剪枝比例.如果這個比例設置得過大,會使得一些相對重要的權重也被減去,模型精度的損失較大,并且可能微調后精度也不能被恢復.然而,如果這個比例設置得過小,會使得減掉的過濾器權重數量較少,剪枝效果不明顯.本文通過DenseNet-40在CIFAR-10上進行實驗來分析剪枝比例的設定,結果如圖3所示.

圖3 DenseNet-40在CIFAR-10上的剪枝比例分析Fig.3 Analysis of pruning ratio from DenseNet-40 trained on CIFAR-10
在圖3中,橫軸為模型的剪枝比例,縱軸為測試時的錯誤率.通過分析可以發現,當剪枝比例超過一定閾值后,剪枝后或者微調后的模型測試時的錯誤率會急劇上升.雖然微調能使得剪枝后的模型的性能得到一定恢復,但如果剪枝的比例設置在80%這個閾值以上,可以看出微調后模型在測試時的錯誤率超過正常訓練后的錯誤率這條基準線,急劇上升.
目前,深度卷積神經網絡模型應用廣泛,但在推理時,其消耗的資源巨大.本文提出了一種基于權重的關聯性的卷積神經網絡模型剪枝方法,在評估一個過濾器的重要性時,將對過濾器的關聯權重的評估考慮進去,避免了關聯權重較為重要但卻被移除所帶來的損失.通過計算L1范數得到基于權重的關聯性的過濾器評估值后,由于評估值具有局部性,無法實現全局比較.本文提出使用特定的標準化的方式對評估值進行處理,以此實現全局可比較.對多種模型進行實驗,結果表明,所提出的剪枝方法可以有效地壓縮和加速模型,并且模型推理時的準確率幾乎沒有損失.特別地,在CIFAR-10數據集上,剪枝后的VGG-19模型減少了92.9%的參數量和69%的計算量,模型的準確率只損失了0.34%.
同時,本文的所提出的方法不需要特殊的軟硬件環境支持即可部署應用,該方法高效地實現了對模型的壓縮和加速.下一步將研究模型剪枝與其他模型壓縮方法的結合,比如知識蒸餾,量化等,進一步使得模型更加輕量化.