Abstract
神经网络的广泛应用伴随着计算量的增加和参数存储成本. 最近的研究工作在不损害原来准确度的基础上,通过剪枝和压缩不同层间的权重进行网络压缩. 然而,基于幅值的剪枝(magnitude-based pruning)仅能够减少全连接层的参数,而由于修剪网络中的不规则稀疏性,可能无法充分降低卷积层中的计算成本.
我们提出了一个加速的剪枝方法,即修剪那些被认为对输出准确度有很小影响的卷积核.该方法通过删除网络中的整个卷积核及其连接特征图,可显着降低计算成本. 与修剪权重相反,此方法不会导致稀疏连接模式. 因此,它不需要稀疏卷积库的支持,并且可以与现有的高效BLAS库一起用于密集矩阵乘法.
即使是简单的卷积核修剪技术, 在CIFAR-10上VGG-16的推理成本最多可降低34%; ResNet-110的推理成本最多可降低38%,同时通过重新训练网络来恢复接近原始精度.
3. PRUNING FILTERS AND FEATURE MAPS
如下图Figure 1所示, 输入特征图为x[i], 输出特征图为x[i+1], 3D卷积核F[i,j], 2D卷积核K.
在进行卷积核剪枝时,即卷积核F[i,j]被修剪掉(F[i,j]=n[i]*k*k, 代表n[i]个通道的k*k卷积核被裁减), 这样导致输出特征图x[i+1]少一个通道, 这也同时导致下一个3D卷积核少一个通道.
在这一节中一共分为四个部分进行了讨论:
- 确定在单个层中修剪的卷积核
- 确定单层修剪时的敏感性
- 修剪多层卷积核
- 重新训练修剪的网络以保持准确性
3.1 确定在单个层中修剪的卷积核
文章使用 l1-norm决定卷积核的重要性,简单说就是将3D卷积核F[i,j] (n[i]个k*k卷积核, 其中n[i]为输入特征图的通道数)中的参数取绝对值并相加求和, 然后修剪掉和值最小的或者最小的m个3D卷积核.
下图是修剪流程:
3.2 确定单层修剪时的敏感性
这一节对VGG16在CIFAR10上的仿真结果进行分析.
如下图Figure 2(a)显示的是VGG16不同卷积层中每个3D卷积核的参数绝对值之和. 可以看到,浅层网络的值偏大且分布区间小,深层网络的值分布范围大.
如下图Figure 2(b)显示的是裁剪VGG16不同卷积层的比率增加时,分类准确度的变化情况. 可以看到,浅层网络只能裁剪小比率,深层网络可以裁剪较大比率(60%)而准确度保持不变.(Table 2也证实实际裁剪了深层的卷积核)
如下图Figure 2(c)显示的是将裁剪的VGG16网络re-train,裁剪深层网络较大比率时同样可以恢复到原来准确度!!
我的疑问: 其他神经网络在不同数据集上的统计结果是否和下图一致???
4. 实验
下图是总的实验结果:
在这一节中一共分为五个部分进行了实验分析:
- VGG-16 ON CIFAR-10
- RESNET-56/110 ON CIFAR-10
- RESNET-34 ON ILSVRC2012
- 与修剪随机卷积核和最大卷积核的比较
4.4 与修剪随机卷积核和最大卷积核的比较
将本文的方法与修剪随机卷积核和最大卷积核进行比较. 如上图8所示,在不同的修剪率下,对大多数网络层的修剪效果要优于修剪随机卷积核. 例如,对于所有层,当修剪率为90%时, 最小的卷积核修剪比随机过滤器修剪具有更好的精度.
l1范数最大的卷积核修剪的精度随修剪率的增加而迅速下降,这表明使用“ l1”范数较大卷积核的重要性.
Reference Paper: Pruning Filters for Efficient ConvNets