专栏首页torch-detection-学习笔记深度学习-ResNet论文笔记
原创

深度学习-ResNet论文笔记

介绍

在深度重要性的推动下,出现了一个问题学些更好的网络是否像堆叠更多的层一样容易?回答这个问题的一个障碍是梯度消失/爆炸这个众所周知的问题,它从一开始就阻碍了收敛。然而,这个问题通过标准初始化(normalized initialization)中间标准化层(intermediate normalization layers)在很大程度上已经解决,这使得数十层的网络能通过具有反向传播的随机梯度下降(SGD)开始收敛。(ResNet解决的不是梯度消失/爆炸问题)

当更深的网络能够开始收敛时,暴露了一个退化问题随着网络深度的增加,准确率达到饱和(这可能并不奇怪)然后迅速下降。意外的是,这种退化不是由过拟合引起的,并且在适当的深度模型上添加更多的层会导致更高的训练误差。

在本文中,我们通过引入深度残差学习框架解决了退化问题。我们明确地让这些层拟合残差映射,而不是希望每几个堆叠的层直接拟合期望的底层映射。我们假设残差映射比原始的、未参考的映射更容易优化。在极端情况下,如果一个恒等映射是最优的,那么将残差置为零比通过一堆非线性层来拟合恒等映射更容易。

恒等快捷连接(Identity shortcut connections)既不增加额外的参数也不增加计算复杂度。

我们发现:1)我们极深的残差网络易于优化,但当深度增加时,对应的“简单”网络(简单堆叠层)表现出更高的训练误差;2)我们的深度残差网络可以从大大增加的深度中轻松获得准确性收益,生成的结果实质上比以前的网络更好。

启发

残差表示。在图像识别中,VLAD[18]是一种通过关于字典的残差向量进行编码的表示形式,Fisher矢量[30]可以表示为VLAD的概率版本[18]。它们都是图像检索和图像分类[4,47]中强大的浅层表示。对于矢量量化,编码残差矢量[17]被证明比编码原始矢量更有效。

在低级视觉和计算机图形学中,为了求解偏微分方程(PDE),广泛使用的Multigrid方法[3]将系统重构为在多个尺度上的子问题,其中每个子问题负责较粗尺度和较细尺度的残差解。Multigrid的替代方法是层次化基础预处理[44,45],它依赖于表示两个尺度之间残差向量的变量。已经被证明[3,44,45]这些求解器比不知道解的残差性质的标准求解器收敛得更快。这些方法表明,良好的重构或预处理可以简化优化。

残差学习

关于退化问题的反直觉现象激发了这种重构。正如我们在引言中讨论的那样,如果添加的层可以被构建为恒等映射,更深模型的训练误差应该不大于它对应的更浅版本。退化问题表明求解器通过多个非线性层来近似恒等映射可能有困难。通过残差学习的重构,如果恒等映射是最优的,求解器可能简单地将多个非线性连接的权重推向零来接近恒等映射。

在实际情况下,恒等映射不太可能是最优的,但是我们的重构可能有助于对问题进行预处理。如果最优函数比零映射更接近于恒等映射,则求解器应该更容易找到关于恒等映射的抖动,而不是将该函数作为新函数来学习。我们通过实验显示学习的残差函数通常有更小的响应,表明恒等映射提供了合理的预处理。

恒等映射足以解决退化问题,并且是合算的,因此Ws(1x1卷积)仅在匹配维度时使用。 残差函数的形式是可变的。本文中的实验包括有两层或三层的函数,同时可能有更多的层。但如果只有一层,方程(1)类似于线性层,我们没有看到优势。

网络架构

简单网络。卷积层主要有3×3的滤波器,并遵循两个简单的设计规则:(i)对于相同的输出特征图尺寸,层具有相同数量的滤波器;(ii)如果特征图尺寸减半,则滤波器数量加倍,以便保持每层的时间复杂度。我们通过步长为2的卷积层直接执行下采样。

