首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >优Tech分享 | RM -R:等价去除模型中的残差连接

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

原创
作者头像
优图实验室
修改于 2022-03-09 08:49:00
修改于 2022-03-09 08:49:00
1.2K0
举报

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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Excel无所不能的XLOOKUP,XLOOKUP函数不同场景的应用方法
今天跟大家分享最近非常流行的XLOOKUP函数,Office365体验版中的新函数。XLOOKUP函数之所以能流行起来是因为它兼容了VLOOKUP/LOOKUP/HLOOKUP等多个函数的功能,说XLOOKUP是集才华于一身一点也不过分。吹捧了半天相信大家已经等不及要认识他了吧,一起来学习一下吧!
matinal
2023/10/13
9200
Excel无所不能的XLOOKUP,XLOOKUP函数不同场景的应用方法
Excel的6个最重要的文本函数
Excel的文本函数可用于清理文本/字母数字值、提取单元格数据的一部分以及在输出页面中显示组合结果。在本文中,通过6个日常示例熟悉Excel中最重要的文本函数。
fanjy
2021/07/12
9120
Excel的6个最重要的文本函数
拒绝加班!工作中必会的15个excel函数
本文主要介绍了Excel中常用的15个函数,包括SUM、AVERAGE、COUNT、MAX、MIN、IF、VLOOKUP等。这些函数是Excel中最基础也是最常用的函数,对于数据的分析和处理具有重要的作用。本文以图文并茂的方式对每个函数进行了详细讲解,并附有实例,帮助读者更好地理解和应用这些函数。
企鹅号小编
2018/01/08
4.2K0
拒绝加班!工作中必会的15个excel函数
手把手教你实操vlookup的7种用法,这个函数别说没用过哦!
今天和大家来说说VLOOKUP的那些事儿,深入了解一下VLOOKUP函数的各种用法,看看这位大众情人还藏着多少不为人知的秘密。
1480
2020/03/24
2.7K0
手把手教你实操vlookup的7种用法,这个函数别说没用过哦!
Python - xlrd,xlwt模块操作excel文件
Python输出的数据用Excel文件查看往往更直观,而且Excel中的数据也常常需要读取到Python程序中。Python的xlrd和xlwt模块便是为此而生。文本记录这两个模块的使用方法。 测试用例 使用read_test.xlsx作为读取excel的测试文件。其中两个工作表,分别为: 模块安装 用pip可以方便地安装 pip install xlrd pip install xlwt xlrd 读取excel文件(xls,xlsx) import xlrd ## 读取e
为为为什么
2022/08/04
5650
Python - xlrd,xlwt模块操作excel文件
精通数组公式16:基于条件提取数据
在Excel中,基于AND或OR条件从数据集中提取数据是经常要做的事。可以使用下列方法来实现:
fanjy
2021/03/12
4.6K0
效率神器:DeepSeek如何轻松搞定Excel公式生成(附3个实战案例)
DeepSeek在Excel公式生成方面展现了独特的赋能能力,主要具备以下特点。
全栈若城
2025/03/02
7480
效率神器:DeepSeek如何轻松搞定Excel公式生成(附3个实战案例)
在职场中,Excel公式生成常常让人头疼,但有了DeepSeek,这一切变得简单高效!
空白诗
2025/03/01
4951
效率神器:DeepSeek如何轻松搞定Excel公式生成(附3个实战案例)
【收藏】数据分析必会的Excel高频函数合集
提到Excel,估计职场人都不会陌生,毕竟很大一票人都会在简历上写着"熟练使用Excel"。职场必备技能排行榜上,Excel绝对地位显赫。不过有多少人只是把Excel当作简单的数据录入工具和简单统计工具呢?这里不妄加评论。
张俊红
2021/03/04
4.2K0
做完这套面试题,你才敢说懂Excel
下面的题目来自一份商品专员的面试题,其中有涉及到条件格式、自定义排序、数据验证制作下拉菜单、查找引用类函数、文本提取函数等等技能。
猴子聊数据分析
2020/07/15
5.2K0
数据分析常用的Excel函数合集(上)
Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。
朱小五
2020/03/06
3.5K0
数据分析常用的Excel函数合集(上)
懂Excel轻松入门Python数据分析包pandas(二十):数值条件统计
> 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas
Excel催化剂
2021/08/19
8320
懂Excel轻松入门Python数据分析包pandas(二十):数值条件统计
精通数组公式17:基于条件提取数据(续)
创建数据提取数组公式的技巧是在公式内部创建一个“匹配记录”相对位置的数组。如下图8所示,可以看到与条件相匹配的记录的相对位置是7和10,它们将作为INDEX的row_num参数的值。
fanjy
2021/03/12
3.6K0
数据分析常用的Excel函数
FIND 和 SEARCH 两个函数几乎相同,区别在于FIND 精确查找,区分大小写; SEARCH 模糊查找,不区分大小写。
活用数据
2019/06/03
4.6K0
数据分析常用的Excel函数
Excel公式技巧105:带条件的部分匹配计数
引言:本文学习整理自myspreadsheetlab.com,很好的一个应用示例,特辑录于此,也供有兴趣的朋友参考。
fanjy
2021/09/22
5.9K0
办公技巧:EXCEL10个常用函数介绍
EXCEL函数太多了,其实常用就是10多个个,只要学会这十个,可以解决工作当中的大部分问题,感兴趣的朋友可以收藏一下!
小明互联网技术分享社区
2022/02/17
2.1K0
办公技巧:EXCEL10个常用函数介绍
在 Excel 中,拼接字符串的几种方式
这种情况下最常用的就是字符串拼接, 在 Excel 中,拼接字符串有以下几种常见方法:
保持热爱奔赴山海
2025/04/10
6.8K0
【Excel新函数】动态数组系列
相比Power BI,Power Query和Power Pivot在行列层级运行计算,Excel一直以来主要还是在单元格层面上的。Excel里,每行每列所有单元格进行相同逻辑的计算时,常规的做法是在第一个单元格填写公式,然后向下向右填充每一个单元格。如下图所示,计算各洲折后价的表格,蓝色区域所有单元格都要填入一个公式。
btharp
2023/03/09
3.6K0
【Excel新函数】动态数组系列
Excel常用函数大全
我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍。 1、ABS函数    函数名称:ABS 主要功能:求出相应数字的绝对值。 使用格式:ABS(number)    参数说明:number代表需要求绝对值的数值或引用的单元格。 应用举例:如果在B2单元格中输入公式:=ABS(A2),则在A2单元格中无论输入正数(如100)还是负数(如
小莹莹
2018/04/20
2.9K0
Excel常用函数大全
数据分析基础——EXCEL快速上手秘籍
这篇文章是本系列的第一篇,选择性汇总了EXCEL的常用且重点的模块和公式,用作内部员工EXCEL基础操作培训,以帮助表格基础薄弱的同事快速熟悉常用操作,提升工作效率。现将内容分享,作为数据分析基础的第一篇。
数据森麟
2019/09/27
2.3K0
数据分析基础——EXCEL快速上手秘籍
推荐阅读
相关推荐
Excel无所不能的XLOOKUP,XLOOKUP函数不同场景的应用方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档