[论文笔记][ICLR-2019] Slimmable Neural Networks

Slimmable Neural Networks

论文地址:https://arxiv.org/abs/1812.08928
Github: https://github.com/JiahuiYu/slimmable_networks
OpenReviews:https://openreview.net/forum?id=H1gMCsAqY7

Motivation

移动端的应用对算法运行效率有较高要求,但不同的移动端设备计算能力差异很大,即使是同一设备计算资源也会变化(例如运行很多后台程序,省电模式等情况)。现有的轻量级网络结构,例如MobileNet、ShuffleNet等,通过width multiplier来控制模型复杂度,训练得到多种宽度的模型,并针对不同设备进行部署。但是作者认为此种方式欠缺灵活性,不能在运行时对模型进行调整,所以提出了一种新的网络训练方式。

可瘦身的神经网络,针对不同硬件和运行环境,可以快速提供与之相适应的CNN模型来完成任务。
硬件配置好的,给一个大模型,硬件配置差的,给一个小点的模型。同一个模型,设置一下参数就可以了

在 runtime 阶段,网络可以根据 on-device benchmarks and resource constraints 快速调整网络的宽度( number of channels in a layer),不用重新下载不同的模型。同一个网络模型在不同的设备上运算时间也是不一样的。

该方法能够训练一个网络模型,并在运行时根据精度和速度要求来动态调整网络宽度,可以理解为不同规模的模型共享一组参数。此种方式训练得到的模型,称为Slimmable Neural Network,在不同宽度设置的情况下能够与单独训练的模型具有差不多的分类精度,且在物体检测、实例分割、人体关键点检测等任务上具有更高的性能。
在这里插入图片描述

Slimmable Neural Networks

网络结构

主干网络可以采用现有的网络结构,例如MobileNet v1\v2,ShuffleNet,ResNet等;然后根据需求设置不同的子网络宽度,例如[0.25, 0.5, 0.75, 1.0];最后联合训练所有的子网络。

SWITCHABLE BATCH NORMALIZATION

在实验中,作者发现训练过程很稳定,但是测试集的准确率很差,ImageNet上的Top-1准确率大约只有0.1%。通过分析,作者认为这是由于BN层在模型训练和测试时的统计量差异导致的。

BN层通过对特征进行归一化来保持训练过程中梯度的稳定。在训练时,BN层使用当前Batch的均值和方差进行归一化,并对数据集总体的均值和方差进行估计;在测试时,使用训练中估计的总体均值和方差进行归一化。

回到slimmable neural networks中,虽然不同子网络共享同一组参数,但是由于输入的通道数会改变,导致输出特征图的均值和方差也会变化,并通过滑动平均的方式加权到总体的均值和方差估计中。因此,在测试时,BN层使用的均值和方差相当于是单独每个子网络总体均值和方差估计的加权结果,因此和训练时的使用的均值和方差不一致。

为了解决这个问题,作者提出了switchable batch normalization,即不同子网络使用独立的BN层。

Q: 使用Instance Normalization应该也可以,但是不知道对于测试结果有什么影响?可能会变差??

训练算法

为了使slimmable neural networks具有较高的整体准确率,训练算法累加不同子网络的梯度并更新参数,进行联合优化。
训练算法

实验结果

Switchable Batch Normalization

图中右侧为验证集测试误差,小图表示不使用Switchable batch normalization时的情况。从结果可以看出,使用Switchable batch normalization能够有效地结果训练和测试时的统计不一致问题。
在这里插入图片描述

ImageNet分类

ImageNet分类结果,一部分slimmable neural networks能够提升分类准确率,一部分模型精确率下降。
在这里插入图片描述

物体检测、实例分割、特征点检测

使用ImageNet上训练的模型进行初始化,可以发现在这三个任务上都取得了提升,可能来自于两点:

  1. 更好的初始化特征。slimmable neural network使用完整的(1.0x)网络参数进行初始化,具有单独训练时更好的预训练特征。对于小网络而言,相当于隐式的知识蒸馏(Knowledge Distillation)过程。
  2. 更多的监督信号。不同复杂度的子网络联合进行优化,对不同的子网络都能提升(甚至连1.0x时也能提升)。
    在这里插入图片描述

总结

  • 提出了一种有效的根据计算资源调整模型复杂度的方法。
  • slimmable neural network竟然对1.0x的模型也能带来提升,说明联合训练子网络的方式,能使模型更好??
  • 模型需要设置不同的宽度比例,能否改进为任意宽度?

猜你喜欢

转载自blog.csdn.net/zhuiqiuk/article/details/88079990