论文地址:https://arxiv.org/abs/1608.08710网络
主要思想
这篇文章主要讲了对filters的裁剪,裁剪方法是计算L1范数,而后裁剪掉较少的,多少取决于加速比。ide
实现效果
- VGG-16 34%加速
- ResNet-110 38%加速
具体实现

- 对于每个kernel matrix按列绝对值求和
- 对求和结果排序
- 裁剪掉m个filters(对应内核矩阵的列),以及对应的输出(Xi+1层中),它又是下一层的输入,因此也得去掉对应的输入filters(对应内核矩阵的行)
- 剩余的kernel weights保留
实现细节

在跨越多层裁剪的过程当中,可能出现kernel matrix裁剪交叉的状况,两种处理方法:blog
- Independent pruning 假设蓝色是肯定要裁剪的,而后计算绿色的L1时,要考虑黄色的值,跟以前的裁剪无关。
- Greedy pruning 也就是计算绿色的L1时,不考虑已经被裁剪的黄色值
结果:
第二种的准确率辉更高。

残差网络的处理:排序
- 第一层随意裁剪(根据需求),由于它只会影响Xi+1的输入,可是不会影响最后的输出。
- residual block里面的裁剪须要注意,由于裁剪须要和shortcut layer保持一致,才能累加。
- 由于identical feature maps比added residual maps更重要,因此后者的裁剪结果应该由前者决定。
Prune and Retrain 方法
- 裁剪全部层后再继续训练网络
- 裁剪一层,从新训练一下 结果: 显然第二种好啊,第一种太暴力了,可能形成没法修复的裁剪