1、概述
- 一些剪枝的操作主要是减少了全连接层的参数,全连接层的参数量占比最多(比如
VGG-16
中全连接层操作占了90%
,计算量只占了不到1%
), 但是主要的计算量集中在卷层操作 - 论文就是提出了对卷积层进行剪枝操作,然后进行
retrain
,不会造成稀疏连接(像上篇论文一样,稀疏矩阵操作需要特殊的库等来处理) - 全连接层可以使用平均池化层来代替以减少参数量
2、对Filters
进行剪枝,以及Feature maps
2.1 基础(CNN
相关内容)
- 设第
i
层的卷积层的输入channel
有 $n_i$ , $h_i$ 和 $w_i$ 表示输入的特征图feature map
的高和宽 - 使用$n_{i+1}$ 个
3D filters
$F_{i,j} \in R^{n_i \times k \times k}$, 则卷积操作可以将输入的feature maps
$x_i \in R^{n_i \times h_i \times w_i}$ 转化为 $x_{i+1} \in R^{n_{i+1} \times h_{i+1} \times w_{i+1}}$- 关于
CNN
的基础不了解的可以查看这里
- 关于
- 卷积操作的运算数量是:$n_{i+1}n_ik^2h_{i+1}w_{i+1}$ (对应到下图的
kernel matrix
) - 所以如下图所示,取出一个
feature map
可以直接减少$n_ik^2h_{i+1}w_{i+1}$个运算- 同时接下来的
feature map
也就没有了,附加移除$n_{i+2}k^2h_{i+2}w_{i+2}$个运算
- 同时接下来的
- 所以减少
m
个featuremaps
可以减少 $m/n_{i+1}$ 的计算量- 下图的
kernel matrix
,一个feature map
对应一列,所以是$m/n_{i+1}$
- 下图的
2.2 去除哪些filters
(在单层中)
- 向之前的论文介绍的,权重的绝对值越小,则权重的作用也就越小
- [ 假设权重值都在
0
附近,进行乘积得到的值很小,所以对结果造成的影响也很小 ] - [ 删除一些冗余的值还有可能防止过拟合 ]
- [ 假设权重值都在
- 本文使用的是
filter
的绝对值的和来衡量这个filter
的作用,即 $\sum |F_{i,j}|$ , ($l_1$范数)- 选择前
m
个最小的绝对值删除 - 文章和随机选择相同数量
的filters
和选择最大值的结果比较,此方法最好
- 选择前
VGG-16
在Cifar-10
数据集上训练得到的卷积层的权重分布情况,可以看出每一卷积层的分布变化还是很大的
2.3 剪枝的敏感度(Sensitivity)
- 就是每一卷积层进行单独剪枝,查看在
validation set
上准确度的变化 - 对于
VGG-16
, 一些卷积层的filter
数量是一样的,所以对于差不多Sensitivity
的卷积层,使用相同的比例进行剪枝,而对于Sensitivity
比较大的,选择最小的比例进行剪枝或者不进行剪枝
2.4 多层剪枝的策略
- 之前的一些剪枝策略是逐层剪枝,然后进行
retraining
,但是这样是非常耗时的 - 两种策略
- 独立剪枝:就是每一层是独立的,然后进行剪枝
- 贪心剪枝:就是考虑到上一层被剪掉的情况
- 如下图,第一种方法就是不考虑已经前面已经移除的
filters
(蓝色的),就是黄色的kernel
仍然参与计算- 而对于贪心剪枝就不用计算黄色的
kernel
了
- 而对于贪心剪枝就不用计算黄色的
3、 Retraining
- 剪枝之后,应该
retraining
,(和迁移学习很像,有些fine-tune
的意思) - 也是两种策略:
- 一次性剪枝然后
retrain
- 逐层剪枝进行
retrain
- 一次性剪枝然后
- 第二种策略结果可能会更好,但是需要更多的
epochs
4、实验结果
- 剪枝之后进行
retrain
,在原来的基础之上得到的结果要比完全重新训练得到的结果好
- 和随机剪枝、减去最大值$l_1$范数的
filters
的结果比较
5、结论
- 剪枝
filters
,减少计算量 - 注意有
Batch Normalization
层的对应剪枝后,BN
层也要对应删除 - [其实感觉方法挺简单的]
Reference
- https://arxiv.org/abs/1608.08710
- http://lawlite.me/2017/09/07/%E8%AE%BA%E6%96%87%E8%AE%B0%E5%BD%95-DeepCompression-CompressingDeepNeuralNetworksWithPruning-TrainedQuantizationAndHuffmanCoding/
- http://blog.csdn.net/u013082989/article/details/53673602
- 本文链接: http://lawlite.me/2017/09/10/论文记录-PruningFiltersForEfficientConvNets/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议 。转载请注明出处!