深度神经网络模型压缩方法总结
新的卷積計(jì)算方法
這種是直接提出新的卷積計(jì)算方式,從而減少參數(shù),達(dá)到壓縮模型的效果,例如SqueezedNet,mobileNet
1. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
代碼地址:https://github.com/DeepScale/SqueezeNet
下圖是論文中的Fire Module,將上一層的輸出分別輸入到1*1的卷積核3*3的卷積層中。
使用以下三個(gè)策略來減少SqueezeNet參數(shù) :
(1)使用1?1卷積代替3?3 卷積:卷積模板的選擇,從12年的AlexNet模型一路發(fā)展到2015年底Deep Residual Learning模型,基本上卷積大小都選擇在3x3了,因?yàn)槠溆行?#xff0c;以及設(shè)計(jì)簡潔性。本文替換3x3的卷積kernel為1x1的卷積kernel可以讓參數(shù)縮小9X。但是為了不影響識別精度,并不是全部替換,而是一部分用3x3,一部分用1x1。
(2)減少輸入3x3卷積的input feature map數(shù)量 :這一部分使用squeeze layers來實(shí)現(xiàn) 。參數(shù)量=通道數(shù)*filter數(shù)*卷積窗口,因此減少feature map的輸入數(shù)量就可以一定程度上的減少參數(shù)量。
(3)將欠采樣操作延后,可以給卷積層提供更大的激活圖:更大的激活圖保留了更多的信息,可以提供更高的分類準(zhǔn)確率 。在具體實(shí)現(xiàn)時(shí),只在卷積第1、4、8層做了max pooling,在conv10做了全局平均pooling
其中,(1)和(2)可以顯著減少參數(shù)數(shù)量,(3)可以在參數(shù)數(shù)量受限的情況下提高準(zhǔn)確率。
另外論文中還使用了global average pooling代替全連接層的策略來進(jìn)一步減少參數(shù)量(關(guān)于GAP要復(fù)習(xí)一下NIN)。
可以看出,Squeeze層由于使用1?1卷積極大地壓縮了參數(shù)數(shù)量,并且進(jìn)行了降維操作,但是對應(yīng)的代價(jià)是輸出特征圖的通道數(shù)(維數(shù))也大大減少。之后的expand層使用不同尺寸的卷積模板來提取特征,同時(shí)將兩個(gè)輸出連接到一起,又將維度升高。但是3?3的卷積模板參數(shù)較多,遠(yuǎn)超1?1卷積的參數(shù),對減少參數(shù)十分不利,所以作者又針對3?3卷積進(jìn)行了剪枝操作以減少參數(shù)數(shù)量。從網(wǎng)絡(luò)整體來看,feature map的尺寸不斷減小,通道數(shù)不斷增加,最后使用平均池化將輸出轉(zhuǎn)換成1?1?1000完成分類任務(wù)。
2.MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
這篇文章主要基于深度可分離卷積(具體參考有道云筆記)。
深度可分離卷積是基于Xception的,在Xception中是先做channelwise的卷積再做pointwise的卷積,例如:在經(jīng)典的卷積操作,如果output channel是256,input channel是128,卷積核大小3*3,那么參數(shù)量為128?3?3?256=294912128?3?3?256=294912,而Spearable卷積方法,假如DM=4,這樣中間層的channel數(shù)為128*4=512,再經(jīng)過1*1卷積降維到256個(gè)channel,需要的總參數(shù)為:128*3*3*4 + 128*4*1*1*256=135680,參數(shù)量相當(dāng)于普通卷積的46%,還增加了通道數(shù)(128*4=512)增強(qiáng)了特征表達(dá)能力。
在MobileNet中,作者也是先做深度方向上的卷積,再做點(diǎn)卷積。
對MobileNet的參數(shù)量分析:
3.ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
做模型壓縮的連起名字的方式都是類似的么。。。
具體講解參考:https://blog.csdn.net/u011974639/article/details/79200559,這里的關(guān)于shuffle的圖例很清晰明了。
文章的主要基于兩個(gè)點(diǎn):1)深度可分離卷積;2)Group Convolution。
主要的貢獻(xiàn)點(diǎn)就是做了一個(gè)通道混洗(Channel shuffle)
已訓(xùn)練好的模型上做裁剪
方法
這種就是在訓(xùn)練好的模型上做一些修改,然后在fine-tuning到原來的準(zhǔn)確率,主要有一些方法:
剪枝:神經(jīng)網(wǎng)絡(luò)是由一層一層的節(jié)點(diǎn)通過邊連接,每個(gè)邊上會(huì)有權(quán)重,所謂剪枝,就是當(dāng)我們發(fā)現(xiàn)某些邊上的權(quán)重很小,可以認(rèn)為這樣的邊不重要,進(jìn)而可以去掉這些邊。在訓(xùn)練的過程中,在訓(xùn)練完大模型之后,看看哪些邊的權(quán)值比較小,把這些邊去掉,然后繼續(xù)訓(xùn)練模型;
權(quán)值共享:就是讓一些邊共用一個(gè)權(quán)值,達(dá)到縮減參數(shù)個(gè)數(shù)的目的。假設(shè)相鄰兩層之間是全連接,每層有1000個(gè)節(jié)點(diǎn),那么這兩層之間就有1000*1000=100萬個(gè)權(quán)重參數(shù)。可以將這一百萬個(gè)權(quán)值做聚類,利用每一類的均值代替這一類中的每個(gè)權(quán)值大小,這樣同屬于一類的很多邊共享相同的權(quán)值,假設(shè)把一百萬個(gè)權(quán)值聚成一千類,則可以把參數(shù)個(gè)數(shù)從一百萬降到一千個(gè)。
量化:一般而言,神經(jīng)網(wǎng)絡(luò)模型的參數(shù)都是用的32bit長度的浮點(diǎn)型數(shù)表示,實(shí)際上不需要保留那么高的精度,可以通過量化,比如用0~255表示原來32個(gè)bit所表示的精度,通過犧牲精度來降低每一個(gè)權(quán)值所需要占用的空間。
神經(jīng)網(wǎng)絡(luò)二值化:比量化更為極致的做法就是神經(jīng)網(wǎng)絡(luò)二值化,也即將所有的權(quán)值不用浮點(diǎn)數(shù)表示了,用二進(jìn)制的數(shù)表示,要么是+1,要么是-1,用二進(jìn)制的方式表示,原來一個(gè)32bit權(quán)值現(xiàn)在只需要一個(gè)bit就可以表示,可以大大減小模型尺寸。
論文
- XNOR-Net: ImageNet Classi?cation Using Binary Convolutional Neural Networks
網(wǎng)絡(luò)權(quán)重二值化、輸入二值化,從頭開始訓(xùn)練一個(gè)二值化網(wǎng)絡(luò),不是在已有的網(wǎng)絡(luò)上二值化
- Learning both Weights and Connections for Ef?cient Neural Networks
學(xué)習(xí)重要的連接,根據(jù)連接的權(quán)重進(jìn)行裁剪,fine-tuning讓網(wǎng)絡(luò)保持稀疏的連接
- Exploiting linear structure within convolutional networks for ef?cient evaluation.
對已經(jīng)訓(xùn)練好的網(wǎng)絡(luò)應(yīng)用奇異值分解
- Eie: Ef?cient inference engine on compressed deep neural network.
加速器
- Deep compression: Compressing DNNs with pruning, trained quantization and huffman coding.
裁剪(閾值)、量化(8bit,存儲(chǔ)方式)、哈夫曼編碼
http://blog.csdn.net/may0324/article/details/52935869
Deep Model Compression: Distilling Knowledge from Noisy Teachers
Teacher-student Framework,一個(gè)網(wǎng)絡(luò)指導(dǎo)另外一個(gè)網(wǎng)絡(luò)的訓(xùn)練
PerforatedCNNs: Acceleration through Elimination of Redundant Convolutions
在一些稀疏位置跳過CNN求值,加速效果不明顯,且不能壓縮模型
- Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or ?1
訓(xùn)練二值化網(wǎng)絡(luò)
https://tensortalk.com/?cat=model-compression-parameter-pruning
- PRUNING FILTERS FOR EFFICIENT CONVNETS
計(jì)算filter的L1范數(shù),直接過濾掉較小L1范數(shù)對應(yīng)的feature map, 然后再次訓(xùn)練,有兩種,一是每裁剪一層訓(xùn)練一下,一是直接裁剪整個(gè)網(wǎng)絡(luò),然后fine-tuning. 相比權(quán)值連接的裁剪,這種比較暴力,好處就是不會(huì)引入稀疏矩陣的計(jì)算,從而也不需要稀疏矩陣庫,壞處就是可能無法恢復(fù)到最開始的準(zhǔn)確率。
總結(jié)
以上是生活随笔為你收集整理的深度神经网络模型压缩方法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python你的人生_人生苦短:运行你的
- 下一篇: 一些琐碎+分不清的知识点