原論文《 Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman coding》https://arxiv.org/abs/1510.00149;
摘要:
通過剪枝、權重共享和權重量化以及哈夫曼編碼等方法,作者在AlexNet和VGG-16 等模型上使用這些方法,可以在沒有精度損失的情況下,把alexnet模型參數壓縮35倍,把VGG模型參數壓縮49倍。
1、剪枝就是去掉一些不必要的網絡權重,只保留對網絡重要的權重參數
2、權值共享就是多個神經元的鏈接采用同一個權值,權重量化就是用更少的比特來標志一個權值
3、對權值進行哈夫曼編碼減少冗余
方法:
2.1 剪枝
剪枝生成稀疏矩陣:設置一個閾值,把小於閾值的鏈接設置為0,后續不在參與訓練,然后對網絡進行訓練,得到一個稀疏的權值矩陣。韓松論文,其余的:https://blog.csdn.net/weixin_36474809/article/details/80643784
2.2 代碼實現:
cafffe的代碼實現: https://github.com/may0324/DeepCompression-caffe;韓松的論文實現結果:https://github.com/songhan/Deep-Compression-AlexNet。定義了mask變量,對權重比較小的值,裁剪后設置mask位,后續迭代運算時不對裁剪的權重進行diff計算。
代碼中有計算mask 的函數。對權重取絕對值,然后排序,排序后根據設置的裁剪系數,確定需要裁剪權重的閾值。
代碼只對卷機層和全連接層做了裁剪處理,卷積層和全連接層的代碼分別實現在類 CmpConvolutionLayer和CmpInnerProductLayer ;
其中類CmpConvolutionLayer的實現如下:
前向計算計算時,會先和maskdata 做計算;被裁剪的權重不在參與計算,
后向梯度更新的時候,也不在參與梯度更新,需要更新的diff也會與mask計算;
全連接層的計算類似。