【PRUNING FILTERS FOR EFFICIENT CONVNETS】半译笔记

一个还可以的中文博客:Pruning Filters For Efficient ConvNets论文解读 - 知乎

摘要

近期关于降低模型压力的方法包括在不降低原始精度的情况下修剪和压缩不同层的权重。基于大小的权值剪枝(magnitude-based pruning of weight)减少了全连接层中的大量参数,但由于经过剪枝的网络中的不规则稀疏性(irregular sparsity in the pruned networks),可能不能充分降低卷积层中的计算成本。我们提出了一种CNN的加速方法,从被认为对输出精度影响很小的CNN中删除滤波器(filters)。通过去除网络中的整个滤波器及其连接特征图(their connecting feature maps),大大降低了计算成本。与修剪权值相比,这种方法不会导致稀疏的连接模式。因此,它不需要稀疏卷积库(sparse convolution libraries)的支持,并且可以使用现有的有效的BLAS库(BLAS libraries)来进行密集的矩阵乘法。

1、介绍

对于参数的修剪已经做了大量的工作,但是,修剪参数并不一定会减少计算时间,因为删除的大部分参数都来自计算成本较低的全连接层,例如,VGG-16的全连接层占总参数的90%,但只占总浮点操作的不到1%。他们还证明了卷积层可以被压缩和加速,但需要稀疏BLAS库,甚至是专门的硬件。使用CNN稀疏操作提供加速的现代库通常是有限的,并且维护稀疏数据结构(sparse data structures)还会产生额外的存储开销——对于低精度权重(low-precision weights)可能非常重要。

引言和相关工作稍后看

3、卷积核和特征图剪枝

3.1.确定在单层中需要被剪枝的卷积核

3.2 弄清楚每层的剪枝敏感性 

为了弄清楚每层的敏感性,我们对民一层独立剪枝并在验证集上对剪枝后的网络进行评估。我们根据经验来决定对每一层的卷积核进行剪枝,对于深度网络(如VGG-16或ResNets),我们观察到同一stage(相同尺寸的特征图)对应的层(layers in the same stage)对剪枝的敏感度相似,为了避免引入分层的元参数(later-wise meta-parameters),我们对于同一stage的所有层(layers in the same stage)使用相同的剪枝比例。对于那些敏感度高的层,我们剪枝时比例很小,甚至完全不进行剪枝。

3.3 一次性进行多层剪枝

之前的工作是逐层剪枝,然后重复训练来恢复精度。然而,理解如何能一次性对多层进行剪枝是非常有必要的:

1、对于深度网络,逐层剪枝再训练太耗时;

2、整体剪枝的方法提供给网络稳健性一个全面的视野,从而产生一个更小的网络;

3、对于复杂的网络,一个整体的方法很有必要,比如对于ResNet,对恒等映射特征图或者每个残差模块的第二个层剪枝会导致额外层的修剪

为了对多层同时剪枝,我们考虑了两个策略:

(1)每一层独立剪枝,即在计算(求权重绝对值只和)时不考虑上一层的修剪情况,所以计算时下图中的黄点仍然参与计算

(2)贪心策略,计算时不考虑已经修剪过的,即黄点不参与计算(黄点那个图应该是卷积核,是四维中的两个维度)

贪婪方法(the greedy approach),虽然不是全局最优(not globally optimal),但是整体(holistic)的,修剪网络的精度更高,特别是在许多修剪许多滤波器的时候。

跨越连续的图层进行剪枝(Pruning filters across consecutive layers),独立剪枝策略计算过滤器权重只和(被标绿的部分),而不考虑前一层中删除的特征图(如蓝色所示),因此黄色标记的内核权重仍然包含在内。贪婪剪枝不计算已经修剪过的部分。这两种方法都得到了一个的卷积核矩阵。

 图4,对具有跳连接的残差网络剪枝。残差块(residual block)的第二层的需要裁剪的过滤器(filter)(标记为绿色),由跳连接映射的裁剪结果决定。残差块的第一层可以不受限地进行修剪。(这里维度的变化不太好理解,个人理解是可以把关于图像大小的维度看成一维,如wh,kk,这样,feature map就从三维变成了一维,卷积核就从四维变成了二维。跳链接中要实现维度的变换只要保证二维卷积核图的一个维度和前面的特征图相同,一个维度对应后面的特征图就行了。这里我对与剪枝对维度影响的问题比较纠结,后来发现中间怎么剪枝没啥影响,跳连接的卷积核只要考虑原来的和最后的特征图的维度就行了,中间怎么剪是它们的事。)

ResNet的结构对剪枝提出了限制条件,残差块中的第一个卷积层可以随意修剪,因为它不会改变残差块输出特征图的数目,然而第二个卷积层和特征映射的剪枝很困难。由于跳连接更重要,所以对于第二层的剪枝应该由跳连接的剪枝结果决定,也就是由跳连接卷积核的权重来评估。

3.4 重新训练剪枝后的网络来恢复精度

在剪枝过后,通过再训练可以补偿剪枝造成的精度损失,有两种策略:

1.一次性剪枝并重新训练:一次性对多层的卷积核剪枝,然后重新训练直到准确率恢复

