神經網絡剪枝

對神經網絡(主要是CNN)進行剪枝,使模型運行速度變快,大小變小,且準確率與原來相近。

如何剪枝

移除濾波器

參考論文 1,對所有濾波器(filters)計算L1範數,移除值較小的濾波器。

  • 優點

    模型變小,運行速度變快。

  • 缺點

    依然保留部分冗餘的連接。

    1. 普通卷積

    輸入的特徵圖:xiRni×hi×wi

    輸出的特徵圖:xi+1Rni+1×hi+1×wi+1

    不考慮 bias,參數維度:ni×ni+1×kh×kw ,即有 ni+1 個 3D 濾波器 Fi,jRni×kh×kw

    計算每個濾波器的 L1 值,取最小的若干個移除:ni+1 -> ni+1

    這會影響後續層(卷積 / 全連接 / Batch Normalization 等)的輸入:

    如後續卷積層的參數維度爲 ni+1×ni+2×kh×kw

    1. Depthwise 卷積

    Depthwise 卷積參數維度爲 1×ni×kh×kw

    後續的 Pointwise 卷積參數維度爲 ni×ni+1×1×1

    應與後續的 Pointwise 卷積一起計算 L1:即使用 dw[0,:,:,:]pw[:,i,:,:]

移除連接

參考論文 23,移除權值小於一定閾值的連接。

  • 優點

    模型變小,運行速度變快。

    能儘可能去掉冗餘的連接。

  • 缺點

    需要設計更稀疏的格式保存模型,否則模型不變小也不加速。

合併 Batch Normalization

Batch Normalization 的參數可以合併到上一個卷積/全連接的參數中

如設卷積的參數爲 W , b ,則卷積可表示爲 y=Wx+b

Batch Normalization 的參數爲 scale, bias, mean, variance

Batch Normalization 可表示爲 y=scalevariance+εx+(biasscalemeanvariance+ε)

Batch Normalization 的參數合併後卷積的參數爲

W=Wscalevariance+ε

b=(bmean)scalevariance+ε+bias

剪枝策略

  1. 逐層剪枝比一次性剪枝效果好

  2. 每層剪枝比例應根據敏感度分析去刪減

  3. 移除濾波器時,計算L1移除值較小的比隨機移除、其它計算方法效果好

  4. 剪枝後進行 finetune 比 train from scratch 效果好

  5. 剪枝後固定較爲敏感的層的權值再訓練的效果比較好

參考


  1. (ICLR 2017) Pruning Filters for Efficient Convnets https://arxiv.org/abs/1608.08710
  2. (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
  3. (NIPS 2015) Learning both Weights and Connections for Efficient Neural Networks https://arxiv.org/abs/1506.02626
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章