模型壓縮那些事(一)
最近搞了一段時間的模型壓縮,有些經驗想和各位童鞋分享下,想哪說哪,不嚴謹的地方歡迎大家隨時拍磚。
目前卷積神經網路已經在計算機視覺領域取得了長足的進步,但是由於目前業內認為越深網路效果越好,所以卷積神經網路參數巨大,並且計算卷積層和全連接層需要大量的浮點矩陣乘法,導致計算開銷也非常大,雖然有的網路可以在GPU上實時運行,但是這種龐然大物無法直接應用於手機等嵌入式設備中,所以我們需要對卷積神經網路進行裁剪使神經網路可以在手機跑起來。如果想要在手機上跑深度學習模型有兩個關鍵點,一個是模型參數要少,另一個是運行時間短,目前來說有很多paper只關注模型壓縮卻不考慮模型加速,我主要想從模型加速這塊來分享下我的一些經驗和踩過的坑。
先說我的結論吧,以下都是我嘗試過的以及接下來要嘗試的一些方向,各位童鞋有不同看法歡迎在下面留言。
1.對每個卷積層的channel進行減枝
2.對每個卷積層的channel加權重
3.蒸餾網路(student network 如何逼近 teacher network)(softmax 逼近和特徵層逼近)
4.Group Convolution(Mobilenet, ShuffleNet, Interleaved Group Convolution)
5.Densenet 相關
卷積神經網路主要包括卷積層和全連接層,卷積層占的運算量大而全連接層占的參數多,如果想要加速卷積神經網路,主要是對卷積層進行優化。對於卷積層我認為有spatial和channel兩個維度,通常大家都是對spatial維度做文章,主要有Atrous Convolution, deconvolution,subpixel convolutions等等,在spatial維度優化卷積我認為其主要目的獲得更大的感受野並且減少計算量,但是網路層數的加深這種方法減少的計算量就微乎其微了,所以就有了對channel維度的研究。
如何在channel維度做文章,目前我試了幾種方法,首先是Hao Li[1]提出的計算每個卷積層的channel的L1 norm然後排序,然後將L1 norm值較小的channel裁減掉,之後通過finetune恢復精度,實際測試時發現幾個問題,首先該演算法對類似VGG的網路結構效果明顯,但是對類似ResNet的網路結構效果甚微,幾乎無法加速,此外該演算法需要多次迭代,實際訓練起來感覺十分繁瑣,例如對某個卷積層減枝時需要先設定較小的稀疏度然後finetune,精度恢復後再重複上一步驟,精度無法恢復的話需要嘗試更小些的稀疏度,需要多次反覆finetune。
我認為某個卷積層channel的L1 norm值都很小或者相差較大時可以得到相對滿意的裁剪程度,但是如果L1 norm值相差不多並且都不小時就無法大幅度的裁剪,實際裁剪網路時我發現一般第一層的裁剪程度較大,隨著網路的加深其channel剪枝程度相對較小了不少,在實驗時我在想每個卷積層權重值的範圍和層數是不是存在某種關係?能不能找到更好的判決準則達到更大的剪裁程度?最重要的一點是眾多利用L1 norm作為減枝準則的paper里也沒有說為什麼選擇L1 norm,只說實際實驗效果比L2 norm要好,我的想法是L1 norm小代表權重小,和激活函數相乘後得到值也小,所以可以忽略掉。
還有一種方法是統計relu後每個channel的稀疏度,如果某個channel的稀疏度很大則可以裁減掉該channel。該方法與第一種方法缺點類似,我認為主要是這兩種方法都是次最優的,對於第一種方法,權重中較小的值也有可能對整個網路的精度造成影響;而第二種方法中統計channel的稀疏度除非特別大,否則直接裁剪也會產生精度損失
最近face++[2]出了一篇減枝channel的文章,我目前正在復現,出來效果後和大家報告。未完待續。
[1]H. Li, A. Kadav, I. Durdanovic, H. Samet, and H. P. Graf. Pruning filters for efficient convnets. arXiv preprint arXiv:1608.08710, 2016
[2]He, Yihui , Zhang, Xiangyu , Sun, Jian. Channel Pruning for Accelerating Very Deep Neural Networks arXiv:1707.06168
模型壓縮那些事(二)
模型壓縮那些事(三)
推薦閱讀:
※深度學習實踐:使用Tensorflow實現快速風格遷移
※2017 ICCV 行人檢索/重識別 接受論文匯總
※TensorFlow小試牛刀(2):GAN生成手寫數字
※論文推薦:機器閱讀理解,文本摘要,Seq2Seq加速 | 本周值得讀 #34
※使用計算機視覺方法做海洋瀕臨物種檢測
TAG:深度学习DeepLearning | 计算机视觉 |