對神經網絡(主要是CNN)進行剪枝,使模型運行速度變快,大小變小,且準確率與原來相近。
如何剪枝
移除濾波器
參考論文 1,對所有濾波器(filters)計算L1範數,移除值較小的濾波器。
優點
模型變小,運行速度變快。
缺點
依然保留部分冗餘的連接。
- 普通卷積
輸入的特徵圖:
輸出的特徵圖:
不考慮 bias,參數維度: ,即有 個 3D 濾波器
計算每個濾波器的 L1 值,取最小的若干個移除: ->
這會影響後續層(卷積 / 全連接 / Batch Normalization 等)的輸入:
如後續卷積層的參數維度爲
- Depthwise 卷積
Depthwise 卷積參數維度爲
後續的 Pointwise 卷積參數維度爲
應與後續的 Pointwise 卷積一起計算 L1:即使用
移除連接
優點
模型變小,運行速度變快。
能儘可能去掉冗餘的連接。
缺點
需要設計更稀疏的格式保存模型,否則模型不變小也不加速。
合併 Batch Normalization
Batch Normalization 的參數可以合併到上一個卷積/全連接的參數中
如設卷積的參數爲 , ,則卷積可表示爲
Batch Normalization 的參數爲 scale, bias, mean, variance
Batch Normalization 可表示爲
Batch Normalization 的參數合併後卷積的參數爲
剪枝策略
逐層剪枝比一次性剪枝效果好
每層剪枝比例應根據敏感度分析去刪減
移除濾波器時,計算L1移除值較小的比隨機移除、其它計算方法效果好
剪枝後進行 finetune 比 train from scratch 效果好
剪枝後固定較爲敏感的層的權值再訓練的效果比較好
參考
- (ICLR 2017) Pruning Filters for Efficient Convnets https://arxiv.org/abs/1608.08710 ↩
- (ICLR 2016) Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding https://arxiv.org/abs/1510.00149 https://github.com/songhan/Deep-Compression-AlexNet ↩
- (NIPS 2015) Learning both Weights and Connections for Efficient Neural Networks https://arxiv.org/abs/1506.02626 ↩