阅读笔记——Learning Efficient Convolutional Networks through Network Slimming

概述

CNN 模型在许多方面都取得了进展,但要将一些高精度 CNN 模型应用到实际场景中,还是面临一些问题:

  • 模型大小:模型参数和结构需要保存在硬盘上,对于一些嵌入式系统来说是一个不小的负担;
  • 运行时内存需求:推理时产生的中间变量需要地方存储;
  • 计算操作次数:一个比较大的 CNN 网络在移动设备上的处理时间可能可以达到数分钟,这使得应用于实时应用不现实。

这些实际问题使得人们考虑对模型大小进行压缩。这篇文章提出,可以对 BN 层的尺度因子使用 L1 正则化,将 BN 层的尺度因子推向 0 使得我们可以辨别那些不重要的通道进行裁剪。多增加的正则化对性能造成的影响很小,尽管可能会暂时地降低模型性能,但是通过 finetune 后可以弥补甚至可能超过原有模型性能。而且这一裁剪过程可以重复多次用以获得一个更紧凑的网络。

方法

现有的一些稀疏化方法,包括权重稀疏化、核稀疏化、通道稀疏化和层稀疏化等。权重稀疏化灵活性最高,也获得最高的压缩率,但是通常需要特定硬件的支持才能达到加速的效果。层稀疏化最粗糙,灵活性最低,但是在一般的硬件上都能获得加速效果。通道裁剪有一个比较好的均衡,而且也可以在包括 CNN 或者全连层网络上都可以进行应用。

为了达到通道稀疏性的效果,和这个通道相关的输入和输出连接都需要被裁剪。

论文提出的方法,是对每个通道训练一个尺度因子,将这个尺度因子和通道输出进行相乘。在网络训练时对网络和这些尺度因子进行联合优化,然后裁剪掉尺度因子小的通道,并对裁剪后的网络进行微调。因此网络的损失函数就是:
在这里插入图片描述
其中 g ( γ ) g(\gamma) g(γ) 是稀疏性惩罚函数, γ \gamma γ 是损失平衡系数。这里使用的稀疏性惩罚函数是 L1 范数,当然也可以使用 Smooth-L1 函数。由于尺度因子和网络联合优化,因此网络可以自动识别出不重要的通道,这使得可以在不明显影响网络性能的情况下进行通道移除。整体过程如下图所示。
在这里插入图片描述

此外现如今的网络大都使用了 BN 层,如下式所示:
在这里插入图片描述
BN 层将对每个通道进行缩放和平移,因此可以直接使用 BN 层的缩放因子进行网络裁剪。

通过稀疏化训练,裁剪尺度因子在 0 附近的通道。设置一个全局阈值比例来完成裁剪,将处于这个比例外面的小权重因子对应的通道全部进行裁剪。

裁剪可能会造成网络性能暂时性的下降,但是这个下降可以通过对裁剪后的网络进行 finetune 来恢复。在作者的实验中,finetune 后的小网络甚至可以获得比之前大网络更高的精度性能。

如下图所示,这个裁剪过程还可以分成多次进行,也就是对一个裁剪过后的网络,再次进行稀疏化训练、裁剪、finetune,来获得一个更加紧凑化的小网络。
在这里插入图片描述
特殊的,对于跳层连接,使用一个 channel selection 层 mask 掉不重要的通道完成 add 操作。

实验及指标

实验细节

  • baseline 网络都从头训练;
  • 在训练稀疏化网络时,对缩放因子正则化损失权重进行了网格超参搜索( γ = 1 0 − 3 , 1 0 − 4 , 1 0 − 5 \gamma=10^{-3},10^{-4},10^{-5} γ=103104105);
  • 在 finetune 小模型时,把稀疏化训练模型的参数复制给裁剪后的模型。

实验指标

如下图所示,在 cifar10 上面的实验,当裁剪比例超过一个阈值时可能造成模型性能的下降:
在这里插入图片描述
如下图所示,当 γ \gamma γ 正则化损失系数逐渐增大时,有更多的通道被认为是不重要通道:
在这里插入图片描述
最终,使用 VGG、DenseNet 和 ResNet,在 cifar 和 SVHN 数据集上的裁剪实验结果如下表所示。可以看到,尽管经过了大量的裁剪,但是仍然基本保持了 baseline 模型的精度性能。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇哇九号

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值