博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ResNet——Deep Residual Learning for Image Recognition
阅读量:5244 次
发布时间:2019-06-14

本文共 2745 字,大约阅读时间需要 9 分钟。

1. 摘要

更深的神经网络通常更难训练,作者提出了一个残差学习的框架,使得比过去深许多的的网络训连起来也很容易。

在 ImageNet 数据集上,作者设计的网络达到了 152 层,是 VGG-19 的 8 倍,但却有着更低的复杂性。通过集成学习模型最终取得了 3.57% 的错误率,获得了 ILSVRC 2015 比赛的第一名。

表示的深度对于许多视觉识别任务而言至关重要,仅仅由于特别深的表示,作者在 COCO 物体检测数据集上获得了 28% 的相对改进。

2. 介绍

深度神经网络通常集成了低层、中层和高层特征,特征的 “层级” 可以通过叠加网络层(深度)来丰富。过去几年,图像分类以及其它视觉识别领域的成功都是通过设计更深的模型来获得的。

但是,这就产生了一个问题:学习更好的网络就像堆叠更多层一样简单吗?其中一个障碍就是众人皆知的梯度消失/爆炸问题,这会阻碍网络的收敛。但是,这个问题已经被 Xavier 等参数初始化方法以及 BN 解决了。

当深层网络的收敛不成问题时,一个退化问题出现了:随着网络深度的增加,准确率达到饱和然后迅速降低。这并不是由于过拟合导致的,而且增加更多层的话,就会有更高的训练错误率。

1240

针对一个浅的网络结构和一个相应的增添更多层后的深的网络结构,如果新增添的层是一个恒等映射而前面的网络一样,那么这个深的网络应该不会产生比浅的网络更高的错误率。然而实验表明,当前的优化方法却不能让深的网络取得和浅的网络一样好或者更好的结果。

因此,在文章中,作者提出了一个深度残差学习的框架。我们让叠加的非线性网络层学习这样一个映射 \(F(x): =H(x)-x\),而不是直接学习一个底层映射 \(H(x)\)。原始的映射则可以表示为 \(F(x) +x\),作者假设这个残差映射相对于原始无参考的映射更容易优化。在极端情况下,如果恒等映射是最优的,那么相对于让叠加的非线性网络层学习一个恒等映射,让残差映射变为零是比较容易的。

作者通过跳跃连接来实现残差学习,这个跳跃连接就是一个简单的恒等映射,而且不引入额外的参数和计算复杂性。

1240

实验结果表明,引入残差学习后,深层的网络更容易优化并且不会产生更高的训练错误率,并且层数增加后准确率也会有所提升。此外,在不同的数据集和不同的任务上残差学习都展现了其优越性,说明这个方法是通用的可扩展的。

3. 残差学习

我们规定几个叠加的非线性层学习到了这样的一个映射,\(x \to H(x)\)。如果假设多个非线性层可以渐进逼近复杂函数 \(H(x)\),那么它们也可以渐进逼近残差函数 \(H(x)-x\)(假设输入输出维度相同)。

尽管直接学习底层映射和先学习一个残差映射最终形式上都是一样的,但学习的难易程度却可能不同。深层网络的退化现象说明直接让叠加的非线性层学习一个恒等映射可能是非常困难的,但如果是残差学习的话,我们直接让所有层的参数趋向于零就可以学习一个恒等映射。

作者针对每几个叠加的网络层采用残差学习,一个残差块定义为:

1240

上式第一项是待学习的残差映射,第二项是输入。针对两层网络的情况,我们有:

1240

其中 \(\sigma\) 代表 ReLU,为了简化省略了偏置参数。通过引入跳跃连接来实现一个逐元素的相加操作 \(F+x\),之后再经过一个非线性激活函数。上述形式没有引入额外的参数和计算复杂性,这在实际中不仅非常有吸引力而且很重要,这样作者就可以直接对未引入/引入残差学习的网络进行横向比较。

如果 \(x\)\(F\) 的维度不一样,那么我们对跳跃连接进行一个线性投影来匹配维度:

1240

