Resnet论文笔记

  论文:2015 ResNet-Deep Residual Learning for Image Recognition

  首先需要明确一点,Resnet提出的基于一个重要的假设:越深的网络应具备更好的学习能力。

一、引出问题

  基于这个假设,那么问题来了,我们用全连接网络,不断地堆叠卷积层和池化层不就形成超深的网络了吗?

  答案是否定的,请看下图,下面两张图片,就是通过不断堆叠卷积层和池化层分别形成的56层的网络以及20层网络的训练集错误率以及测试集的错误率的对比图。可以很明显的看到,如果仅仅是通过不断地堆叠卷积层和池化层形成的超深网络,甚至比浅层网络的效果要差。
在这里插入图片描述
这是为什么呢?原因主要是有两个。
  第一,梯度消失和梯度爆炸的问题。
  假设每一层的误差梯度是一个小于1的数,那么在我们反向传播的过程中,由于每向前传播一层,都要乘以一个小于1的误差梯度,那么当我们的网络的深度越来越深的时候,就会使得梯度越来越小直到梯度消失。反过来,假设每一层的误差梯度是一个大于1的数,那么在我们反向传播的过程中,由于每向前传播一层,都要乘以一个大于1的误差梯度,那么当我们的网络的深度越来越深的时候,就会使得梯度越来越大直到梯度爆炸。 解决办法:Batch Normalization算法

  第二,退化的问题。
  退化问题指的是,哪怕我们解决了梯度消失和梯度爆炸的问题之后,我们还是存在随着网络层数的加深,网络预测效果不增反降。解决办法:加入残差结构

二、Resnet网络

在这里插入图片描述

  这是应用了残差结构之后,20层网络和110层网络的错误率对比图,可以明显地看到,在应用了作者所提出的残差结构之后,深度网络比浅层网络具有更好地预测效果,符合基本假设。

  那么到底什么是残差结构呢?如下图所示,其实就是在原来的网络的基础上在右边加上一个“小尾巴”shortcut
在这里插入图片描述

  下图是不同层数的残差网络
在这里插入图片描述

  下图是对上表34层,有残差结构以及无残差结构的对比图。那么上表中画红色圆圈的到底是什么东东呢?数字代表的是该层有多少个残差结构,x3就是代表有3个shortcut。细心的小伙伴可能会发现,下图中的shortcut为什么有些事实线,有些是虚线呢?这是因为,上一层所输出的矩阵的shape(也就是矩阵的大小)不符合下一层所需要的矩阵的shape的需求,因此在输入到下一层之前,需要先用1x1的卷积层进行升维或者降维。
在这里插入图片描述

三、 实验(Experiments)

3.1 ImageNet分类(ImageNet Classification)
  作者在ImageNet分类数据集(1000类)上评估了residual模型。模型在280万张训练图片上进行了训练,在5万张验证图片上进行评估。在10万张测试图片上获得最终的结果(reported by the test server)。我们评估了top-1和top-5错误率。

Plain Network

  作者首先评估了18层和34层plain网络。34层网络采用的是图3中间的模型。18层是其的简化版本。表1详细阐述了架构细节。

在这里插入图片描述
在这里插入图片描述

  表2表明34层plain网络比18层plain网络有更高的验证错误。为了揭示原因,在图4左,我们比较了训练过程中的训练和验证误差。我们注意到退化问题(34层网络具有比18层网络更高的训练误差)贯穿整个训练过程,即使18层网络是34层网络的一个子空间。
图4

  作者认为这里的优化困难不太可能是由梯度弥散引起的。这里的plain网络采用了BN,它能确保正向传播过程中的信号有非0的方差,同时确保了反向传播过程中梯度的有效传递。事实上,34层深是能够取得相当高的准确率的(表3),这表明在某种程度上来说求解器仍工作。我们推测深度plain网络可能有exponentially low收敛速度,这影响了训练误差的降低。这种优化困难的原因未来会进一步研究。

