【论文阅读笔记】Learning Efficient Convolutional Networks through Network Slimming

论文地址:Network Slimming

论文总结

  本文提出了一种channel-level的裁剪方案,可以通过稀疏化尺度因子(BN层的scaling factor)来裁掉“不重要”的channel。
  文中的方案为:

  1. 在训练时,对BN层的scaling factor施加 L 1 L_1 L1正则化,在训练网络的同时得到稀疏化的尺度因子;
  2. 裁掉低于指定阈值的channel;【(1)设定裁剪的百分比;(2)依据百分比找到所有尺度因子对应的值作为阈值;(3)逐层进行裁剪】
  3. 对得到的模型进行fine-tune以恢复因裁剪损失的精度。

论文介绍

  本文的方法名为network slimming,通过裁剪每一层的channel数,达到模型压缩的目的。本文选择BN层的尺度因子作为裁剪channel的衡量指标。在训练时,对BN层的尺度因子添加 L 1 L_1 L1正则化,达到稀疏化的作用,这样就可以通过BN层的尺度因子趋于0来识别不重要的channel。
  一般来说,额外的正则化很少会影响训练出来的模型的性能。

  几种不同细粒度的裁剪方法的对比:

  1. weight-level的稀疏化裁剪,可以有较大的压缩率,但需要特定的硬件和库才能实现性能的提升(加速);
  2. layer-level的稀疏化裁剪,需要对完整的Layer进行裁剪,其灵活性较差。而且事实上,当网络足够深的时候(大于50层),移除layer才会带来收益;
  3. channel-level的稀疏化裁剪,是一个折中方案,其具有灵活性,可以适用于任何CNN中。

  本文的思路是引入一个尺度因子 γ \gamma γ,对应每个channel,可以与每一个channel的输出相乘。然后联合训练权重和尺度因子,并对尺度因子稀疏正则化。最后prune掉较小的尺度因子及其对应的channel(权重)。训练的损失函数如下,其中加法第一项是正常的网络损失函数,后一项是尺度因子的正则化, γ \gamma γ是尺度因子, λ \lambda λ是惩罚稀疏。

  本文中, g ( s ) = ∣ s ∣ g(s)=|s| g(s)=s,是常见的 L 1 L_1 L1正则化,也可用smooth L 1 L_1 L1代替。

  BN层的计算过程如下所示,其中 μ B \mu_B μB σ B \sigma_B σB是激活值的均值和方差, γ \gamma γ β \beta β是可训练的仿射变换参数(scale和shift)。

  本文选择直接使用BN层的 γ \gamma γ作为稀疏化裁剪的尺度因子。对于选择BN层的 γ \gamma γ作为尺度因子的分析如下:

  1. 如果CNN层之后没有BN层,添加Scale层,则Scale层和Conv层是线性变换。Scale缩小的值,可以在Conv层通过放大权重学习回来,所以是没有意义的;
  2. 如果Scale层在BN层之前,则会被BN层给归一化掉;
  3. 若在BN层之后,则每个channel都会有两个连续的Scale factor;

  若有一些层是跨layer连接的,比如ResNet和DenseNet,则需要特殊处理,因为一层的输出可能是多个层的输入,不能直接裁剪。本文的处理为在每个block开始的时候添加一个channel select 层,以选择它想使用的channel 子集。即主干网络的channel数不变,只是在每个block里面选择其中的一部分用于计算。

论文实验

  BN层的初始化为0.5,而不是其他论文所使用的的1,这是因为作者发现这样能得到更高的精度(但作者没有在ImageNet上实验)。对于VGG, L 1 L_1 L1正则化的惩罚稀疏 λ = 1 0 − 4 \lambda=10^{-4} λ=104;对于ResNet, λ = 1 0 − 5 \lambda=10^{-5} λ=105;对于DenseNet, λ = 1 0 − 5 \lambda=10^{-5} λ=105
  在裁剪的时候,需要决定阈值。文中的阈值通过所有尺度因子由一个百分比所对应的值来决定。

实验结果

  在CIFAR和SVHN数据集上的实验结果如下:

  各个模型在CIFAR-10上的裁剪情况如下:对于ResNet104,参数压缩率和FLOPS压缩率都相对不明显。作者猜测是由于bottleneck结构和channel select层导致的。

  VGGNet在CIFAR-10和CIFAR-100的多阶段压缩方案(一次prune和finetune挽回损失为一个阶段):可以看出,在较小数据集CIFAR-10,直到第5次迭代才出现了较大损失;在较大数据集CIFAR-100,在第三次迭代就出现了较大损失。

  不同惩罚系数 λ \lambda λ所导致的尺度因子分布:

猜你喜欢

转载自blog.csdn.net/qq_19784349/article/details/107214544