前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无处不在的残差网络

无处不在的残差网络

原创
作者头像
深蓝学院
修改2020-12-04 17:36:51
9990
修改2020-12-04 17:36:51
举报

CW 深蓝学院

作者简介

CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元素与医疗病例图像分割、视频实时人脸检测与表情识别、OCR等项目。

目前也有在一些自媒体平台上参与外包项目的研发工作,项目专注于CV领域(传统图像处理与深度学习方向均有)。

Foreword

ResNet绝对算得上是深度学习模型中的网红,哦不,应该是名流了,自从2015年它在ImageNet比赛的分类任务中拿下冠军后便一炮而红,而且至今“久盛不衰”,几乎各类视觉任务都能见到它的身影。

这时候大伙就难免有疑问了——这种模型怎么这么红呢?

笔者也有过这样的疑问,下功夫研究了一番后,发现这货的残差结构确实简单好使,解决了深度学习历程中的一个重大难题(若这个问题没解决,可能深度学习就“不能那么深”了),而且还能很方便地集成到各种其它网络架构中,同时也没有额外增加多少参数量。

由于这种模型好用,因此很抢手,许多炼丹者们对它进行了五花八门的改造,玩出了各种花样,小有名气的有使用分组卷积(Group Convolution)的 ResNeXt 以及加入了空间注意力(Channel Attention)机制的 SE-ResNet 和 SE-ResNeXt。

另外还有加入混合注意力(Spacial & Channel Attention)机制的 Residual Attention Net 等一批想混出名堂的年轻人,CW也都“查了它们的身份证”,对它们进行了学习,为了加深理解,基于Pytorch框架对这些模型的源码实现都手撸了一遍并进行了训练。

注意到本文标题没?带了个'family',意义很明确,即本文接下来要介绍的这批网络模型ResNet 都是一个家族的,它们都对原生的残差网络进行了改造,目的是为了更好地解决不同类型的任务。当然,文章首先会对大咖 ResNet 进行介绍,其中若有不妥之处欢迎各路高手反馈与指点,感恩!

2020/05/05 更新:

Residual Nets Family 新增一位王者——ResNeSt!被誉为目前最强的 ResNet 改进版,有兴趣了解的朋友们可以继续关注本公众号文章~

Outline

i) 残差家族的宗师 — ResNet

ii) 进化 — ResNetv2

iii) 分工合作 — ResNeXt

iv) 做事需有“轻重之分” — SE-ResNet & SE-ResNeXt

v) 更强大、更细致、更专一 — Residual Attention Net

1、残差家族的宗师 —— ResNet

Paper: Deep Residual Learning for Image Recognition

谈到深度学习,这个“深”可是很有代表性意义的,更深的网络通常能学习到更丰富的特征,深度神经网络在许多图像任务上取得了一系列的突破,这些现象都表明了网络深度的重要性。

这么说来,更深的网络应该比浅的网络表现好,但实验发现,网络加深了,准确率却下降了,或许大家都下意识地认为可能是梯度消失/爆炸或过拟合造成的,然而并非这样。

无处不在的残差网络
无处不在的残差网络

(浅层网络 vs 深层网络)

由上图可以知道,深层网络在训练集上的表现并不如浅层网络,因此这不是过拟合造成的。那么看来是梯度消失/爆炸咯?对不起,让你失望了,也不是!这个小case早已通过各种权重初始化(最常用的有 XavierKaming 初始化)和 中间层归一化(如 Batch Normalization)方法很大程度上解决了,不然几十层的网络在反向传播时早就玩不下去了(无法收敛)。

那到底是为啥呢?其实说来也有点“玄”。网络更深,层数更多,需要训练的东西也就更多,各层的参数和数据在训练过程中需要相互协同,即各层参数会基于输入数据产生输出,通过反向传播计算误差进行更新,输入输出分布在经过各层处理后分布可能改变,而各层的输入是前一轮的输出。

