深度網絡模型壓縮綜述
文獻來源:雷傑,高鑫,宋傑,王興路,宋明黎.深度網絡模型壓縮綜述[J].軟件學報,2018,29(02):251-266.
摘要: 深度網絡近年來在計算機視覺任務上不斷刷新傳統模型的性能,已逐漸成為研究熱點.深度模型盡管性能強大,然而由於參數數量龐大、存儲和計算代價高,依然難以部署在受限的硬件平台上(如移動設備).模型的參數在一定程度上能夠表達其復雜性,相關研究表明,並不是所有的參數都在模型中發揮作用,部分參數作用有限、表達冗余,甚至會降低模型的性能.首先,對國內外學者在深度模型壓縮上取得的成果進行了分類整理,依此歸納了基於網絡剪枝、網絡精餾和網絡分解的方法;隨后,總結了相關方法在多種公開深度模型上的壓縮效果;最后,對未來的研究可能的方向和挑戰進行了展望.
一、網絡剪枝
網絡剪枝按剪枝粒度(pruning granularities)可分為4類,如圖所示。
- 中間隱層(layer)剪枝
- 通道(feature map/channel/filter)剪枝
- 卷積核(kernel)剪枝
- 核內權重(intra kernel weight)剪枝
- 單個權重剪枝

