兩派
1. 新的卷機計算方法
這種是直接提出新的卷機計算方式,從而減少參數,達到壓縮模型的效果,例如SqueezedNet,mobileNet
- SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
修改網絡結構,類似於mobileNet
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
修改卷機計算方式,depth-wise 卷積
2. 已訓練好的模型上做裁剪
這種就是在訓練好的模型上做一些修改,然后在fine-tuning到原來的准確率,主要有一些方法
-
剪枝:神經網絡是由一層一層的節點通過邊連接,每個邊上會有權重,所謂剪枝,就是當我們發現某些邊上的權重很小,可以認為這樣的邊不重要,進而可以去掉這些邊。在訓練的過程中,在訓練完大模型之后,看看哪些邊的權值比較小,把這些邊去掉,然后繼續訓練模型;
-
權值共享:就是讓一些邊共用一個權值,達到縮減參數個數的目的。假設相鄰兩層之間是全連接,每層有1000個節點,那么這兩層之間就有1000*1000=100萬個權重參數。可以將這一百萬個權值做聚類,利用每一類的均值代替這一類中的每個權值大小,這樣同屬於一類的很多邊共享相同的權值,假設把一百萬個權值聚成一千類,則可以把參數個數從一百萬降到一千個。
-
量化:一般而言,神經網絡模型的參數都是用的32bit長度的浮點型數表示,實際上不需要保留那么高的精度,可以通過量化,比如用0~255表示原來32個bit所表示的精度,通過犧牲精度來降低每一個權值所需要占用的空間。
-
神經網絡二值化:比量化更為極致的做法就是神經網絡二值化,也即將所有的權值不用浮點數表示了,用二進制的數表示,要么是+1,要么是-1,用二進制的方式表示,原來一個32bit權值現在只需要一個bit就可以表示,可以大大減小模型尺寸。
- XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
網絡權重二值化、輸入二值化,從頭開始訓練一個二值化網絡,不是在已有的網絡上二值化
- Learning both Weights and Connections for Efficient Neural Networks
學習重要的連接,根據連接的權重進行裁剪,fine-tuning讓網絡保持稀疏的連接
- Exploiting linear structure within convolutional networks for efficient evaluation.
對已經訓練好的網絡應用奇異值分解
- Eie: Efficient inference engine on compressed deep neural network.
加速器
- Deep compression: Compressing DNNs with pruning, trained quantization and huffman coding.
裁剪(閾值)、量化(8bit,存儲方式)、哈夫曼編碼
http://blog.csdn.net/may0324/article/details/52935869
- Deep Model Compression: Distilling Knowledge from Noisy Teachers
Teacher-student Framework,一個網絡指導另外一個網絡的訓練
- PerforatedCNNs: Acceleration through Elimination of Redundant Convolutions
在一些稀疏位置跳過CNN求值,加速效果不明顯,且不能壓縮模型
- Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1
訓練二值化網絡
https://tensortalk.com/?cat=model-compression-parameter-pruning
- PRUNING FILTERS FOR EFFICIENT CONVNETS
計算filter的L1范數,直接過濾掉較小L1范數對應的feature map, 然后再次訓練,有兩種,一是每裁剪一層訓練一下,一是直接裁剪整個網絡,然后fine-tuning. 相比權值連接的裁剪,這種比較暴力,好處就是不會引入稀疏矩陣的計算,從而也不需要稀疏矩陣庫,壞處就是可能無法恢復到最開始的准確率。