这意味着下一轮前向反馈过程中各层的输入数据分布可能改变,于是这一轮拟合好的参数在下一轮反向传播时更新的“方向”(这一轮叫你去北极,下一轮却改口叫你去南极...)可能发生改变,训练难度更大,因此一昧地加深网络反而导致了退化。

这就成了一个优化问题,既然网络加深了,那么至少也得不差于浅层网络吧,不然多尴尬呀,于是ResNet 拿出了它的大招——残差学习,构造一个表现至少与对应的浅层模型相当的深层模型来进行学习,具体说来,是这样:

假如浅层的输出是x,经过深层后,输出为H(x),通常来说其它网络模型的做法是训练拟合H(x),但是 ResNet 比较有个性,它把H(x)看作两部分,即H(x) = x + F(x),然后再训练拟合这两部分。

你可能会说,这不是多此一举吗?你别看这操作简单,但在优化层面上可是有实质性不同的,假如x已是最优,那么F(x)在训练过程中将被push趋近于0,这样,继续加深网络的话,网络也一直处于最优状态而不输于浅层网络了。

在这里,F(x) = H(x) - x 被称为“残差映射”(residual mapping),而 x 则称为 恒等映射(identity mapping)。

无处不在的残差网络
无处不在的残差网络

(残差学习模块)

上图中的曲线连接称作 shortcut connections(捷径连接),简称shortcut,通常仅执行恒等映射,这种情况下,既没有额外参数,也不增加计算的复杂性;另一种情况就是x经过中间各层后产生的F(x)的通道数与x不一致,此时的shortcut通常会包含卷积层将x的尺寸与通道数映射到与F(x)一致,使得两者可进行element-wise add。

ResNet 中的残差学习模块有两种形式,如下左图的形式称作 buliding block,用于层数较少的模型,右图的形式称作bottleneck,降低参数数目(想一探究竟的朋友们可以自行了解下1x1卷积降低参数的原因),减少计算量,使得模型能进一步加深。

无处不在的残差网络
无处不在的残差网络

(residual learning modle: building block & bottleneck)

一起来看看使用了不同层数的 ResNet 结构,如下图,其中 ResNet18 和 ResNet34 用的是building block,而ResNet50、ResNet101和ResNet152用的是 bottleneck,这些家伙里面“最爱抛头露面”的是 ResNet50 和 ResNet101。

最后提一点,这里ResNet的名称比如ResNet101并不是指其有101层,101指的仅仅是卷积层和全连接层的数目,诸如池化层、归一化层和激活层等这些家伙(内心独白:我们就不配拥有地位吗!?)并没有算进去,计算一下便可知:101 = 1 + (3 + 4 + 23 + 3) x 3 + 1,首尾的两个1分别对应开头的 conv1 和末尾的 fc,中间是 conv2_x,conv3_x,conv4_x 和 conv5_x 总共的卷积层数目。

无处不在的残差网络
无处不在的残差网络

(ResNet的各种结构)

2、进化 —— ResNetv2 vs ResNet

Paper: Identity Mappings in Deep Residual Networks

ResNet 是一个很有个性的家伙,2015年成名后,它进行了一年的修炼,对自己最为得意的残差结构进行了各种魔改,然后进行实验,根据实验结果选取最优秀的那个,最终于2016年进化成ResNetv2。

无处不在的残差网络
无处不在的残差网络

(ResNet “修炼过程全纪录”)

在学习过程中,相比结果,过程才是最重要的,这才是成长的时刻。因此先抛开结果不谈,一起来看看上图中的各种残差模块,你知道哪个是 ResNet 最开始用的么,你认为各种结构的合理/不合理性哪里?

一眼看去,貌似中间的(3)很合理,残差中使用的是 weight(也就是卷积Conv)->BN->ReLU,属于我们的常规操作,但是你仔细想想,由于最后是ReLU,这样残差中出来的结果就是非负的,经过多次的前向反馈后

