Abstract
深度神经网络难以训练, 提出一种残差学习框架易于训练非常深的网络。
残差网络易于优化, 可以通过增加深度提高准确率。
残差网络在ImageNet数据集上取得了3.57%的错误率, 在ILSVRC2015分类任务上取得了第一。
Introduction
深度网络融合低中高级特征, 分类器以一种端到端的方式, 特征的等级可以通过堆叠层数来丰富。
深度带来的问题:
- 梯度消失和梯度爆炸的问题会妨碍收敛, 这个问题已经很大程度上通过规范化的初始化和中间层的规范化解决了。
- 退化问题, 随着深度增加,准确率饱和, 然后开始迅速退化, 这种退化并不是由于过拟合导致的,更深的层导致更高的训练错误率。
解决退化问题:
- 引入一种深度残差学习框架, H(x) = F(x) + x, 原始映射为F(x), 重映射为F(x) + x
- 如果一个映射是最优的, 那么它会使得残差变为0
深度残差网络:
- 深度残差网络更容易优化,而普通的简单堆叠起来的网络当层数增加表现出更高的训练误差
- 深度残差网络能从深度增加更好地提高准确率
CIFAR-10:
- 在CIFAR-10数据集上也呈现相同的现象,说明对数据集具有普适性
- 在CIFAR-10数据上成功训练了超过100层的模型, 探索了1000层的模型
ImageNet:
- top-5错误率3.57%, ILSVRC2015分类挑战第一名
- ILSVRC&COCO2015全是第一
Related Work
Residual Representations
编码残差向量比编码原始向量更有效。
为了解决偏微分方程(PDEs), 多网格的方法重新定义系统为多尺度的子问题, 其中每个子问题是一个由粗到细的尺度的残差解决方案。
Shortcut Connections
最开始的快捷连接是从网络输入到输出添加一个线性层。
中间层直接连接到一个辅助分类器解决梯度消失和爆炸。
inception层由捷径分支和更深的分支组成。
“highway networks”的门控是依赖参数的, 当门控接近于0的时候,它是没有残差的。 而identity shortcut是没有参数的, 他总会学习到残差。
identity shortcuts永远不会关闭, 所有的信息都会传递下去, 使用额外的残差函数学习。
“highway networks”在层数超过100层后准确率没有提升。
Deep Residual Learning
Residual Learning
H(x)表示几个叠起来层的映射, x表示第一层的输入。
假设多个非线性激活可以渐进估计复杂的函数, 那么它等价于假设它们可以渐进地估计残差函数(H(x) - x)。
与其估计H(x), 我们估计残差函数F(x) = H(x) - x, 原始的函数就可以表示成F(x) + x。
尽管两种形式都是估计所要的函数, 学习的难度不相同。
如果恒等映射最优的话, 多个非线性层会变为0, 解会变成恒等映射。意思是H(x) = F(x) + x, 当F(x)为0的时候, H(x) = 0。
Identity Mapping by Shortcuts
\[y = F(x, {W_i}) + x\]x为输入 , y为输出, $F(x, {W_i})$表示学习到的残差映射, $F = W_2 \sigma(W_1 x)$, $\sigma$表示ReLU, 为了简化表示,省略bias。 $F + x$由快捷连接和按元素相加实现, 在相加后采用第二次非线性激活。
快捷连接没有引入额外的参数和计算复杂度。
输入和输出的维度必须相等,如果不相等, 可以用W_s对输入投影:
\[y = F{x, {W_i}} + W_s x\]F可以是两层或者三层, 但如果是一层的话, y=W_1x + x, 没有观察到什么优势。
同样可以应用于卷积层。
Network Architectures
Plain Network
plain baseline 受到 VGG网络 的启发。
对于相同的特征映射尺寸, 每层都有相等的滤波器数量。
如果特征映射的尺寸减半, 滤波器的数量加倍以保留每层的时间复杂度。
直接使用步长为2的卷积降采样。
最后使用一个全局平均池化和一个1000分类的全连接层。
Residual Network
当输入和输出是相同的维度的时候, identity shortcuts可以直接使用。
随着维度的增加, 有两种选择:
- 用0填充以增加维度
- 通过1x1卷积匹配维度
当shortcuts穿过两种尺寸的特征映射时, 对这两个选择, 它们都步长为2
Implementation
图像减去均值, 从[256, 480]随机采样, 在裁剪出224x224或者它的镜像翻转, 用于尺度增强。
标准的色彩增强。
在卷积之后, 激活函数之前, 使用了BatchNorm。
SGD mini-batch 256。
learning rate 从 0.1 开始, 当错误率稳定后除以10, 模型训练迭代到600000迭代。
权重衰减0.0001, 动量0.9, 没有使用dropout。
测试时采用10-crop。
使用全卷积, 在多尺度平均分数。
Experiments
ImageNet Classification
Plain Networks
34层的plain net 比 18层的plain net 验证错误率更高
表4表明 34层plain net贯穿整个训练过程有更高的训练误差
我们认为这种优化困难很可能并不是由梯度消失引起的:
- plain net中都使用BN训练, 它能保证前向传播的信号非零
- 反向传播的梯度也由BN表现良好
- 34层plain net仍然能够取得有竞争力的准确率, 这表明它在某种程度上有效
- 我们推测深层plain net的收敛率可能呈现指数级下降, 这影响训练错误率的下降
Residual Networks
对所有的shortcuts使用identity mapping, 对增加的维度使用zero-padding, 因此相比于plain net并没有增加额外的参数
34层的ResNet要比18层的ResNet更好, 34层ResNet展现出相当低的训练错误并且泛化到验证数据
这表明这种设置退化问题得到很好地解决并且我们可以增加深度得到更高的准确率
18层的plain net 和 ResNet 准确率相当, 但是18层的ResNet收敛更快:
- 当网络不是特别深, SGD在plain net上仍然能找到好的解
- ResNet在早期阶段提供更快的收敛速度以易于优化
Identity vs. Projection Shortcuts.
比较三种选择:
- zero-padding shortcuts用于增加维度, 所有的shortcuts都是无参数的
- projection shortcuts用于增加维度, 其他的使用identity shortcuts
- 全部使用projection shortcuts
三种的结果都好于plain net:
- B比A稍好, 我们认为A中的zero-padding实际上并没有残差学习
- C比B好, 我们将这归因于由projection shortcuts引入的额外参数
- ABC都表明projection shortcuts对于解决退化问题并不是必要的
- 为了减小内存和时间复杂度以及模型大小, 在接下来的实验中都没有使用C
Deeper Bottleneck Architectures.
对于每个残差函数F, 使用3个层堆叠起来替换2层:
- 三层分别是1x1, 3x3, 1x1卷积,其中1x1层负责减少和增加维度, 如图5展示, 两种设计有着相似的时间复杂度
- 对于bottleneck结构, 无参数的identity shortcuts尤其重要
- 如图5右所示,如果 projection shortcuts 取代了 identity shortcuts , 时间复杂度和模型大小会翻倍
- 对于bottleneck的设计, identity shortcuts会更加有效
50-layer ResNet: 用3层的bottleneck block取代2层的block
101-layer and 152-layer ResNet:
- 使用3层的blocks构建101层和152层
- 尽管深度显著增加,但是152层的ResNet仍然比VGG-16/19有更低的复杂度
- 50/101/152层的ResNet比34层的更准确
- 没有观察到退化问题并且通过增加深度取得了显著地准确率增益
- 在所有评估指标上都可以看到深度带来的收益
Comparisons with State-of-the-art Methods.
单模型 34层的ResNet取得了具有竞争力的准确率
单模型 152层的ResNet top-5 错误率 4.49%
融合六个不同深度的模型, 在测试机上取得3.57% top-5 错误率, 在ILSVRC 2015第一名
CIFAR-10 and Analysis
plain architecture
网络输入32x32图像, 每个像素减去均值
第一层是3x3卷积
分别在{32, 16, 8}三种feature map大小使用了6n层3x3卷积, 每种feature map大小2n层
卷积核的数量分别是{16, 32, 64}
降采样的方式是使用步长为2的卷积
网络的最后是一个全局平均池化, 10分类的全连接和softmnax
residual architecture
在每对3x3层使用shortcut connections, 使用zero-padding的方式identity shortcuts
residual model 和 plain model 有相同的深度宽度和参数量
training
0.0001权重衰减, 0.9动量
使用BN, 没有dropout
双GPU 128 mini-batch size
初始学习率0.1, 在32K和48K迭代时除以10, 64K迭代时停止训练
数据增强: 在每个边填充4个像素, 对它或者它的水平翻转随机裁剪32x32
测试时, 使用原始32x32图像
令n={3, 5, 7, 9}, 使得网络20, 32, 44和56层:
- 图6左表明, 随着深度增加, plain net表现出更高的训练误差
- 图6中表明, 当深度增加时, ResNet克服了优化的困难, 并且展现出准确率的增益
当n=18时, 网络为110层的ResNet:
- 初始学习率0.1对于开始收敛有点大, 因此使用0.01预热直到训练误差降到80%(大约400迭代), 然后回到0.1学习率继续训练。
- 它的参数更少,却比SOTA错误率更低
Analysis of Layer Responses.
response是BN之后ReLU/addtion之前的
ResNet比plain net通常有更小的responses
这些结果支持了残差函数比非残差函数通常更接近0
在对比ResNet20, 56和110中,更深的ResNet的response更小
当有更多层时, ResNet的层倾向于更小地改变信号
Exploring Over 1000 layers.
我们探索了一个超过1000层的更激进的深度模型
设置n=200, 网络为1202层的网络
- 并没有优化困难
- 1000层的网络能够取得小于0.1%的训练误差
- 测试误差也相当好, 7.93%
但是1202层的网络比110层的网络表现更差, 我们认为这是由于过拟合
1202网络对于小的数据集可能不必要地太大了
在这个数据及上使用强大的正则化比如maxout和dropout取得最好的结果。
我们没有使用maxout/dropout, 而仅仅通过增加深度和更窄的结构施加正则化。