模型壓縮:Networks Slimming-Learning Efficient Convolutional Networks through Network Slimming

Network Slimming-Learning Efficient Convolutional Networks through Network Slimming(Paper
2017年ICCV的一篇paper,思路清晰,骨骼清奇~~

創新點:
1. 利用batch normalization中的縮放因子γ 作爲重要性因子,即γ越小,所對應的channel不太重要,就可以裁剪(pruning)。
2. 爲約束γ的大小,在目標方程中增加一個關於γ的正則項,這樣可以做到在訓練中自動剪枝,這是以往模型壓縮所不具備的。
這裏寫圖片描述

模型壓縮三要素:
1. Model size ,模型大小
2. Run-time memory , 模型得小,效率也得高,不能參數少,運算卻很多,還是不行滴。
3. Number of computing operations

模型壓縮存在的不足:
1. 低秩分解方法:對全連接層效果可以,對卷積層不怎麼樣;模型大小可壓縮3倍,但運算速度無明顯提升。
2. Weight Quantization: HashNet雖然可採用分組、共享權值方法來壓縮所需保存的參數數量,但是在 Run-time memory上面沒有任何壓縮。
3. 二值化權值: 損失精度
4. Weight Pruning/Sparsifying: 需要專用的硬件或者代碼庫;[12]訓練過程中,沒有一個對稀疏進行“約束”“指導”(guidance)
5. Structured Pruning/Sparsifying: 本文方法所屬類型,當然沒有缺點啦。。。就算就文章中也不會提嘛~

——————————————分割線—————————————
正文:
Network slimming,利用BN層中的縮放因子γ,在訓練過程當中來衡量channel的重要性,將不重要的channel進行刪減,達到壓縮模型大小,提升運算速度的效果。
看一下模型圖,左邊爲訓練當中的模型,中間一列是scaling factors,也就是BN層當中的縮放因子γ,當γ較小時(如圖中0.001,0.003),所對應的channel就會被刪減,得到右邊所示的模型。 道理是不是非常簡單,而且巧妙的將γ增加到目標函數中去,達到了一邊訓練一邊剪枝的奇效。
這裏寫圖片描述

來看目標函數:這裏寫圖片描述
第一項是模型預測所產生的損失,第二項就是用來約束γ的,λ是權衡兩項的超參,後面實驗會給出,一般設置爲1e-4 或者 1e-5。g(*)採用的是g(s)=|s|, 就是L1範,可達到稀疏的作用。原理就講完了~

接下來看看,整體是如何運行的,如何剪枝再訓練,再剪枝。 整體流程框圖如下圖所示:
這裏寫圖片描述
分爲三部分,第一步,訓練;第二步,剪枝;第三步,微調剪枝後的模型,循環執行。

具體操作細節:
γ通常取 1e-4或者1e-5,具體情況具體分析,
γ得出後,應該怎麼剪,γ多小纔算小? 這裏採用與類似PCA裏的能量佔比差不多,將當前層的γ全都加起來,然後按從大到小的順序排列,選取較大的那一部分,通常選取70%左右(具體情況具體分析)。

λ的選取對γ的影響如圖所示:
這裏寫圖片描述
λ爲0的時候,目標函數不會對γ進行懲罰,λ等於1e-5時,可以發現,γ=0.0+的有450多個,整體都向0靠近。當λ=1e-4時,對γ有了更大的稀疏約束了,可以看到有接近2000個γ是在0.0x附近。

剪枝百分比: 剪得越多,模型越小;剪得太多,精度損失。這是矛盾的,所以作者做了實驗對比,看看剪多少合適。實驗發現,當剪枝超過80%,精度會下降。
這裏寫圖片描述

具體實驗請閱讀原文,其中涉及了vgg,resnet-164(pre-actionvation),densenet-40。效果都很好,不僅壓縮模型大小,提升運算速度,還能提升分類準確率。

torch代碼:https://github.com/liuzhuang13/slimming

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