我们的模型与VGG网络相比,有更少的滤波器和更低的复杂度。我们的34层基准有36亿FLOP(乘加),仅是VGG-19(196亿FLOP)的18%。

在每个卷积之后和激活之前,我们采用批量归一化(BN)。

实验

我们认为这种优化难度不可能是由于梯度消失引起的。这些简单网络使用BN训练,这保证了前向传播信号有非零方差。我们还验证了反向传播的梯度,结果显示其符合BN的正常标准。因此既不是前向信号消失也不是反向信号消失。实际上,34层简单网络仍能取得有竞争力的准确率,这表明在某种程度上来说求解器仍工作。我们推测深度简单网络可能有指数级低收敛特性,这影响了训练误差的降低。这种优化困难的原因将来会研究。

层响应分析

图7显示了层响应的标准偏差(std)。这些响应是每个3×3层的输出,在BN之后,在其他非线性化(ReLU/加法)之前。对于ResNets,该分析揭示了残差函数的响应强度。图7显示ResNet的响应比其对应的简单网络的响应更小。这些结果支持了我们的基本动机,残差函数通常比非残差函数更接近零。我们还注意到,更深的ResNet具有较小的响应幅度当层数更多时,单层ResNet趋向于更少地修改信号。

探索超过1000层

我们探索超过1000层的过深的模型。但是,这种极深的模型仍然存在着开放的问题。这个1202层网络的测试结果比我们的110层网络的测试结果更差,虽然两者都具有类似的训练误差。我们认为这是因为过拟合。对于这种小型数据集,1202层网络可能是不必要的大。在本文中,我们不使用maxout/dropout,只是简单地通过设计深且窄的架构进行正则化,而不会分散注意力在优化难点上。但结合更强的正规化可能会改善结果,我们将来会研究。

Batch-normalized 应该放在非线性激活层的前面还是后面?

https://www.zhihu.com/question/283715823/answer/438882036

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度学习Pytorch检测实战 - Notes - 第1&2章 基础知识

    物体检测技术,通常是指在一张图像中检测出物体出现的位置及对应的类别。我们要求检测器输出5个量:物体类别、

    肉松
  • CMake学习笔记

    CMake语法指定了许多变量,可用于帮助您在项目或源代码树中找到有用的目录。其中一些包括:

    肉松
  • 编译器原理 - 学习笔记

    简单地说,编译器是一个程序,它读入用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语言)编写的程序。编译器能够向用户报告被编译的源程序...

    肉松
  • 听说你java项目可以运行?打包成 jar后路径找不到问题的完美解决方案

    gfu
  • 三星为爱美人士操碎了心,新专利用手机检测晒黑指数帮你防晒! | 热点

    三星新专利可以通过手机前置摄像头检测皮肤的损伤以及晒黑的程度,并且能够通过APP给消费者提供防晒建议。

    镁客网
  • 使用Python提取JPEG图像文件dpi并计算物理尺寸

    感谢浙江省浦江中学方春林老师提供的问题、测试图像和第一版本的代码! 下面的代码需要安装Python图像处理库pillow,由于不同公司对JPEG压缩算法和格式的...

    Python小屋屋主
  • CVPR 2018 | 残差密集网络:利用所有分层特征的图像超分辨率网络

    机器之心
  • ListenableFuture并发编程

    说起并发,大家都会想到多线程,当然多线程的合理使用能够提高cpu的利用率和提高请求的响应效率,使用不当会带来线程安全问题,导致数据一致性问题以及jvm内...

    叔牙
  • 经济学人文章爬虫

    假如是经常阅读该网站文章自然是订阅支持一下更好,但假如只是偶尔想看几篇文章订阅的性价比就不高了。

    林清猫耳
  • 使用Python寻找黑洞数

    黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如3位黑洞数是495,因为954-459=495,4位数...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券