其中,Feature Map/Channel 都指網絡中一層產生的特征圖張量的一個通道.Filter是網絡中的權重參數,Feature Map 是網絡輸出,在網絡剪枝中兩者等價,因為減去一個Filter 會導致少產生一個Feature Map。
從剪枝目標上分類,可分為減少參數/網絡復雜度、減小過擬合/增加泛化能力/提高准確率、減小部署運行時間(test run-time)/提高網絡效率以及減小訓練時間等.不同的剪枝方法側重也會有所不同,有的剪枝方法完全依賴網絡參數,剪枝后不需要調優恢復准確率;有的剪枝方法則只適用於全連接層剪枝.
二、剪枝方法
2.1 單個權重粒度
將剪枝看作是將小權重置零的操作,手術恢復則相當於找到相似權重補償被置零的權重造成的激活值損失.兩個權重的相似程度定義如下:
其中:
- \(\varepsilon_{i,j}=W_i-W_j\),用來度量輸入節點i 和節點j 之間權重矢量的相似程度;
- \(<a^2_j>\)為輸出節點 j 權重的均值,表示節點 j 與 0 的接近程度.
整體剪枝步驟為:對所有可能權重矢量的組合,初始化時計算\(s_{i,j}\)構成的矩陣,找到矩陣中最小的一項\((i^′,j^′)\),刪去第\(j^′\)個神經元,並更新權重\(a_{j^′}←a_{i^′}+a_{j^′}\);然后,再通過簡單的刪除與疊加操作更新S矩陣,就完成了一次剪枝與手術恢復.
2.2 核內權重粒度
在第2.1 節中,網絡中的任意權重被看作是單個參數並進行隨機非結構化剪枝,該粒度的剪枝導致網絡連接不規整,需要通過稀疏表達來減少內存占用,進而導致在前向傳播預測時,需要大量的條件判斷和額外空間來標明零或非零參數的位置,因此不適用於並行計算。
Anwer等人\(^{[1]}\)提出了結構化剪枝的概念,可以很方便地使用現有的硬件和BLAS等軟件庫進行矩陣相乘,利用剪枝后網絡的稀疏性來加速網絡效率.粗粒度剪枝,如通道粒度和卷積核粒度本身就是結構化的,他的創新之處在於提出了核內定步長粒度(intra kernel strided sparsity),將細粒度剪枝轉化為結構化剪枝.
該方法首先隨機初始化步長m 和偏置n.考慮到卷積核一般選取\(k×k\) 的方陣,起始項的下標\((i,j)\)選為\(i=j=n\),則遍歷的位置如\((n,n),(n+m,n),(n,n+m)\)等.核內定步長粒度剪枝的關鍵思想在於:作用到同一輸入特征圖上的Kernel必須采用相同的步長和偏置.當卷積層不是稠密連接時,作用在不同特征圖上的Kernel步長與偏置可以不同,但是,如果卷積層的連接為一般的全連接(即一個特征圖需要被所有Kernel作用一遍再加和生成新的特征圖),那么所有Kernel必須采用相同的步長和偏置.這是由於只有相同的步長與偏置,才能在Lowering(cuDNN 中的im2col)操作時形成大小匹配的Lowering Kenrel Matrix,從而減小核矩陣和特征圖矩陣的大小,極大地節約計算資源.
2.3 卷積核粒度與通道粒度
具體步驟是減去第i層的filter,進而減去第i層產生的部分Feature Map和第i+1 層的部分Kernel.
圖中第i層卷積層的卷積核矩陣可以看作由\(n_i×n_{i+1}\)個k×k的卷積核組成(即圖中每一個網格).一個Filter作用在全部\(n_i\)個輸入Feature Map(即為Channel)上,產生1個新的Feature Map,因而\(n_{i+1}\)個Filter產生\(n_{i+1}\)個Feature Map.從而Filter將三維輸入\(x_i\)轉換為三維輸出\(x_{i+1}\).
FeatureMap 粒度的顯著性度量也可以簡單地選取Filter權重和作為顯著性度量,關鍵在於如何確定剪枝數量以及如何對網絡整體剪枝\(^{[2]}\).Li 等人提出了全局貪婪剪枝(holistic Global pruning)\(^{[3]}\),選取Filter權重和作為顯著性度量.對每一層中的Filter按照顯著性從大到小排序,進而畫出權重和關於排序后下標的曲線.若曲線陡峭,則在這一層減去更多的Filter;若曲線平緩,則減去較少的Filter,為剪枝數量提供了經驗性的指導.具體剪枝數量則作為超參數優化,在每一層剪枝數量確定之后,開始對整個網絡進行全局貪婪剪枝.全局是指在全部剪枝完成后,再通過一次訓練恢復准確率;貪婪是指減去上一層Filter后,更新下一層部分Kernel內的權重,從而在下一層剪枝時,已經減掉的Kernel不再對Filter貢獻任何顯著性.
三、網絡蒸餾
網絡蒸餾是指利用大量未標記的遷移數據(transfer data),讓小模型去擬合大模型,從而讓小模型學到與大模型相似的函數映射.網絡蒸餾可以看成在同一個域上遷移學習\(^{[4]}\)的一種特例,目的是獲得一個比原模型更為精簡的網絡。大模型作為教師模型(teacher model)是預先訓練好的,小模型作為學生模型(student model),由教師模型指導,步驟①首先由數據生成器生成大量的遷移數據(transfer data),分別送入教師模型和學生模型中.步驟②將教師模型的輸出作為真實值,衡量學生模型的輸出與它之間的損失.步驟③通過梯度下降等方法更新學生模型的權重,使得學生模型的輸出和教師模型的輸出更加接近,從而達到利用小模型擬合大模型的效果.
參考文獻
[1] Anwar S, Hwang K, Sung W. Structured pruning of deep convolutional neural networks. ACM Journal on Emerging Technologies in Computing Systems (JETC), 2017,13(3):Article No.32. [doi: 10.1145/3005348]
[2] Figurnov M, Ibraimova A, Vetrov DP, Kohli P. PerforatedCNNs: Acceleration through elimination of redundant convolutions. In:Proc. of the Advances in Neural Information Processing Systems (NIPS). Barcelona: IEEE, 2016. 947−955.
[3] Li H, Kadav A, Durdanovic I, Samet H, Graf HP. Pruning filters for efficient ConvNets. In: Proc. of the Int’l Conf. on Learning and Representation (ICLR). IEEE, 2017. 34−42.
[4] Pan SJ, Yang Q. A survey on transfer learning. IEEE Trans. on Knowledge and Data Engineering, 2010,22(10):1345−1359. [doi: 10.1109/TKDE.2009.191]