当前位置: 首页 > article >正文

论文阅读-用于图像识别的深度残差学习

目前存在的问题:

文章主要研究内容:

未来课研究内容:

涉及的理论问zzz

在这种

论文研究思路

论文翻译:

摘要:更深层次的神经网络更难训练。 我们提出了一个残差学习框架,以简化比以前使用的网络更深的网络训练。 我们明确地将层重新表示为参考层输入的学习残差函数,而不是学习未引用的函数。 我们提供了全面的经验证据,表明这些残差网络更容易优化,并且可以通过显着增加的深度来获得准确性。 在 ImageNet 数据集上,我们评估深度高达 152 层的残差网络,比 VGG 网络 [40] 深 8 倍,但复杂度仍然较低。 这些残差网络的集合在 ImageNet 测试集上实现了 3.57% 的误​​差。 该结果在 ILSVRC 2015 分类任务中获得第一名。 我们还对 100 层和 1000 层的 CIFAR-10 进行了分析。 表示的深度对于许多视觉识别任务至关重要。 仅仅由于我们极深的表示,我们在 COCO 目标检测数据集上获得了 28% 的相对改进。 深度残差网络是我们提交 ILSVRC 和 COCO 2015 竞赛的基础,我们还在 ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割任务上获得了第一名。

1. Introduction

深度卷积神经网络 [22, 21] 为图像分类带来了一系列突破 [21, 49, 39]。 深度网络自然地以端到端的多层方式集成低/中/高级特征[49]和分类器,并且特征的“级别”可以通过堆叠层的数量(深度)来丰富。 最近的证据 [40, 43] 表明网络深度至关重要,并且在具有挑战性的 ImageNet 数据集 [35] 上取得的领先结果 [40, 43, 12, 16] 都利用了“非常深”[40] 模型,具有 深度为十六[40]至三十[16]。 许多其他重要的视觉识别任务 [7,11,6,32,27] 也极大地受益于非常深入的模型。 在深度重要性的驱动下,出现了一个问题:学习更好的网络是否像堆叠更多层一样容易? 回答这个问题的一个障碍是臭名昭著的梯度消失/爆炸问题[14,1,8],它从一开始就阻碍了收敛。 然而,这个问题已在很大程度上通过归一化初始化 [23,8,36,12] 和中间归一化层 [16] 得到解决,这使得具有数十层的网络能够开始收敛,以实现具有反向传播的随机梯度下降(SGD)[22] ]。 当更深的网络能够开始收敛时,退化问题就暴露出来了:随着网络深度的增加,准确性变得饱和(这可能并不奇怪),然后迅速退化。 出乎意料的是,这种退化并不是由过度拟合引起的,并且向适当深度的模型添加更多层会导致更高的训练误差,如[10, 41]中所报告的,并经过我们的实验彻底验证。

图 1 显示了一个典型示例。 (训练准确性)的下降表明并非所有系统都同样容易优化。 让我们考虑一个较浅的架构及其在其上添加更多层的较深层的对应架构。 存在一种构建更深层次模型的解决方案:添加的层是恒等映射,其他层是从学习到的较浅层模型复制的。 这种构造的解决方案的存在表明,更深的模型不应比其更浅的对应模型产生更高的训练误差。 但实验表明,我们现有的求解器无法找到以下解决方案与构造的解决方案相当或更好(或无法在可行的时间内做到这一点)。

在本文中,我们通过引入深度残差学习框架来解决退化问题。 我们不希望每几个堆叠层都直接适合所需的底层映射,而是明确让这些层适合残差映射。 形式上,将所需的基础映射表示为 H(x),我们让堆叠的非线性层拟合另一个映射 F(x):= H(x)−x。 原始映射被重铸为F(x)+x。 我们假设优化残差映射比优化原始的、未引用的映射更容易。 在极端情况下,如果恒等映射是最优的,则将残差推至零比通过一堆非线性层拟合恒等映射更容易。 F(x)+x 的公式可以通过具有“快捷连接”的前馈神经网络来实现(图 2)。 快捷连接[2,33,48]是那些跳过一层或多层的连接。 在我们的例子中,快捷连接只是执行恒等映射,并且它们的输出被添加到堆叠层的输出中(图 2)。 身份快捷方式连接既不会增加额外的参数,也不会增加计算复杂性。 整个网络仍然可以通过 SGD 通过反向传播进行端到端训练,并且可以使用通用库(例如 Caffe [19])轻松实现,而无需修改求解器。 我们在 ImageNet [35] 上进行了全面的实验,以展示退化问题并评估我们的方法。 我们表明:

1)我们的极深残差网络很容易优化,但是当深度增加时,对应的“普通”网络(简单地堆叠层)表现出更高的训练误差;

2)我们的深度残差网络可以轻松地从大大增加的深度中获得精度增益,产生比以前的网络更好的结果。