无处不在的残差网络
无处不在的残差网络

可能会单调递增,影响网络的表征能力,因此我们希望残差出来后的结果分布均匀

OK,明白了,那试着把(3)中残差里最后的 BN+ReLU 移到恒等映射和残差加和之后像(2)一样呢?这样的话其实相当于抵消残差学习的作用了,把 H(x) = x + F(x) 变成了 H(x) = G(x + F(x)),实质上就是拟合一个 G(x') 了,和 H(x) 本质无异。

更具体地来说明下,在 ResNet 里,

无处不在的残差网络
无处不在的残差网络

,通过递归计算,对于深层的第L(L > l)层,

无处不在的残差网络
无处不在的残差网络

,相应地,反向传播为:

无处不在的残差网络
无处不在的残差网络

以上这个式子揭示了重要信息:

1). 深层

无处不在的残差网络
无处不在的残差网络

的梯度得以传递回浅层

无处不在的残差网络
无处不在的残差网络

2).

无处不在的残差网络
无处不在的残差网络

的梯度不会轻易消失,由以上化简结果可知,括号内右边通常不会持续输出-1

因此,要达到以上效果,我们得尽量保持

无处不在的残差网络
无处不在的残差网络

为恒等映射以及不要改变 addition 之后的分布

这么一来,就剩下(1)、(4)和(5)了。

先看(1),addition 之后是 ReLU,没有参数,反向传播推导出来与上式一样,残差中是 Conv + BN + ReLU,常规操作,并且最后没有ReLU,没毛病,ResNet中用到的就是它。

(4)和(5)呢?貌似看不出所以然,光看无用,要用实践证明。ResNet 在修炼过程中通过实验发现,(4)和(1)效果差不多,而(5)表现最好,可能是把 BN 放在残差的最开始起到了正则化的作用。(5)这种结构也称作 Pre-Activation,意思是激活层放在卷积层前面,如 BN -> ReLU -> Conv,相对地,常规操作是 Conv -> BN -> ReLU,称作 Post-Activation

最终,ResNet 采用了(5)这种新型残差模块,进化为ResNetv2。

无处不在的残差网络
无处不在的残差网络

(ResNetv1 vs ResNetv2)

3、分组合作 —— ResNeXt

Paper: Aggregated Residual Transformations for Deep Neural Networks

ResNet 的结构是堆叠式的,即一层层模块串行堆叠,借鉴了VGG的做法,而 GoogleNet 和 Inception 等流派通过实验证明,在设计网络时使用 split->transform->merge 的策略能取得很好的效果,于是 ResNeXt 将两者的思想融合到一起,作为“集大成者”于2017年出道。

无处不在的残差网络
无处不在的残差网络

(ResNet vs ResNeXt)

ResNeXt 提到一个概念——Cardinality(简写C),称为自由度,paper原文的解释是变换集的数目(the size of the set of transformations),ResNeXt 的名称也源于此,'X' 指的是 neXt dimension。

如上图右边是 ResNeXt 的 block,其中C=32,将原输入分成(split)32个分支进行卷积变换(transform)后合成(merge)到一起,最后再加上shortcut构成残差模块。注意这32个分支的结构是一样的,这样就不需要对每个分支都设计对应的深度以及卷积核的超参,从而避免网络加深时超参迅速膨胀。

另外,每个分支先把输入通道数(上图是256d)压缩到 xd(上图是4d),经transform后在merge前再恢复至原来的通道数,使用类似上图右边这样形式的 block 的 ResNeXt 称作 ResNext32x4d,即将输入分成32组,每组通道数压缩至4。

为了保持与ResNet相当的参数量(而不额外增加),可以利用如下公式计算C和d,拿上图举例:

无处不在的残差网络
无处不在的残差网络

