【模型壓縮方法總覽】深度學習調研

模型壓縮原因

論文Predicting parameters in deep learning提出,其實在很多深度的神經網絡中存在着顯著的冗餘。僅僅使用很少一部分(5%)權值就足以預測剩餘的權值。該論文還提出這些剩下的權值甚至可以直接不用被學習。也就是說,僅僅訓練一小部分原來的權值參數就有可能達到和原來網絡相近甚至超過原來網絡的性能(可以看作一種正則化)。
Krizhevsky在2014年的文章中,提出了兩點觀察結論:卷積層佔據了大約90-95%的計算時間和參數規模,有較大的值;全連接層佔據了大約5-10%的計算時間,95%的參數規模,並且值較小。
50個卷積層的ResNet-50需要超過95MB的存儲器以及38億次浮點運算(電腦的執行效能)。在丟棄了一些冗餘的權重後,網絡仍照常工作,但節省了超過75%的參數和50%的計算時間。

模型壓縮分類

模型壓縮的主要方法
壓縮已有的網絡:
低秩近似
網絡剪枝
網絡量化
構建新的小網絡:
知識蒸餾
在訓練的初始階段:
設計緊湊的網絡結構

在這裏插入圖片描述

低秩近似(low-rank Approximation)

如果把原先網絡的權值矩陣當作滿秩矩陣來看,那麼是不是可以用多個低秩的矩陣來逼近原來的矩陣,以達到簡化的目的?答案是肯定的。原先稠密的滿秩矩陣可以表示爲若干個低秩矩陣的組合,低秩矩陣又可以分解爲小規模矩陣的乘積。
在這裏插入圖片描述

存在的問題:
現在越來越多網絡中採用1×1的卷積,而這種小的卷積使用矩陣分解的方法很難實現網絡加速和壓縮。

目前的主流:
2017、2018年的工作就只有Tensor Ring和Block Term分解在RNN的應用兩篇相關文章了。

網絡剪枝(network pruning)

網絡剪枝的主要思想就是將權重矩陣中相對“不重要”的權值剔除,然後再重新fine tune 網絡進行微調。

主要流程:
衡量神經元的重要程度
移除一部分不重要的神經元
對網絡進行微調
返回第一步,進行下一輪剪枝

在這裏插入圖片描述
包含了三階段的壓縮方法:修剪、量化(quantization)和霍夫曼編碼。修剪減少了需要編碼的權重數量,量化和霍夫曼編碼減少了用於對每個權重編碼的比特數。對於大部分元素爲0的矩陣可以使用稀疏表示,進一步降低空間冗餘,且這種壓縮機制不會帶來任何準確率損失。這篇論文獲得了ICLR2016 的Best Paper。

網絡量化(network quantization)

神經網絡模型的參數都是用的32bit長度的浮點型數表示,實際上不需要保留那麼高的精度,可以通過量化,比如用0~255表示原來32個bit所表示的精度,通過犧牲精度來降低每一個權值所需要佔用的空間。此外,SGD(Stochastic Gradient Descent)所需要的精度僅爲6~8bit,因此合理的量化網絡也可保證精度的情況下減小模型的存儲體積。

最爲典型就是二值網絡、XNOR網絡等。其主要原理就是採用1bit對網絡的輸入、權重、響應進行編碼。減少模型大小的同時,原始網絡的卷積操作可以被bit-wise運算代替,極大提升了模型的速度。但是,如果原始網絡結果不夠複雜(模型描述能力),由於二值網絡會較大程度降低模型的表達能力。因此現階段有相關的論文開始研究n-bit編碼方式成爲n值網絡或者多值網絡或者變bit、組合bit量化來克服二值網絡表達能力不足的缺點。

知識蒸餾(knowledge distillation)

蒸餾模型採用的是遷移學習,通過採用預先訓練好的複雜模型(Teacher model)的輸出作爲監督信號去訓練另外一個簡單的網絡。這個簡單的網絡稱之爲student model。

存在的問題和研究的趨勢
尋“知識”的不同形式,去除softmax的限制,研究趨向於選用中間特徵層
如何選擇特徵層,如何設計損失函數
訓練學生模型數據集的選擇
學生模型的設計
如何和其他壓縮方法集成

緊湊網絡設計(compact Network design)

mobilenet一系列,以深度可分解卷積爲基礎的壓縮網絡模型設計
在這裏插入圖片描述

參考文獻:
鏈接
鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章