arxiv:1512.03385
摘要
文章主要解决在网络深度增大时的训练困难问题,使得层可以根据输入来学习残差函数而非原始函数。
介绍
深度卷积神经网络在图像分类任务中实现了巨大的突破,深度神经网络可以自然的将低、中、高阶的特征进行整合,分类器具也趋近于使用端对端的训练方式,随着网络深度的增加,不同“阶”的特征也逐渐丰富,也有大量的证据表明,在图片识别方面,深度可以提升模型的整体效果。
然而,模型的效果真的一直随着网络层数的增加而变好吗?剃度弥散问题成为最大的障碍,剃度弥散导致训练从一开始就难以收敛,这个问题目前最普遍的解决方案时通过初始参数的正则化手段以及训练中的正则化手段。这些手段可以保证模型在数十层的深度下通过随机梯度下降反向传播最终得到收敛。
当网络深度达到更深时,网络的精度愈发饱和,然后开始迅速下降,可惜的是,这种下降不是因为过拟合导致的,意味着系统难以训练优化。
设想在一个浅层的系统中,模型具有良好的表现,当深度增加时,增加的层数会在浅层的基础上进行,这种理念意味着深度系统的错误率不应该在浅层系统之上,然而现有的实验结果表明没有在浅层的系统之上找到更佳的解决方案。
本文提出了残差网络的结构来解决这种由深度增加而出现错误率增加的情况,通过拟合残差映射来取代直接的拟合映射。
将一个底层的映射记作 H(x),用一个堆叠非线性的映射记作 F(x) = H(x) - x,原始的映射变为 F(x) + x,我们假设残差映射的优化易于直接映射,如果某个恒等的映射是最优的,那么把残差变为0比非线性层的堆叠更简单。
F(x) + x 的形式可以通过前愦神经网络中的 shortcut connections 来实现,shortcut connections 是指跨过或者跳过一定的层,在这里 shortcut connections 正好实现了identity mapping ,如下图。
文章展示的核心进步:
1)文中的非常深的网络相比于其他非残差网络,不会像其他结构一样随着深度的增加错误率增加。
2)模型深度的增加还能对模型的精准率提升有帮助作用。
相关工作
Residual Representations.
图像识别领域曾经出现过的向量残差表示,VLAD
Shortcut Connections
曾用于多层感知机中
深度残差学习
残差学习
我们设 H(x) 为一个通过堆叠层构成的底层映射,x为这一个堆叠层的输入,如果假设这个堆叠层可以逐渐逼近一个完整的函数,那么意味着它也可以逐渐逼近这个函数的残差函数,H(x) - x 假设输出和输入的维度数量是一致的。所以,让堆叠层去逼近这个函数,不如让这个堆叠层去逼近它的残差函数 H(x) - x ,那么原函数就变味了 F(x) + x ,虽然他们逼近的微同一函数,但是他们的训练难度将大不相同。
identity mappings 的思想是,在一个低层次的恶模型中增加层次,效果一定大于等于这个低层次的模型,之前的深度模型中随着深度效果下降的问题也表示,深度将阻碍模型收敛逼近至一个 identity mappings ,若多余的层次对于模型没有必要性,已经达到最优,那增加的层的输出最终会收敛到 0。
Identity Mapping by Shortcuts
我们对于每一个堆叠层进行残差化,在本文中对于每一个残差 block 定义如下:
x 和 y 分别为这个残差结构的输入与输出,F 表示需要呗学习的残差结构,F + x 通过 shortcut connection 矩阵元素点对点相加实现。
由于 shortcut connection 没有增加任何的参数以及计算复杂度,在使用中以及对比中十分便捷。F 与 x 的维度数量必须是相同的,如果不相同,我们需要构造一个线性对象 W 使得他们维度数量相同。
网络结构
原文中 fig.3
与 VGG 相比,ResNet输入层为 7x7 卷积核,且除了尾部,中间没有任何的池化结构,通过卷积步长来降低 feature map size,VGG引入了大量的池化进行下采样,ResNet在尾部采用的为平均池化,和常用的最大池化有所不同。
训练细节
训练数据在训练集中采样获得,通过随机裁剪、平移等方式获得 224 * 224 的训练图片,同时,每一张图片都都做了去均值处理,使用标准色彩增强(standard color augmentation ),在卷积和激活函数之间去除了之前流行的 batch normalization。有残差结构与无残差结构的网络都通过相同的方式训练,SGD,batch size 取 256,学习率从 0.1 开始,随着训练下降,迭代次数60 * 10e4 次,weight decay 取 1e-4,momentum 取 0.9,不使用 drop out。
结果分析
结构对比
由于不加残差结构的网络使用 batch normalization,理论上不存在梯度弥散的问题,所以深度带来的训练困难问题似乎不是由于梯度弥散导致的,所以猜测有可能在无 Res 结构的网络里面,收敛率是指数衰减的,将在以后的研究中继续探索。
在有残差的 ResNet 以及无残差结构的 Plan 对比中有三点发现
* 在有无残差结构的对比中,34 层结构与 18 层结果完全相反,有 ResNet 中,34 层结构效果优于 18 层结构效果,在 PlanNet 中,18 层结构效果优于 34 层效果。
* 34 层结构 ResNet 比 34 层结构 PlanNet 的错误率低 3.5 %,说明 Residual 结构适用于极其深的结构。
* 最后,在 18 层结构中,ResNet 与 Plan 结构错误率相当,但是 ResNet 的收敛速度远优于 PlanNet,说明在 Residual 结构下,模型的优化路径更好。
Res 结构对比
Res 结构分为以上两个式子,有 project 与无额外参数的,尝试下面三种方式:
A. 无额外参数,对于 F 与 x 维度不同的情况下使用 0 填充。
B. 在有维度变化的时候使用 project 其他时候不加参数。
C. 所有维度变化与不变均使用有 project 的方式。
对比发现 C > B > A。(略大于)
更深的结构
为了达到更深,构建了以一种瓶颈结构,如下:
用一个 3 * 3 加两个 1 * 1 卷积代替原本的一个 block 中两层 3 * 3,1 * 1 卷积用于增减通道数量,保证 3 * 3 卷积层中的输入和输出维度保持一致(由于增加了 project 来 增减维度后,参数数量以及时间复杂度大幅度提升)。将 2 层 block 替换为 3 层 block 之后,原 34 层网络结构变为 50 层,使用上述 B
解决方案来解决通道数量变动问题。
除此之外,设计了 101 与 152 层结构,在 152 层结构下,时间复杂度低于 VGG - 16,有非常不错的效果。
在 1202 层的结构中,错误率高于 110 的结构,他们的训练误差基本一致,但是在测试集中有一定差别,1202 层结构测试误差大于 110 层结构,造成这个现象的原因很可能为过拟合。
个人体会
这篇文章已经发表很久,当时没有完全理解文章的精髓,粗糙的误认为网络的深度直接关系到网络的拟合能力,网络的深度直接造成梯度弥散,而实际情况却未必如此。
本文精髓所在
identity Mapping
Identity Mapping 的思想源于人的基本直觉,在一个模型上增加额外的层数,在进行优化时最差的结果是将原本的输出直接传递到末尾,效果一定不会小于浅层次模型,将需要逼近的函数 H(x) 拆解为 F(x) + x 的形式,多余的层次可视作 F(x),当浅层模型已经为模型整体最优解时,F(x) 输出为 0。我们给一个网络不论在中间还是末尾加上一个残差块,并给残差块中的 weights 加上 L2 regularization(weight decay),这样图 1 中 F(x)=0 是很容易的
shortcut connections
Shortcut connections 为模型实现残差的最基本形式,通过额外参数矩阵或者直接通过填充实现输入输出维度不同时的残差结构。
重点,网络在深度结构下的退化问题,很有可能不是因为梯度弥散,后续研究 https://arxiv.org/abs/1702.08591
网友评论