之所以说 ResNeXt 是集大成者,原因在于其不仅局限于上图这一种形式,它利用堆叠和split-transform-merge的思想可产生许多变形结构,可玩性很高。

无处不在的残差网络
无处不在的残差网络

(ResNeXt 的各种block)

(a)是 ResNeXt 使用的原始形式,(b)是 类似于GoogleNet 和 Inception-ResNet 的等效形式,(c)是使用了分组卷积(Group Convolution)的等价形式,通过实验证明,(c)性能最好(速度最快),而且结构最为简单,相比于 ResNet 几乎不需做太多改造,主要是将bottleneck 中间那一层3x3卷积层改为使用分组卷积,通常 ResNeXt 多使用的是(c)。

4、做事需有“轻重之分”

SE-ResNet & SE-ResNeXt

Paper: Squeeze-and-Excitation Networks (此处是 SENet 的paper)

自从2017-2018年期间不知哪位在业界喊了声“注意力大法好”之后,深度学习领域的许多工作都转向基于注意力(Attention)机制去研究,SE-ResNet 和 SE-ResNeXt 就是把 SENet(Squeeze-And-Exitation Networks)那套给搬过来。另外,这里的注意力指的是通道注意力(Channel-Wise Attention),即每个通道的 feature map 都分配不同的权重,但同一个通道的各像素权重是相同的。

无处不在的残差网络
无处不在的残差网络

(Squeeze & Exitation)

简单说下这里通道注意力是怎么生成的,如其名,主要分为两部分:

1) Squeeze:把 feature map 的 空间维度(H x W)压缩至 1 x 1,可通过全局(平均/最大)池化完成;

2) Exitation:通过一系列 FC(Fully Connected Layer)和 ReLU 并最终通过 Sigmoid 学到每个通道的注意力因子(系数),可理解为权重系数,通常第一个 FC 会将通道数压缩,以减少计算量。

无处不在的残差网络
无处不在的残差网络

(Exitation)

最终将各通道的注意力系数与对应通道的 feature map 相乘便万事大吉。

在 SE-ResNet 与 SE-ResNeXt 中,SE block 用在 残差分支后,其中 SE-ResNet 的如下所示。

无处不在的残差网络
无处不在的残差网络

(SE-ResNet Module)

5、更强大、更细致、更专一

Residual Attention Net

Paper: Residual Attention Network for Image Classification

上一节谈到的 SE-R esNet 和 SE-ResNeXt 可能会让你觉得并无创新点,那么本节介绍的这家伙—— Residual Attention Net (后文简称 Res-Atn-Net 吧,名字太长了...)就比较有意思了。

它的结构主要分为两部分,包括 主干(Trunk)软掩膜分支(Soft Mask Branch),主干是残差操作,软掩膜用于生成注意力因子,然后与主干的输出相乘,接着,采用了残差学习的思想把主干的输出与结合了注意力的结果相加(相当于这里把主干的输出看作是恒等映射x,而软掩膜输出与主干输出相乘的结果看作是残差映射F(x)),最终构成这样的一个个注意力模块,堆叠起来。

记主干的输出为T(x),软掩膜分支的输出为M(x),那么整个注意力模块的输出为:

T(x) + T(x) * M(x) = (1 + M(x)) * T(x)

无处不在的残差网络
无处不在的残差网络

(Res-Atn-Net 结构)

1、Trunk(主干)

Res-Atn-Net 采用 Pre-Activation 形式的 ResNeXt 的 bottleneck,把它们堆叠起来构成 Trunk。

2、Soft Mask(软掩膜)

Soft Mask 包含 快速前馈扫描(fast feed-forward sweep)自上而下反馈(top-down feedback)步骤。前者用作快速收集图像的全局信息,后者用于将全局信息与原始特征图相结合。

