前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >优Tech分享 | RM -R:等价去除模型中的残差连接

优Tech分享 | RM -R:等价去除模型中的残差连接

原创
作者头像
优图实验室
修改2022-03-09 16:49:00
9760
修改2022-03-09 16:49:00
举报
图片
图片

ResNet是由一个个残差块堆叠而成的,每个残差块的数学表达式为:y=f(x)+x,其中f(x)叫残差,x叫残差连接(residual connection),或者直连通道(shortcut connection)。ResNet相较于VGG更受欢迎的一个关键原因,在于其使用的残差连接,能够将输入特征保留下来,在训练时只需要学习输出特征与输入特征的差值f(x),即残差。

残差连接使训练非常深的网络,成为了可能。然而,残差连接占用了ResNet50模型40%的显存[1],拖慢了模型的推理速度。因此,如何获得没有残差连接的“直筒型”模型 ,成为一个值得关注的课题。通常为了获得更好的表达能力,f(x)会使用非线性函数。然而Shang[4]认为非线性模块是限制直筒型模型的深度的罪魁祸首,并通过提出一种对称的非线性模块,能够训练198层的直筒型模型,不过在CIFAR10数据集上只有85%的准确率;DiracNet[3]在卷积层加上一个Dirac初始化的值,用于保留输入特征,从而只需要学习残差部分的值。

RepVGG[2]进一步改进这一方法,训练阶段显式地使用残差连接,推理阶段使用“重参数化”方法,将残差连接合并到残差中,从而得到直筒型的模型。并首次在ImageNet数据集上,获得了超过80%准确率。然而我们发现,重参数化只能用于去除线性模块两端的残差连接,非线性单元必须放在残差连接外面,这限制了模型训练的深度。本文我们将提出RM操作,能够等价的去除ResNet/MobileNetV2等模型的残差连接,可以轻易的得到1000层VGG、用在剪枝操作前,大幅提升剪枝效果、提升RepVGG在深层表现。文章与代码均已开源:

文章:https://arxiv.org/abs/2111.00687

代码:https://github.com/fxmeng/RMNet

01/重参数化的局限性

如下图a)是ResNet中的一个残差块,其中一个ReLU位于残差连接内部,另一个位于外部;而下图b)所示为RepVGG的连续两个残差块,ReLU均位于残差连接外部。

图片
图片

RepVGG这样设计是因为,重参数化技术并不能等价去除ResNet的中非线性操作两端的残差连接,而是利用乘法分配律,去除线性操作两端的残差连接:

图片
图片

Ensemble[5]把ResNet看作2ⁿ个模型的ensemble。然而RepVGG的每个残差块很容易就能被一个函数表达。残差块越多,两者表达能力的差距越大。此外,Shattered Gradients[6]认为,非线性函数是导致模型难以训练的原因,RepVGG的ReLU全部位于残差连接外面,梯度传播最多需要经过的ReLU数是ResNet两倍。

为了验证这一观点,在下图中对比RepVGG的效果,发现随着深度增加,RepVGG准确率逐渐下降。

图片
图片

从以上分析可知,相比ResNet,重参数化方法更像是VGG的升级版,用残差连接提升浅层模型的效果。因此一种能够等价去除ResNet中残差连接的方法,就显得很有价值。

02/RM 操作

RM Operation的发音和功能与remove相同:等价去除(remove)模型中的残差连接。同时RM是Reserving和Merging的缩写,接下来将详细介绍Reserving和Merging操作。

图片
图片

如上图a)所示,训练时使用正常的ResNet,残差连接将输入特征传递到残差的输出特征处(Reserving),将二者相加(Merging)。如图b)所示,为了在推理阶段去除残差连接,需要扩张其中每一层的通道数,使其能够允许输入特征通过且不改变其值(Reserving),然后在最后一层将其合并(Merging)。

Reserving:

• 根据Conv的性质:“每个输出通道功能相互独立”,我们可以在原Conv层基础上,增加一些新的输出通道。这些通道只在需要保留的通道处初始化为1,其余值均初始化为0(dirac初始化)。输入特征通过这样的通道,值不会改变。

• BN层表达式为:

图片
图片

图片
图片

图片
图片

时,

y=x,此时BN层也可以不改变输入特征。

• 由于每个残差块最后都有一个ReLU,每个残差块的输入和输出都为非负值。这一非负的特征,通过卷积和BN时都没有改变其值,ReLU也不会改变非负输入的值。

Merging:

特征被reserve到最后一层,是为了将其在最后一层Merging。根据Conv的性质:“所有的输入通道的乘积会相加到一起”,我们只需要在原Conv层的基础上,增加一些dirac初始化的输入通道,这样输入通道特征会被加到原Conv层的输出上。

从上面描述的过程可以看出,RM操作去除残差连接需要引入额外的通道。在下表中我们对比ResNet,RepVGG,和RMNet三种方法,其中RepVGG能够提升推理速度,付出的代价是训练开销大,准确率低。RMNet的训练开销和准确率都和ResNet一样,但是推理速度慢。我们往往更关注准确率和推理速度,因此我们提出接下来几种方法,最大化RM操作的优点,规避其缺点。

图片
图片

03/利用RM操作 将MobileNetV2变为V1

图片
图片

