2.1.6 ResNet
ResNet(Residual Network,残差网络)(He et al.,2016a)是2015年ImageNet 竞赛分类任务的冠军网络。ResNet 可以说是继AlexNet之后近年来最具里程碑意义的网络结构,获得了2016年CVPR(Computer Vision and Pattern Recognition,计算机视觉和模式识别)大会最佳论文奖。ResNet在ImageNet上取得了3.6% 的前5错误率,而普通人进行ImageNet 分类的前5错误率约为5.1%(Russakovsky et al.,2015)。ResNet被成功用于多个领域,除了2015年ImageNet分类任务,还一举横扫2015年ImageNet定位(优于亚军27%)、检测(优于亚军16%)、COCO 检测(优于亚军11%)、分割(优于亚军12%)的冠军。
通常来说,网络越深,其表示能力越强,可以学习到更复杂的数据规律。但是网络过深之后,梯度在反向传播时通过多次乘法导致梯度数值越来越小,使得无法有效地将梯度传到前面的层,即出现梯度消失(Vanishing Gradient)现象。实验发现,通过简单的堆叠加深层数的方式,一个56层网络的训练和测试错误率反而分别都比20层网络的训练和测试错误率高。如果56层网络的训练错误率低于20层网络,而测试错误率高于20层网络,说明是因为56层网络表示能力过强导致过拟合,但是56层网络的训练和测试错误率都高于20层网络,说明这不是由于网络过拟合造成的,而是因为网络过深之后的训练难度更大。
ResNet通过残差(Residual)模块解决网络加深后训练难度增大的问题,如图2-9所示,为了和绝大部分基于残差模块的学术论文的习惯保持一致,本书中和残差模块相关的插图采用从上到下的顺序。图2-9(a)中的残差模块由残差分支和短路分支两个分支组成,假设残差模块的输入特征是,经过残差分支之后的结果为,那么残差模块的输出是
(2.1)
其中,“:=”表示“定义为”,而“=”表示数学上的相等。这里为了计算方便,假设输入特征和输出特征都是向量的形式,对张量形式的推导也是类似的。
图2-9 ResNet中的残差模块
残差模块的作用可以从特征前馈和梯度反向传播两个视角进行分析。在特征前馈的视角,残差分支的目标是学习在输入特征的基础上新增的部分,即输入的残差。当残差分支输出时,残差模块输出等于输入。也就是说,残差模块做了恒等映射(Identity Mapping),输出直接复制了输入的特征。通过堆叠多个残差模块,深层网络和浅层网络相比,深层网络多出的残差模块在极端情况下全部为恒等映射,此时网络的性能至少应该和浅层网络相同。而相比于传统网络结构,由于有非线性激活函数的存在,想学习到恒等映射是比较困难的(Sandler et al.,2018),因此残差模块的学习能力更加灵活。
从梯度反向传播的视角,在得到残差模块输出对于损失函数的梯度之后,输入的梯度为
(2.2)
其中,是单位矩阵(Identity Matrix),对角线元素为1,非对角线元素为0。整体上看,在梯度反向传播时,通过短路连接,对应式(2.2)中的第二项,可以无损地直接将输出的梯度传给输入,从而有效地缓解反向传播时由于网络深度过深导致的梯度消失现象,进而使得网络加深之后性能不会变差。
目前常用的ResNet 结构包括 ResNet-18、ResNet-34、ResNet-50、ResNet-101和ResNet-152 等,其中,ResNet-表示该网络中可学习的卷积和全连接层共有层。对于很深的网络(,即ResNet-50、ResNet-101、ResNet-152等,ResNet使用了更高效的瓶颈(Bottleneck)结构,如图2-9(b)所示。瓶颈结构先通过卷积进行降维,之后卷积可以在通道数相对较低的特征上进行计算,最后通过另一个卷积升维到原来的通道数,这样可以大幅降低参数量和计算量。具体地说,如果直接采用两层“3×3,256->256”的卷积层,参数量为(个),而采用图2-9(b)所示的瓶颈结构,参数量为,也就是说,使用瓶颈结构显著降低了参数量。
具有短路连接的ResNet 可以看作是许多不同深度而共享参数的网络的集成,网络数目随层数指数增加(Veit et al.,2016)。如图2-10(a)所示,对于一个有三层残差模块的网络,每个残差模块由残差分支和短路分支组成,因此整体可以展开为8个不同深度的子网络集成。如图2-10(b)所示,每个子网络对应图中的一个路径。这 8 个子网络不是相互独立的,它们之间共享参数,即图2-10(b)中所有的模块有共享的参数,模块同理。对于一个有层残差模块的网络,可以展开为个不同深度而共享参数的子网络的集成。由于不同深度的子网络的感受野大小不同,使得输出特征同时包含了具有不同感受野的特征信息,回顾 GoogLeNet中设计的Inception模块(见 2.1.4 节)显式地通过不同卷积核大小的卷积层和汇合层来融合不同感受野大小的特征信息。
图2-10 ResNet可以等价看作多个网络的集成
ResNet 包括的其他关键点如下:
● 使用短路连接,并大量使用了BN层,配合适当的参数初始化方案(He et al.,2015b),堆叠多个相同的残差模块组合,使训练深层网络更容易。
● 类似 GoogLeNet,使用全局平均汇合替代全连接层,降低了整体的参数量。
● 类似 VGGNet,每次当特征空间维度(即特征高和宽)减半时,特征的通道数量翻倍。在残差分支中,这是通过将第一个卷积层的步长设为2、输出通道数设为输入通道数两倍实现的;在短路分支中,这是通过使用一个、步长为2的卷积层实现的,该卷积层的输出通道数为输入通道数的两倍。