Residual Network
  接下来,我们评估了18层和34层残差网络(ResNet)。baseline架构是和上述的plain网络一样,并每两层增加一个shortcut连接。在第一次对比中,我们在维度发生变化时,采用了用0填充增加的维度的方法,所以两者的参数量完全一样。对比结果见表2和图4。

  从表2和图4中,我们有三个主要发现:

  1. 通过残差学习,34层(ResNet-34)超过了18层(ResNet-18)的准确率(超过了2.8%)。更重要的是,ResNet-34在训练集上的错误率很低的同时,在验证集上有很好的泛化性。这表明退化问题被很好的解决了。
  2. 相比于plain网络,ResNet网络将top-1准确率减少了将近3.5%(表2)。这验证了残差机制在非常深的网络上的效果。
  3. 我们同时注意到:18层plain /
    residual网络的准确率是差不多的,但是ResNet-18收敛的更快。当网络不是过于深时,当前的SGD求解器仍然能够很好的优化plain网络。在这种情况下,残差机制可以加快网络早期的收敛速度。

Identity vs. Projection Shortcut
  我们已经证明无参数,identity shortcut有助于训练。接下来我们研究projection shortcut(公式2)。在表3中我们比较了三个选项:
(A) 使用zero-padding shortcut来增加维度,所有的shortcuts是没有参数的;
(B)用Projection shortcut来增加维度,其它的shortcut是identity;
(C)所有的shortcut都是projections。
表3

  表3说明三个选项都比对应的plain网络好很多。B比A略好。我们认为这是因为A中的零填充确实没有残差学习。C比B稍好,我们把这归因于projection shortcut引入了额外参数。但A/B/C之间的细微差异表明,projection shortcut对于解决退化问题不是至关重要的。所以我们在本文的剩余部分不再使用C,以减少内存/时间复杂性和模型大小。identity shortcut对于下面介绍的瓶颈结构尤为重要。

Deeper Bottleneck Architecture
  接下来我们描述几个更深的网络(for ImageNet)。由于对训练时间的关注(我们要能承受),我们将构建块修改为瓶颈设计。对于每个残差函数F,我们使用堆叠3层而不是2层(图5)。三层分别是1×1,3×3和1×1卷积,其中的两个1×1卷积层分别负责降低维度和增加(恢复)维度,从而在3×3卷积层这里产生一个瓶颈。图5是具体的架构图,图中两个设计有相似的时间复杂性。
图5

  50、101和152层的ResNet相对于32层网络有更高的准确率。Table3和4中给出了测试结果。
表4

表5

3.2 CIFAR-10上的实现和分析(CIFAR-10 and Analysis)
  我们在CIFAR-10(5万张训练图片和1万张测试图片)数据集上进行了更多的研究。实验中在训练集上训练,测试集上评估。我们的关注点是极深网络的行为,而不是去获得更好的结果,所以我们故意(intentionally)使用简单的架构(如下)。

  Plain 和 Residual 架构使用(follow)图3的形式(中、右)。网络输入是32x32图像(per-pixel mean subtracted)。第一层是3x3卷积。然后我们使用 一个堆叠起来的6n层的3x3卷积,feature maps的size分别为32,16,8,size每减半,channel就变为2倍,channel分别为16,32,64。下采样过程通过stride为2的卷积来实现。网络最后接一个全局平均池化层,一个10-way的FC层和softmax。总共有6n+2个有权重的层。下表总结了架构
表6

  当使用shortcut连接时,每两层有一个shortcut(connected to the pairs of 3x3 layers)总共有3n个shortcut。在这个数据集,我们在所有的模型中使用identity shortcut(选项A)。所以我们的残差模型有着和plain模型相同深度、宽度和参数量。
模型中使用了weight decay(0.001),momentum(0.9),【13】权重初始化方法和BN,但没有使用Dropout。模型训练过程在两块GPU上以128的batch_size完成。开始的学习速率为0.1,在第32k和48k次迭代,学习速率除以10,迭代次数达到64k时,终止了训练(训练集合划分为45k的训练集,5k的验证集)。我们使用了【24】中类似的数据增强:图像每边pad 4个像素,然后随机裁剪出一个32x32的图像,并且对图像进行随机翻转。测试过程中,只使用原始的32x32图像。

  我们比较了n={3,5,7,9}(分别对应20,32,44,56层)时的网络。图6左说明了plain网络的行为,深度plain网络的性能随深度的增加而降低,并且当深度增加时,训练误差更高。在ImageNet(图4左)和MNIST(42)上也有类似的现象。表明这个优化困难是一个基础性的问题。
