一、算法思想
- 计算每层每个filter的绝对值之和,然后排序。
- 剪去具有最小值的个filter及其对应的feature map。对应剪枝的feature map的下一个卷积层中的kernel也被移除。
- 为第层和第层创建新的kernel,并将剩余的kernel权重复制到新模型。
二、讨论
1. 单层敏感性分析
每层独立修剪(只对该层剪枝,其他层不进行剪枝),观察该层的敏感性:一些层是敏感的,并且剪枝之后更难恢复准确性。
2. 多层filter剪枝策略
- 独立剪枝:计算filter的绝对值之和时,会将前一层被移除的feature map所对应的kernel计算进去。
- 贪婪剪枝:计算filter的绝对值之和时,不会将前一层被移除的feature map所对应的kernel计算进去。
贪婪剪枝的方法不是局部最优,但属于整体最优。
3. 剪枝训练策略
- 一次修剪和重新训练:一次性剪枝,反复训练恢复精度。当敏感层的一些filter被一次剪去后,可能无法恢复原始准确率。
- 迭代地修剪和训练:剪一层训一下模型,迭代进行。结果更好但是耗时更长。
三、实验
1. 剪枝后重训练和剪枝后从头训练
- 剪枝后重训练:剪枝后重训练的epochs < 剪枝之前训练的epochs
- 剪枝后从头训练:剪枝后从头训所用的epoch = 剪枝之前训练的epochs
实验结果报告了,剪枝后重训练比剪枝后从头训练的模型表现更好。
2. VGG16在CIFAR10上的实验
展示出在剪枝率为34%时,每层被剪去了多少filters。
3. ResNet56/110在CIFAR10上的实验
每层剪枝后的敏感性分析。
4. ResNet34在ImageNet2012上的实验
每层剪枝后的敏感性分析。
5. 随机剪枝和剪除最大范数的filter
效果:剪除最小范数的filter>随机剪枝>剪除最大范数的filter