尽管维度相同的时候我们也可以引入一个方阵,但实验表明,恒等映射足够解决退化问题并且非常经济实用,因此作者只在维度匹配的时候才引入投影。

需要注意的是,本文中学习的 \(F\) 涉及到两层或三层网络,当然更多层也是可以的。但是,如果只有一层的话,就变成了线性的:

1240

作者没有发现这种情况的优点。

4. 网络架构

普通的网络结构主要是受到 VGG 网络的启发,其中,卷积层大部分都是 3×3 的卷积核,并且:1)特征图大小相同时,卷积核的数量也相同;2)特征图大小减半时,卷积核的数量变为两倍。下采样通过步长为 2 的卷积来实现,最后是一个平均池化层和一个有 1000 个神经元的全连接层。其网络结构如下图中间部分所示。

在普通的网络结构插入跳跃连接后,就得到了相应的残差网络。其中,相同维度的特征图直接利用恒等映射,如下图右边实线箭头所示。如果特征维度不同,那么有两种考虑:A)在恒等映射时对特征图填充额外的 0 来增加维度,这种情况没有额外参数;B)利用投影进行维度匹配(利用 1×1 的卷积),如下图右边虚线箭头所示。这两种情况下,特征维度大小不一样,步长都为 2。

1240

5. 实验结果

5.1. ImageNet 分类

1240

可以看到,在普通的网络结构下,34 层的网络整个训练过程中的训练误差都要比 18 层的网络要高,而在残差网络结构下,更深的网络则具有更小的误差。

1240

5.2. Identity vs. Projection Shortcuts

1240

其中, A 代表维度不同时我们采用填充零的方式来增加维度,这没有引入额外的参数;B 代表维度不同时我们采用引入投影矩阵的方式来增加维度,而维度相同时采用恒等映射;C 代表维所有的跳跃连接都引入投影矩阵。

可以看到,B 稍微比 A 好,C 略好于 B,这可能是引入了很多的额外参数导致的。但是 A/B/C 之间的差别很小,说明投影矩阵对于解决退化问题不是必要的。为了减少空间时间复杂度和模型大小,恒等映射是最佳的选择。

5.3. 瓶颈结构

在设计更深的网络的时候,考虑到可以接受的训练时间,作者对之前的残差块进行了改进。通过引入三层分别为 1×1, 3×3, 和 1×1 的卷积,先对通道数进行降低,最后再对通道数进行恢复,从而让中间的 3×3 卷积有较小的维度。

1240

通过替换 ResNet-34 中每个两层的块为上述三层的瓶颈结构,我们得到了一个 50 层的 ResNet。同时,引入更多瓶颈块的话,我们分别可以得到 101 层和 152 层的 ResNet。详细结构如下图所示:

1240

这些单个模型在 ImageNet 数据集上的错误率对比情况如下所示。

1240

集成模型在 ImageNet 数据集上的错误率对比情况如下所示。

1240

5.4. CIFAR-10 数据集上的分析

1240

1240

结果表明,残差网络的激活值通常更接近于零,而且网络越深其激活值越小。

获取更多精彩,请关注「seniusen」!

1240

转载于:https://www.cnblogs.com/seniusen/p/10749623.html

你可能感兴趣的文章
Python的classmethod和staticmethod区别
查看>>
Ubuntu12.04 英文环境下使用ibus输入中文并自动启动输入法
查看>>
SpringMVC 拦截器HandlerInterceptor(一)
查看>>
mvc知识应用
查看>>
数据结构之排序三:插入排序
查看>>
Class.forName(),classloader.loadclass用法详解
查看>>
vue route 跳转
查看>>
Device Tree Usage
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
POJ 1220 高精度/进制转换
查看>>
cocos2d-x中CCLabelAtlas的小图片拼接
查看>>
【学习笔记】深入理解js原型和闭包系列学习笔记——精华
查看>>
深入理解js——prototype原型
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Ubuntu 安装之python开发
查看>>
恶心的struts标签,等我毕业设计弄完了,瞧我怎么收拾你。
查看>>
Linux中防火墙centos
查看>>
hudson+apachecontinuum+ant
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
实验五 TCP传输及加密
查看>>