残差神经网络(ResNet)

残差神经网络(ResNet)

残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的。ResNet 在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军。

残差神经网络的主要贡献是发现了“退化现象(Degradation)”,并针对退化现象发明了 “快捷连接(Shortcut connection)”,极大的消除了深度过大的神经网络训练困难问题。神经网络的“深度”首次突破了100层、最大的神经网络甚至超过了1000层。

ResNet论文网址:arxiv.org/abs/1512.0338

1. 从一个信念说起

在2012年的ILSVRC挑战赛中,AlexNet取得了冠军,并且大幅度领先于第二名。由此引发了对AlexNet广泛研究,并让大家树立了一个信念——“越深网络准确率越高”。这个信念随着VGGNet、Inception v1、Inception v2、Inception v3不断验证、不断强化,得到越来越多的认可,但是,始终有一个问题无法回避,这个信念正确吗?

它是正确的,至少在理论上是正确的。

假设一个层数较少的神经网络已经达到了较高准确率,我们可以在这个神经网络之后,拼接一段恒等变换的网络层,这些恒等变换的网络层对输入数据不做任何转换,直接返回(y=x),就能得到一个深度较大的神经网络,并且,这个深度较大的神经网络的准确率等于拼接之前的神经网络准确率,准确率没有理由降低。

层数较多的神经网络,可由较浅的神经网络和恒等变换网络拼接而成,如图1所示。



图1 层数较多的神经网络

2. 退化现象与对策

通过实验,ResNet随着网络层不断的加深,模型的准确率先是不断的提高,达到最大值(准确率饱和),然后随着网络深度的继续增加,模型准确率毫无征兆的出现大幅度的降低。

这个现象与“越深的网络准确率越高”的信念显然是矛盾的、冲突的。ResNet团队把这一现象称为“退化(Degradation)”。

ResNet团队把退化现象归因为深层神经网络难以实现“恒等变换(y=x)”。乍一看,让人难以置信,原来能够模拟任何函数的深层神经网络,竟然无法实现恒等变换这么简单的映射了?

让我们来回想深度学习的起源,与传统的机器学习相比,深度学习的关键特征在于网络层数更深、非线性转换(激活)、自动的特征提取和特征转换,其中,非线性转换是关键目标,它将数据映射到高纬空间以便于更好的完成“数据分类”。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。或者说,神经网络将这些数据映射回原点所需要的计算量,已经远远超过我们所能承受的。

退化现象让我们对非线性转换进行反思,非线性转换极大的提高了数据分类能力,但是,随着网络的深度不断的加大,我们在非线性转换方面已经走的太远,竟然无法实现线性转换。显然,在神经网络中增加线性转换分支成为很好的选择,于是,ResNet团队在ResNet模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡。

3. ResNet网络架构

按照这个思路,ResNet团队分别构建了带有“快捷连接(Shortcut Connection)”的ResNet构建块、以及降采样的ResNet构建块,区降采样构建块的主杆分支上增加了一个1×1的卷积操作,见图2。



图2 ResNet构建块示意图


图3展示了34层ResNet模型的架构图,仿照AlexNet的8层网络结构,我们也将ResNet划分成8个构建层(Building Layer)。一个构建层可以包含一个或多个网络层、以及一个或多个构建块(如ResNet构建块)。


图3 34层ResNet模型架构图

(此图来源于《TensorFlow深度学习实战大全》)

第一个构建层,由1个普通卷积层和最大池化层构建。

第二个构建层,由3个残差模块构成。

第三、第四、第五构建层,都是由降采样残差模块开始,紧接着3个、5个、2个残差模块。

其余各个构建层见图3。


有关ResNet更多信息,请参考论文:arxiv.org/abs/1512.0338 或者 拙著

编辑于 2020-01-06 22:07