PRUNING FILTERS FOR EFFICIENT CONVNETS
论文题目:PRUNING FILTERS FOR EFFICIENT CONVNETS
出处:ICLR 2017
主要贡献:CNN在各种应用中的成功伴随着计算和参数存储成本的显着增加。最近减少这些开销的努力包括,在不损害原始精度的条件下的剪枝和压缩各层的权重。论文就是提出了对卷积层进行剪枝操作,然后进行retrain恢复精度。
实现框架:
输入:
过程:
输出:
细节实现:
权重的绝对值越小,则权重的作用也就越小。
1.本文使用的是filter的绝对值的和来衡量这个filter的作用,即 ∑|Fi,j| , (L1范数)
2.选择前m个最小的绝对值删除
3.文章和随机选择相同数量的filters和选择最大值的结果比较,此方法最好。
4.更新一下模型,剩余的卷积核组成新的卷积核矩阵
剪枝的敏感度:
为了理解每一层的敏感性,我们独立的修剪每一层,并在验证集上评估修剪后的网络的准确性。图2(b)显示,滤波器被修剪掉可以维持精度相当于图2(a)中具有较大斜率的层。 相反,坡度比较平坦的的层对修剪比较敏感。我们观察到有差不多数量的卷积核的图层对于修剪具有类似的敏感性。我们对同一阶段的所有图层使用相同的剪枝比。对于修剪敏感的图层,我们剪掉这些图层中较小的一部分,或者完全跳过修剪。
多层同时剪枝策略:
1、Independent pruning 假设蓝色是确定要裁剪的,然后计算绿色的L1时,要考虑黄色的值,跟之前的裁剪无关。
2、Greedy pruning 也就是计算绿色的L1时,不考虑已经被裁剪的黄色值。
剪枝残差网络过程:
1、第一层随意裁剪(根据需求),因为它只会影响Xi+1的输入,但是不会影响最后的输出。
2、residual block里面的裁剪需要注意,因为裁剪需要和shortcut layer保持一致,才能累加。
3、因为identical feature maps比added residual maps更重要,所以后者的裁剪结果应该由前者决定。
重新训练剪枝后的网络:
prune卷积核之后,其精度一般来说都会有所变化,所以需要重新训练网络弥补精度的损失。其中有两个策略:
1、Prune once and retrain。
2、Prune and retrain iteratively。
Prune once andretrain 速度是快,但是很大可能无法回到原先的精度。而prune and retrain iteratively,一层一层的prune,retrain到原先的accuracy之后才进行下一层的prune和retrain操作,缺点就是收敛得慢。