2.交替剪枝和训练:逐层或逐卷积核剪枝,然后再训练,重复多次

对于具有修剪弹性的层(layers that are resilient to pruning)(修剪弹性是什么意思,是那些不太敏感的层吗),第一种方法可以用于删除网络的重要部分,并且可以通过短时间重新训练来恢复精度(小于原始训练时间)。但是,当敏感层的一些Filter被剪掉或大部分网络被剪掉时,可能无法恢复原始精度,这时第二种方法可能会产生更好的效果,但迭代过程需要更多的epochs,特别是对于非常深的网络。

实验结果:

在VGG(on CIFAR-10)和Residual networks中进行了实验,这两个网络在全连接层的权重比较少,相比于AlexNet和VGG(on ImageNet)(VGG-16是一个最初为ImageNet数据集设计的高容量网络,最近Zagoruyko(2015)在CIFAR-10上应用了略微修改版本,取得了最先进的结果)。如果一个卷积层被修剪,后续的批归一化层的权重也会被删除。为了获得每个网络的基线精度(baseline accuracies),我们从头开始训练每个模型,并遵循与ResNet相同的预处理和超参数。对于再训练,我们使用恒定的学习率0.001,对于CIFAR-10再训练40个epochs,对ImageNet再训练20个epochs,是原训练epoch的四分之一。之前有人的再训练次数多达原始次数的三倍。

从头开始训练一个修剪后的模型比再训练的表现差,这可能表明训练一个小网络是困难的。

4.1 VGG on CIFAR-10

我们使用Zagoruyko的模型,但是加上了Batch Normalization layer(2915)在每个卷积层和第一个线性层的后面,而不使用Dropout(2014)。如图2所示,每个512层的卷积层可以在不影响精度的情况下删除至少60%的filters。图2显示,经过再训练,这些层90%的filters都可以安全的删除。一种可能的解释是,这些过滤器在4×4或2×2的特征图上运行,它们在如此小的维度中可能没有有意义的空间连接。例如,CIFAR-10上的ResNets不会对8×8维以下的特征映射执行任何卷积。与之前工作的结果不一样,我们观察到,与接下来几层相比,第一层对剪枝是鲁棒的。这对于像CIFAR-10这样的简单数据集是可能的,在这个数据集上,模型没有学习到像ImageNet上那么多有用的filters。如图5所示,即是80%的过滤器被修剪,剩余的过滤器数量仍然大于原始输入通道的数量。然而当从第二层去除80%的过滤器时,盖层对应于64到12的映射,这可能会丢失从以前层获得的重要信息,从而损害精度。随着50%的过滤器在第一层被修剪,从8到13,我们实现了64%的FLOP减少在相同的精度上。

4.2 ResNet-56/110 on CIFAR-10

 CIFAR-10的ResNets有三个部分的残差块,大小分别为32×32、16×16和8×8。每个stage有相同数量的残差块。当feature map的数量增加时,shortcut layer的恒等映射在增加的维度上填充0.由于没有跳连接的卷积核,我们只考虑修剪残差块的第一层(为啥第二层不修剪了,难道是因为第二层修剪了之后跳连接过来的原feature map太伤了?)。如图6所示,大部分图层对剪枝都是鲁棒的。 对ResNet-110,修剪某些单一的层甚至提高了表现。此外,我们还发现了那些对修剪很敏感的图层(layers 20, 38 and 54 for ResNet-56, layer 36, 38 and 74 for ResNet-110),位于靠近feature map数量变化的层的残差块上,如每个阶段的第一个和最后一个残差块。我们认为这是因为精确的残差对于那些新增加的feature map是必要的。

通过跳过这些敏感层,可以提高再训练的性能。如表1所示,ResNet-56-pruned-A通过剪枝10%的过滤器,同时跳过敏感层16、20、38和54,从而提高了性能。此外,我们发现深层的layers比前面的层更敏感。因此,我们队每个阶段使用不同的修剪率。我们用p_{i}来表示第i层的剪枝率。当每个阶段有两个以上的残差块时,中间的残差块可能是冗余的,并且很容易修剪。这可能解释了为什么ResNet-110比ResNet-56更容易被修剪。(stage可能是同样图片大小的一些残差块,一般是一个stage使用相同或者接近的剪枝率)

4.3 ResNet-34 on ILSVRC2012

ResNet-34使用了投影映射(projection shortcut),相比前面的网络更难裁剪。而且在残差块中,第二层比第一层更难裁剪,这可能呼应了为了更深的网络而设计的瓶颈结构,它最早的减少而来输入层的维度然后在后面增加输出的维度来匹配恒等映射。

4.4 随机修剪filters和修剪最大filters的对比

我们将我们的方法与随机修剪和最大修剪做了对比。最小剪枝比随机剪枝效果更好。随着简直比例的增加L1范式最大剪枝的精度迅速下降,说明了L1范式大的filters的重要性。

4.5 与基于特征图活性(activation-based)剪枝对比

基于特征图活性的剪枝删除了那些活性低的特征图和它对应的滤波器以及卷积核(2015),这需要样本数据作为输入来确定需要删除的特征图。

看不懂,以后看吧

5 结论

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值