模型剪枝----Learning Efficient Convolutional Networks through Network Slimming

模型剪枝是模型压缩中较为核心的方法,它可以清除网络中冗余的参数与计算量,让模型更加紧凑高效。下面我们介绍Learning Efficient Convolutional Networks through Network Slimming。

论文链接:https://arxiv.org/abs/1708.06519
官方代码(Torch实现):https://github.com/liuzhuang13/slimming
第三方代码(PyTorch实现):https://github.com/foolwood/pytorch-slimming

主要创新贡献

1.缩放因子和稀疏性惩罚
我们知道在大多数网络结构中都会设置bn层,bn可以加快训练速度,提高网络泛化能力。BN层实现过程如下图,计算样本均值方差,样本数据标准化处理,最后进行平移和缩放处理。注意BN层引入了 γ , β \gamma,\beta γ,β这两个可学习重构参数,让网络可以学习数据样本分布。
模型剪枝----Learning Efficient Convolutional Networks through Network Slimming_第1张图片
特征图的channel数对应着bn层 γ \gamma γ数,即64个卷积核就对应64个 γ \gamma γ。缩放因子 γ \gamma γ与通道的输出相乘,所以 γ \gamma γ的大小直接影响bn层输出的大小。若bn层输出越小,那么通过激活函数后的输出就越接近与0,后续的输出均近似0,因此该channel对整体网络的增益微乎其微。我们可以认为缩放因子 γ \gamma γ的值近似与该channel对网络的贡献值。所谓稀疏性惩罚就是在原来loss中增加一项关于 γ \gamma γ的正则化。
在这里插入图片描述
(x,y)是训练输入和目标,W是网络中可训练参数,第一项是CNN网络的训练损失函数,g(.)是在缩放因子上的惩罚项, λ \lambda λ是两项的平衡因子。其实假若loss中不加稀疏惩罚, γ \gamma γ也可以代表该channel对网络的贡献。只是增加正则化稀疏性惩罚后, γ \gamma γ的值会更加偏向0或1。在正则化的加持下,优化loss使得所有参数都在 γ \gamma γ偏向0或1的基础上来完成期望任务。与不加稀疏性惩罚相比,缩放因子 γ \gamma γ扮演选择的角色 γ \gamma γ的值更加接近0,压缩移除这些channel对网络整体影响不大。
模型剪枝----Learning Efficient Convolutional Networks through Network Slimming_第2张图片
2.通道剪枝微调
引入缩放因子正则项之后,我们得到的模型中许多缩放因子都会趋于0(如Figure 1所示)。然后我们剪掉接近零的缩放因子对应的通道,这里说的再清楚一点,假设经过卷积之后的feature map 的维度为 h x w x c,h和w分别为特征图的高和宽,c为通道数,将其送入BN层会得到归一化之后的特征图,c个feature map中的每一个都对应一个 γ \gamma γ,前面所说的剪掉小的 γ \gamma γ对应的通道实质上就是直接剪掉这个feature map对应的卷积核。至于什么样的 γ \gamma γ算小的呢?这个取决于我们为整个网络所有层设置的一个全局阈值,它被定义为所有缩放因子值的一个比例,比如我们将剪掉整个网络中70%的通道,那么我们先对缩放因子的绝对值排个序,然后取从小到大排序的缩放因子中70%的位置的缩放因子为阈值,通过这样做,我们就可以得到一个较少参数、运行时占内存小、低计算量的紧凑网络。

一般剪枝后,网络性能会降低。为了缓解恢复网络性能,我们会对压缩后的模型继续进行微调。

3.Muti-pass方案:
我们可以将我们提出的方法从单阶段的学习方案扩展到多阶段,what meaning?通俗来讲,就是多次进行“网络瘦身”,这样可以得到一个更紧凑的模型。
模型剪枝----Learning Efficient Convolutional Networks through Network Slimming_第3张图片

实验结果

模型剪枝----Learning Efficient Convolutional Networks through Network Slimming_第4张图片

你可能感兴趣的:(深度学习,深度学习,计算机视觉,人工智能,模型压缩)