MobileNetV2有一些特性,是天然适合使用RM操作的。例如:1)两头窄,中间宽的可分离1*1卷积,只需要增加1/9T的Dirac初始化通道,就能Reserving和Merging输入特征图。其中T=6,为中间通道数与输入/输出通道的比例。2)中间一层为depthwise卷积,每个滤波器仅用9个参数提取一个输入通道的特征。只需要1/G的Driac初始化通道来Reserving输入特征图。其中G=C,为卷积分组数,Depthwise卷积的分组数等于通道数。3)将MobileNetV2的残差连接去除后,相邻残差块(如上图中虚线框所示)的输出通道和输入通道为依次为[Conv,BN,Conv,BN]。中间没有非线性操作,因此可以其合并为一个[Conv,BN]。正是这一性质,能够将MobileNetV2变为MobileNetV1。4)由于相邻两个卷积层可以合并,可以任意增大训练时输入输出通道,在Fuse操作后,可以得到同样的结构。

使用带残差、可以免费扩张通道、准确率高的MobileNetV2进行训练,再使用RM、Fuse操作将其等价变为速度更快的MobileNetV1。实验效果如下:

图片
图片

04/RM操作:剪枝的催化剂

残差连接将输入特征与输出特征相加到一起,因此要求剪枝前后,相邻残差块输入输出通道数量都必须保持一致。通常有三种处理残差连接的方式:1)不裁剪残差连接的输入输出通道,只裁剪中间的通道,如[7,8,9,10]。虽然避免了问题发生,但这种方式无疑存在大量无效通道没有被裁剪。2)将相邻的所有残差块的输入输出通道以相同的方式进行裁剪,如[11,12,13,14,15]。这种方式要求相邻所有残差块在相同位置同时为无效才能裁剪,这显然是一个较高的要求。有时不得不裁剪掉一些有用的通道。3)使用索引的方式,允许输入输出通道数量不等,如[16,17]。两个维度不同的矩阵,可以通过索引加到一起,因此剪枝可以不受残差连接的限制。但是带索引的模型结构不利于在通用硬件上使用,如ShuffleNetV2[18]指出,碎片化操作不利于高效的并行推理,再如torch.jit和TensorRT这些常用库不支持带索引的模型结构。

图片
图片

如上图所示,我们可以用RM操作将模型的残差去除,然后就可以随心所欲的进行剪枝了!

图片
图片

使用slim[16]方法对ResNet18进行剪枝(红色)对比先RM掉模型残差,再进行剪枝(绿色)。可以看出:(左图)在准确率相同时,RM操作使裁剪后的模型速度更快。(左右图)即使剪枝率接近,RMNet速度却快很多,这也归功于RMNet直筒型的结构更有利于推理加速。裁剪后的RMNet18,整个模型没有任何分支,每一层的输入输出通道都可以为任意数量。

图片
图片

同样,先使用RM操作将MobileNetV2变为MobileNetV1,然后使用AMC剪枝进行裁剪。使MobileNetV2在1.4倍真实硬件加速的情况下,比ImageNet的baseline准确率高出1.42%,比1.3倍加速的AMC剪枝高出2.27%!

图片
图片

在多种硬件环境下测试裁剪后的模型速度,RM操作均能显著提升剪枝后的模型速度。

图片
图片

05/利用RM操作 提升深层RepVGG的表现

图片
图片

如图所示,RM操作可以将一个带残差连接的网络变换为一个RepVGG,然后使用重参数化技术将其变化为VGG样式的网络。其中通过残差连接将输入通道保留到输出通道的比例叫做reserve ratio,当reserve ratio等于0时,模型就和RepVGG完全一致了。当reserve ratio增大时,会将RepVGG的一部分通道用于保留输入通道特征。

图片
图片

如上图所示分别为RepVGG在CIFAR10/100、ImageNet数据集上,随着深度增加的准确率。可以看出由于在训练过程中引入了跟ResNet一样,跨越非线性层的残差连接,RM操作能够使RepVGG在深层时表现更好。

06/总结

本文提出名为RM的操作,可以将ResNet等价变为VGG,将MobileNetV2变为V1。尽管引入更多参数,但是能够帮助剪枝得到更快的模型,帮助RepVGG训练的更深,相信未来还能有更多有意思的应用场景。

参考文献:

[1]. Residual distillation: Towards portable deep neural networks without shortcuts [2]. Repvgg: Making vgg-style convnets great again

[3]. Diracnets: Training very deep neural networks without skip-connections

[4]. Understanding and improving convolutional neural networks via concatenated rectified linear units

[5]. Residual Networks Behave Like Ensembles of Relatively Shallow Networks

[6]. The Shattered Gradients Problem: If resnets are the answer, then what is the question?

[7]. ThiNet: A Filter Level Pruning Method for Deep Neural NetworkCompression

[8]. Data-Driven Sparse Structure Selection for Deep Neural Networks

[9]. Discrimination-awareChannel Pruning for Deep Neural Networks

[10]. Neuron Merging:Compensating for Pruned Neurons

[11]. Pruning Filters forEfficient ConvNets

[12]. Gate Decorator: GlobalFilter Pruning Method for Accelerating Deep Convolutional Neural Networks

[13]. Neural Network Pruning with Residual-Connections andLimited-Data

[14]. GroupFisher Pruning for Practical Network Compression

[15]. AMC: AutoML for Model Compression and Acceleration on Mobile Devices

[16]. Learning Efficient Convolutional Networks through Network Slimming

[17]. Channel Pruning for Accelerating Very Deep Neural Networks

[18]. ShuffleNet V2: PracticalGuidelines for Efficient CNN Architecture Design

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档