前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习-ResNet论文笔记

深度学习-ResNet论文笔记

原创
作者头像
肉松
修改2020-08-07 11:00:42
6310
修改2020-08-07 11:00:42
举报
文章被收录于专栏:torch-detection-学习笔记

介绍

在深度重要性的推动下,出现了一个问题学些更好的网络是否像堆叠更多的层一样容易?回答这个问题的一个障碍是梯度消失/爆炸这个众所周知的问题,它从一开始就阻碍了收敛。然而,这个问题通过标准初始化(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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 启发
  • 残差学习
  • 网络架构
  • 实验
  • 层响应分析
  • 探索超过1000层
  • Batch-normalized 应该放在非线性激活层的前面还是后面?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档