图6

  图6中表明了ResNet的行为。ImageNet上行为也类似(图4右)。我们的ResNet成功克服了优化困难并且能从深度的增加得到性能提升。

  我们进一步探索了n=18时(110层)的ResNet。在这个模型中,我们发现0.1的初始学习速率稍微有点过于大以至于不收敛。所以我们使用0.01的初始学习速率,直到训练误差低于80%(大概400次迭代),然后学习速率恢复为0.1并且继续训练。剩下的学习过程和前面一样。这个100层网络收敛的很好(图6中)。它有着比其它deep和thin网络(FitNet和Highway)更少的参数,同时性能基本接近state of art。

Analysis of Layer Responses
  图7表明了层相应的标准差(standard deviations (std))的变化。响应是3x3卷积的输出(BN之后,激活之前)。对于ResNet,这个分析揭示了残差函数的相应特点。图7表明ResNet一般有着比plain网络更小的响应。这些结果支持了我们的基础动机(3.1节):残差函数可能与非残差函数相比一般更接近于0。我们也注意到更深的ResNet有着更小的响应幅度(通过图7中ResNet-20,56,110的对比可以证明)。当网络加深后,ResNet中的每一层趋向于去更少地修改信号(modify signal less)。
图7

Exploring Over 1000 layers
  我们探索一个非常非常深的模型(1000层)。我们设置n=200从而产生一个1202层网络,训练方法采用ResNet-110类似的训练方法。我们的方法表明没有优化困难并且1000层网络能够去取得小于0.1%的训练误差(图6右)。它的测试误差仍然是相当好的(7.93%,表6)。

  但是在这样非常非常深的模型中,仍然有一个显而易见的问题。1202层网络的测试结果比110层网络要差,尽管有着相同的训练误差。我们认为这是因为过拟合。1202层网络可能是不必要的(太大了,19.4M)对于CIFAR-10。例如Maxout或dropout的强正则被应用去取得最好的结果(在CIFAR-10上)。在本文中,我们没有使用maxout和dropout并且仅仅采用了深窄这样的网络进行正则。但是结合强正则可能提高结果(未来要研究)。

3.3 在PASCAL和MS COCO数据集上的物体探测
  我们的方法在其他识别任务上有很好的泛化性能。表7和表8展示了PASCAL 2007、2012和COCO上的物体探测基线。我们采用了Faster R-CNN作为探测方法。然后用ResNet替换其中的部件,从而提高性能。
表78

四、论文的三个创新点

  ①提出超深的网络结构(突破1000层)
  ②提出redidual残差模块
  ③使用Batch Normalization加速训练(丢弃dropout)
BN算法的目的是使得我们的一批(batch)feature map满足均值为0,方差为1的分布规律,也就是随着训练的进行,数据的分布会越来越偏离标准正态分布,这时候需要把数据强行“压回”标准正态分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的大小变化就会导致损失函数较大的变化,意思就是这样让梯度变大,避免梯度消失的问题产生。

五、总结

  ResNet和Highway Network的思路比较类似,都是将部分原始输入的信息不经过矩阵乘法和非线性变换,直接传输到下一层。这就如同在深层网络中建立了许多条信息高速公路。ResNet通过改变学习目标,即不再学习完整的输出F(x),而是学习残差H(x)−x,解决了传统卷积层或全连接层在进行信息传递时存在的丢失、损耗等问题。通过直接将信息从输入绕道传输到输出,一定程度上保护了信息的完整性。同时,由于学习的目标是残差,简化了学习的难度。根据Schmidhuber教授的观点,ResNet类似于一个没有gates的LSTM网络,即旁路输入x一直向之后的层传递,而不需要学习。有论文表示,ResNet的效果类似于对不同层数网络进行集成方法。

注明:
  ①本文的部分内容引自b站up主:霹雳吧啦Wz
  网址:https://www.bilibili.com/video/BV1T7411T7wa?from=search&seid=14285360528559566989
  ②本文部分内容引自CSDN的文章《ResNet v1 论文笔记》:
  网址:https://blog.csdn.net/u014061630/article/details/80408056
  ③本文部分内容引自CSDN的文章《ResNet详细解读》:
  网址:https://blog.csdn.net/csdnldp/article/details/78313087

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值