论文下载:
https://arxiv.org/pdf/1512.03385.pdf
论文代码:
https://github.com/pytorch/vision/tree/master/torchvision/models
论文摘要:
作者提到,更深层次的神经网络更难训练,提出一个残差学习框架(residual learning framework)能从大幅度增加的深度获得准确性,且这些残差网络(residual networks)更容易优化。作者在ImageNet数据集上评估高达152层的残差网络复杂性依然很低,尽管它比VGG网深8倍。该网络在2015年的ILSVRC和COCO 竞赛的各项目中均获得第一名。
传统网络:
20层和56层普通网络上的CIFAR-10的训练错误(左)和测试错误(右),网络越深,训练误差越大,测试误差也越大:
ImageNet上的类似现象:
传统网络层数增加后,会出现“梯度爆炸/消失”问题,使得网络难以收敛
这个问题可以通过归一化(标准化)初始化和中间归一化层解决,可以让只有数十层的网络能够通过具有反向传播的SGD(随机梯度下降)开始收敛
更深的网络开始收敛时,就会出现一个退化问题,随着网络深度的增加,精度会达到饱和,然后迅速退化。作者提到这种问题并不是由过拟合引起的
关于退化问题的思考:
训练精度的降低表明并不是所有的系统都同样容易优化。让人们思考采用一个较浅层的网络结构,然后在此基础上添加后续层的深层的对应(对等)的特征
构造深层次的模型的一个解决方案:添加的层是身份特征(identity mapping),其他层是从学习过的较浅的特征层节点复制过来的
残差结构:
如果一个身份映射是最优的,将残差变成零比用一堆非线性层来拟合身份映射要容易的多
快捷连接(shortcut connections)既不增加额外的参数,也不增加计算复杂度
普通神经网络块:
残差卷积网络块:
残差块函数F是可变的:
左:F有两层;右:F有三层
残差网络结构:
左:VGG-19
中:一个拥有34个参数层的简单网络(36亿FLOPs)
右:一个拥有34个参数层的残余网络(36亿FLOPs),虚线捷径增加了维度
ResNet更多的结构:
实验结果:
残差函数有更小的响并且残差结构可以提供合理的预处理效果:
残差网络和普通网络相比,没有额外的参数:
在ImageNet验证上的错误率:
CIFAR-10训练结果,虚线表示训练错误,黑线表示测试错误:
左:简单网络-110的误差大于60%,未显示
中间残差网络
右:残差网络110和1202层。