前言
这篇文章是深度学习算法优化系列的第一篇文章,主要解读一篇ICLR 2017年的《Pruning Filters for Efficient ConvNets》,关于通道剪枝策略的一篇论文。论文原地址见附录。
背景
在模型压缩的方法中,包括剪枝,量化,多值网络,模型蒸馏等。这篇论文是模型剪枝当面的。剪枝最初应用应该是在决策树算法中,通过降低决策树的模型复杂度防止过拟合。在CNN中也是类似的思想,因为在大型的模型中,总是不可避免的存在大量的权重冗余,这种冗余甚至有可能降低模型的准确率。因此需要借助剪枝的方法压缩模型,在压缩率合适的条件下,可以提高模型的准确率的同时减少模型大小。同时,在往移动端部署模型的时候也会考虑牺牲一点精度换取时间和空间的节约。CNN的剪枝主要分为两种,一种是基于幅值的剪枝,一种是基于通道的剪枝。基于幅值的剪枝主要思想是将小于一定阈值的权重抛弃,阈值用剪枝率来确定。而基于通道的剪枝主要思想史将不重要的整个权重通道剪掉,从而将模型变小。这篇论文就属于第二类。
1. 摘要
CNN在各种应用中的成功伴随着计算量和参数量的显着增加。最近朝着减少这些开销的研究涉及到在不损伤精度的条件下剪枝和压缩不同层的权重。然而,基于幅值的权重剪枝主要是减少了全连接层的参数量,并且由于修剪的不规则性,并没有减少卷积层的计算成本。这篇论文展示了一种对于CNN的加速方法,即直接移除对于CNN精度影响很小的卷积核。通过将网络的这些卷积核以及它们的feature map移除掉,可以极大的减少计算成本。与权重剪枝相比,这个方法不会导致稀疏连接模式。因此,它不需要专门支持稀疏卷积库的支持,它可以使用针对密集矩阵乘法的BLAS库高效处理,我们展示了通过简单的卷积核剪枝可以推理成本,在CIFAR10上,VGG-16的推理成本可降低高达34%,ResNet-110最高可降低38%,同时通过重新训练网络恢复接近原始精度。
2. 卷积核和特征图剪枝
是第
个卷积层的输入通道数,
和
是输入特征图的高和宽。卷积层将输入维度为
的特征图转化为维度为
的输出特征图作为下一层的输入。这里卷积核的维度为
,卷积层的乘加操作次数为
。如下面的Figure1所示:
当我们把一个卷积核剪掉后,对应的feature map也没了,减少了
操作。这是因为当前一个卷积层的卷积核被剪掉后,该层保留的卷积核参数不仅仅在卷积核个数这个维度上缩减了,还和上一个卷积层剪掉的卷积核个数有关,其简介导致了该层卷积核在通道上的缩减。
3. 方法
3.1 确定在单层中需要剪枝的卷积核
论文用
来表示第
层的一个卷积核,然后论文提出通过
,即一个卷积核类所有权值绝对值之和(L1范数)来表示每个层中该卷积核的重要程度。Figure2(a)展示了在CIFAR-10数据集上训练好的VGG16网络中每一个卷积层中每个卷积核权重绝对值之和的分布,可以看到每层的分布是不同的。
同时论文发现剪掉L1值最小的卷积核比随机剪枝或者剪掉最大的卷积核效果更好。从第
个卷积层剪掉
个卷积核的算法过程如下: