1. 神经网络剪枝
  2. 为什么要剪枝?
  3. 如何剪枝
    1. 移除滤波器
    2. 移除连接
    3. 合并 Batch Normalization
    4. 剪枝策略

神经网络剪枝

为什么要剪枝?

  1. 希望保持相同性能的同时能降低计算成本。而且删除那些在深度网络中没有真正使用的特征,也可以加速推理和训练过程。你也可以将修剪看作是一种结构探索:即找出在每层中需要多少个特征才能获得最佳性能。

  2. 通过减少参数数量,也就是减少参数空间中的冗余,可以实现提升模型的泛化能力。根据经验,我们发现修剪网络有助于提升泛化能力。

如何剪枝

深度压缩的一种方法叫“剪枝”,原理是移除权重小于某阈值的连接。
剪枝:裁剪连接,滤波器,权值稀疏化

移除滤波器

参考论文:(ICLR 2017) Pruning Filters for Efficient Convnets https://arxiv.org/abs/1608.08710↩

对所有滤波器(filters)计算L1范数,移除值较小的滤波器。

优点:
模型变小,运行速度变快。

缺点:
依然保留部分冗余的连接。

移除连接

参考论文:
(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↩

移除权值小于一定阈值的连接。

优点:模型变小,运行速度变快。能尽可能去掉冗余的连接。

缺点:需要设计更稀疏的格式保存模型,否则模型不变小也不加速。

合并 Batch Normalization

Batch Normalization 的参数可以合并到上一个卷积/全连接的参数中

剪枝策略

  • 逐层剪枝比一次性剪枝效果好

  • 每层剪枝比例应根据敏感度分析去删减

  • 移除滤波器时,计算L1移除值较小的比随机移除、其它计算方法效果好

  • 剪枝后进行 finetune 比 train from scratch 效果好

  • 剪枝后固定较为敏感的层的权值再训练的效果比较好

参考文献:
最新论文解读 | 神经网络“剪枝”的两个方法 - CSDN博客


技术交流学习,请加QQ微信:631531977
目录