类似的现象也出现在 CIFAR-10 集 [20] 上,这表明我们的方法的优化难度和效果不仅仅类似于特定的数据集。 我们在此数据集上展示了超过 100 层的成功训练模型,并探索了超过 1000 层的模型。 在 ImageNet 分类数据集 [35] 上,我们通过极深的残差网络获得了出色的结果。 我们的 152 层残差网络是 ImageNet 上有史以来最深的网络,同时仍然比 VGG 网络 [40] 具有更低的复杂性。 我们的集成在上的 top-5 错误率为 3.57%ImageNet测试集,并在ILSVRC 2015分类竞赛中获得第一名。 极深的表示在其他识别任务上也具有出色的泛化性能,并带领我们在 ILSVRC & COCO 2015 竞赛中进一步赢得了 ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割方面的第一名。 这个有力的证据表明残差学习原理是通用的,我们期望它适用于其他视觉和非视觉问题。

2. Related Work

残差表示。 在图像识别中,VLAD [18] 是通过残差向量相对于字典进行编码的表示,Fisher Vector [30] 可以表示为 VLAD 的概率版本 [18]。 它们都是用于图像检索和分类的强大浅层表示[4, 47]。 对于矢量量化,编码残差矢量[17]被证明比编码原始矢量更有效。 在低级视觉和计算机图形学中,为了求解偏微分方程(PDE),广泛使用的多重网格方法[3]将系统重新表述为多个尺度的子问题,其中每个子问题负责较粗和较精细之间的残差解 规模。 多重网格的替代方法是分层基础预处理 [44, 45],它依赖于表示两个尺度之间残差向量的变量。 研究表明 [3,44,45],这些求解器比不知道解的残差性质的标准求解器收敛得快得多。 这些方法表明良好的重新配制或预处理可以简化优化。

快捷连接。 导致快捷连接的实践和理论[2,33,48]已经被研究了很长时间。 训练多层感知器(MLP)的早期实践是添加一个从网络输入连接到输出的线性层 [33, 48]。 在[43, 24]中,一些中间层直接连接到辅助分类器以解决梯度消失/爆炸问题。 [38,37,31,46]的论文提出了通过快捷连接实现的居中层响应、梯度和传播误差的方法。 在[43]中,“初始”层由一个快捷分支和一些更深的分支组成。 与我们的工作同时,“高速公路网络”[41, 42] 提供了带有门控功能的快捷连接[15]。 这些门依赖于数据并且具有参数,与我们的无参数身份快捷方式相反。 当门控捷径“关闭”(接近零)时,高速公路网络中的层代表非残差函数。 相反,我们的公式总是学习残差函数; 我们的身份捷径永远不会关闭,所有信息总是会被传递,并且需要学习额外的残差函数。 此外,高网络尚未证明随着深度的极大增加(例如超过 100 层),准确性会有所提高。

3. Deep Residual Learning

3.1. Residual Learning

让我们将 H(x) 视为由几个堆叠层(不一定是整个网络)拟合的底层映射,其中 x 表示这些层中第一层的输入。 如果假设多个非线性层可以渐近逼近复杂函数2,那么就相当于假设它们可以渐近逼近残差函数,即H(x) − x(假设输入和输出具有相同的维度)。 因此,我们不期望堆叠层逼近 H(x),而是明确让这些层逼近残差函数 F(x):= H(x) − x。 原函数因此变为 F(x)+x。 尽管两种形式都应该能够渐近地逼近所需的函数(如假设的那样),但学习的难易程度可能不同。 这种重新表述的动机是关于退化问题的反直觉现象(图 1,左)。 正如我们在简介中所讨论的,如果添加的层可以构建为恒等映射,则更深的模型的训练误差应该不大于其较浅的对应模型。 退化问题表明求解器在通过多个非线性层逼近恒等映射时可能会遇到困难。 通过残差学习重构,如果恒等映射是最优的,则求解器可以简单地将多个非线性层的权重驱动至零以接近恒等映射。 在实际情况下,恒等映射不太可能是最优的,但我们的重新表述可能有助于预先解决该问题。 如果最优函数更接近恒等映射而不是零映射,那么求解器应该更容易参考恒等映射找到扰动,而不是学习该函数作为新函数。 我们通过实验表明(图 7),学习到的残差函数通常具有较小的响应,这表明恒等映射提供了合理的预处理。

3.2. Identity Mapping by Shortcuts

我们对每隔几个堆叠层采用残差学习。 构建块如图 2 所示。正式地,在本文中,我们考虑的构建块定义为:

这里 x 和 y 是所考虑层的输入和输出向量。 函数F(x,{Wi})表示要学习的残差映射。 对于图 2 中具有两层的示例,其中 σ 表示ReLU [29] 和偏差被省略以简化符号 。运算 F + x 通过快捷连接和逐元素加法来执行。 我们采用相加后的第二个非线性(即 σ(y),见图 2)。 方程(1)中的快捷连接既不引入额外的参数,也不引入额外的计算复杂度。 这不仅在实践中有吸引力,而且在我们比较普通网络和残差网络时也很重要。 我们可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本的普通/残差网络(除了可忽略的逐元素加法)。 式(1)中x和F的尺寸必须相等。 如果情况并非如此(例如,当更改输入/输出通道时),我们可以通过快捷连接执行线性投影 Ws 以匹配尺寸:

我们还可以在方程(1)中使用方阵Ws。 但我们将通过实验证明恒等映射足以解决退化问题并且经济,因此Ws仅在匹配维度时使用。 残差函数F的形式是灵活的。 本文的实验涉及具有两层或三层的函数 F(图 5),但更多层也是可能的。 但如果 F 只有单层,则方程(1)类似于线性层:y = W1x+x,我们尚未观察到其优点。 我们还注意到,尽管为了简单起见,上述符号是关于全连接层的,但它们适用于卷积层。 函数F(x, {Wi})可以表示多个卷积层。 逐元素相加是在两个特征图上逐个通道执行的。

3.3. Network Architectures

我们测试了各种普通/残差网络,并观察到了一致的现象。 为了提供讨论实例,我们描述了 ImageNet 的两个模型如下。

普通网络。 我们的普通基线(图 3,中)主要受到 VGG 网络 [40](图 3,左)哲学的启发。 卷积层大多具有 3×3 滤波器,并遵循两个简单的设计规则:(i)对于相同的输出特征图大小,层具有相同数量的滤波器; (ii)如果特征图大小减半,滤波器的数量加倍,以保持每层的时间复杂度。 我们直接通过步幅为 2 的卷积层执行下采样。网络以全局平均池化层和带有 softmax 的 1000 路全连接层结束。 图3(中)中加权层的总数为34。 值得注意的是,我们的模型比 VGG 网络 [40] 具有更少的滤波器和更低的复杂性(图 3,左)。 我们的 34 层基线有 36 亿次 FLOP(乘加),仅为 VGG-19(196 亿次 FLOP)的 18%。

残差网络。 基于上述普通网络,我们插入快捷连接(图 3,右),将网络变成其对应的残差版本。 当输入和输出具有相同维度时,可以直接使用恒等快捷方式(方程(1))(图3中的实线快捷方式)。 当维度增加时(图 3 中的虚线快捷方式),我们考虑两种选择:(A)快捷方式仍然执行恒等映射,并填充额外的零条目以增加维度。 该选项不引入额外的参数; (B) 方程 (2) 中的投影快捷方式用于匹配维度(通过 1×1 卷积完成)。 对于这两个选项,当快捷方式穿过两种尺寸的特征图时,它们的步幅为 2。

3.4. Implementation

我们对 ImageNet 的实现遵循 [21, 40] 中的实践。 图像的大小被调整,其短边在 [256, 480] 中随机采样,以进行尺度增强 [40]。 从图像或其水平翻转中随机采样 224×224 裁剪,并减去每个像素的平均值[21]。 使用[21]中的标准颜色增强。 我们在每次卷积之后和激活之前采用批量归一化(BN)[16],如下[16]。 我们按照[12]中的方式初始化权重,并从头开始训练所有普通/残差网络。 我们使用小批量大小为 256 的 SGD。学习率从 0.1 开始,当误差达到稳定水平时除以 10,并且模型最多训练 60×104 次迭代。 我们使用 0.0001 的权重衰减和 0.9 的动量。 我们不使用 dropout [13],遵循[16]中的做法。 在测试中,为了进行比较研究,我们采用标准的 10 作物测试 [21]。 为了获得最佳结果,我们采用[40, 12]中的完全卷积形式,并在多个尺度上平均分数(调整图像大小,使较短的边位于{224, 256, 384, 480, 640})。


http://www.kler.cn/a/380396.html

相关文章:

  • Kafka日志记录
  • HTTP 405 Method Not Allowed:解析与解决
  • ubantu lnmp
  • [Prometheus学习笔记]从架构到案例,一站式教程
  • WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)
  • Python小游戏20——超级玛丽
  • 应用targetsdk版本低于30,不符合华为应用市场审核标准
  • 【学习】软件测试中V模型、W模型、螺旋模型三者介绍
  • Docker Compose部署XXL-JOB
  • STM32实现串口接收不定长数据
  • 【专题】基于服务的体系结构
  • JS实现漂亮的登录页面(氛围感页面)
  • 【linux 多进程并发】0203 网络资源的多进程处理,子进程完全继承网络套接字,避免“惊群”问题
  • TypeScript实用笔记(三):泛型<T>的使用 <T>的12种工具类型的使用
  • python代码主要实现了对供水网络的水质模拟,并对模拟结果进行一系列处理
  • ‌5G SSB(同步信号块)位于物理层‌
  • Python淘宝数据挖掘与词云图制作指南
  • Python 继承、多态、封装、抽象
  • 华为HarmonyOS打造开放、合规的广告生态 - 原生广告
  • JVM出现OOM错误排查
  • 类被加载到jvm后再被注册到Spring中
  • Java 教程简介
  • JqGird 动态生成列使用
  • django各个文件简单介绍
  • RabbitMQ交换机类型
  • C#代码生成器实现原理