具体来说,类似于 FCN(Fully-Convolutional Network)的操作,先对输入执行几次池化以快速增加感受野,达到最低分辨率后,通过一个对称的网络结构使用插值将特征放大回去,然后接2个1×1卷积层,最后通过sigmoid层将输出归一化到 [0, 1] 区间 。

另外,在下采样和上采样之间还添加了跳跃连接(skip connections),以融合不同比例 feature map 的特征信息。

3、Mix Attention (空间注意力 + 通道注意力)

这里的注意力“更细致、更专一”,不像上一节的 SE-ResNet 和 SE-ResNeXt 只使用通道注意力,而是把空间注意力也结合上了,即不仅仅每个通道的 feature map 的注意力系数不同,而且同一通道内每个像素的注意力系数也都不同

作者通过实验发现,与单纯地使用空间注意力和通道注意力相比,这种混合注意力机制的效果最好,操作起来也简单,直接对每个位置的像素点使用 Sigmoid:

无处不在的残差网络
无处不在的残差网络

4、Attention Residual Learning (注意力残差学习)

通过实验发现,单纯地叠加注意力模块会导致模型性能的下降,原因主要是 Soft Mask 的输出在 [0, 1] 区间,与 Trunk 输出相乘后会使得输出响应变弱,多层叠加的话容易使得最终输出的特征图每一点的值都变得很小。

另外,Soft Mask 也有可能破坏 Trunk 中学到好的特征。于是,Res-Atn-Net 再次用上残差大法,将得到的注意力特征图与主干特征图进行 element-wised add:

其中,

无处不在的残差网络
无处不在的残差网络

为 Soft Mask 的输出,

无处不在的残差网络
无处不在的残差网络

为 Trunk 的输出,前者可作为选择器,使主干输出特征图中的有效特征增强,而噪声被抑制

同时,如果选择器的选择不好,那么相乘的部分可以被push趋向至0,保留主干输出的结果,使得主干不至于被破坏。于是,不断地叠加这样的注意力模块便可以逐渐提升网络的表达能力,也就更“强大”。

另外,Soft Mask 在反向传播中还可起到梯度过滤的作用

无处不在的残差网络
无处不在的残差网络

结合注意力后反向传播中主干参数的更新

其中 θ 是 Soft Mask Branch 的参数,φ 是 Trunk 的参数,由于 Soft Mask 的输出与 Trunk 的梯度相乘,因此可以减弱由于噪声标签而产生的错误梯度更新 Trunk 参数的程度,使得网络对噪声标签更具鲁棒性

这货的亮点主要包含以上4部分,最后附上 Res-Atn-Net 的整体结构:

无处不在的残差网络
无处不在的残差网络

(Res-Atn-Net 结构图示)

无处不在的残差网络
无处不在的残差网络

(Res-Atn-Net 参数结构)

6、end

我觉得世界真的很有意思,许多道理在各个领域都是通用的,像残差学习就告诉了我们不要遗忘历史,残差连接将浅层连接到深层,形象地来看,就是把以往学到的东西保留下来,从历史中汲取经验,去其糟粕而取其精华,这样才能有所创新。

参考:

https://cloud.tencent.com/developer/article/1405301

https://blog.csdn.net/lanran2/article/details/79057994

https://blog.csdn.net/lanran2/article/details/80247515

https://blog.csdn.net/c_chuxin/article/details/82948733

https://www.cnblogs.com/Matrix_Yao/p/9563063.html#resnet-v2-2016-jul

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、残差家族的宗师 —— ResNet
  • 2、进化 —— ResNetv2 vs ResNet
  • 3、分组合作 —— ResNeXt
  • 4、做事需有“轻重之分”
  • SE-ResNet & SE-ResNeXt
  • 5、更强大、更细致、更专一
  • Residual Attention Net
  • 1、Trunk(主干)
  • 2、Soft Mask(软掩膜)
  • 3、Mix Attention (空间注意力 + 通道注意力)
  • 4、Attention Residual Learning (注意力残差学习)
  • 6、end
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档