深度学习之图像分类(四)ResNet论文总结

Deep Residual Learning for Image Recognition(Resnet)

Resnet论文总结

Rensnet解决了退化问题,获得了更高的准确率,实现了更快的收敛速度

摘要

更深层次的神经网络更加难以训练。我们提出一个深度残差结构网络架构能够训练深层次的网络,根据层的输入,将层表述为学习的残差函数,而不是学习未引用的函数,我们可以提供大量的证据表明网络更容易优化,并且可以在深层次的网络中获得获得更好的精度。在Imagenet网络上,深度残差网络结构的深度是VGG的8倍,但是任然拥有最低的复杂度。深度残差网络结构在ImageNet的测试任务中错误率仅为3.75%,这个结果在ILSVRC-2015的分类比赛中赢得了第一名,我们也在CIFAR-10上边构建了100层和1000层的网络。

表征的深度对于许多视觉识别任务至关重要。仅由于我们的极深表示,我们在COCO对象检测数据集上获得了28%的相对改进。深度残差网络是我们参加ILSVRC & COCO 2015竞赛的基础,我们还在ImageNet检测、ImageNet定位、COCO检测和COCO分割的任务中获得了第一名

深度神经网络好在可以加很多层把网络变的特别深,不同程度的层会得到不同图特征的feature,比如低级的视觉特征或者高级的语义。

许多其他重要的视觉识别任务也极大的受益于深度模型

提出问题:是网络越深学习效果就越好吗?

随着网络的加深会出现梯度消失或者梯度爆炸的问题。

对于如何结果梯度消失或者梯度爆炸的问题提出两种解决办法:

  1. 在进行权重初始化时,权重不要特别大也不要特别小。(权重特别大随着网络层数的加深,会出现梯度爆炸的问题,过重特别小,随着网络的加深,会出现梯度消失的问题)
  2. 在中间层加入一些normalization,包括BN(batch normalization)可以使得每个层之间的那些输入和他的梯度的均值和方差对于比较深的网络是可以训练的,避免一些层特别大,或者一些层特别小,使用这种技术后是可以使网络收敛的,虽然可以收敛,但是网络变深之后,精度也是会变差的。

文章提出现精度变差的问题不是因为层数变多模型变复杂了导致的过拟合(overfitting是说训练误差变得很低,但是测试误差变得很高),由于随着网络的加深训练误差和测试误差都变高了,所以他不是overfitting。

通过构造更深的模型存在一个解决方案:添加的层是身份映射(H(X)),其他层是从学习的较浅模型复制的。这种构造解的存在表明,较深的模型不会比较浅的模型产生更高的训练误差。但实验表明,随着网络的加深,网络的学习能力更差。如果更深层次的网络不能够学习到特征,也会维持原来的学习的结果。 深层网络带来的梯度不稳定,网络退化的问题始终都是存在的,可以缓解,没法消除。 这就有可能出现网络加深,性能反而开始下降。 网络加深带来的饱和,再深也没有了。 模型加深还可能出现的一些问题是导致某些浅层的学习能力下降 ,限制了深层网络的学习,这也是identity等结构能够发挥作用的很重要的因素。

ResNet的思想,允许原始输入信息直接传到后面的层中,这样的话这一层的神经网络可以不用学习整个的输出,而是学习上一个网络输出的残差,因此ResNet又叫做残差网络。

整个网络只需要学习输入、输出差别的那一部分,简化学习目标和难度。

利用了恒等映射,该恒等映射保证了相比于浅层网络,深层网络至少可以得到一个不差于浅层网络的结果。

ResNet中所提出的Residual block之所以成功,原因有两点,第一,是它的shortcut connection增加了它的信息流动,第二,就是它认为对于一个堆叠的非线性层,那么它最优的情况就是让它成为一个恒等映射,但是shortcut connection的存在恰好使得它能够更加容易的变成一个Identity Mapping。

也就是说,如果能够很容易的学到一个恒等映射,那么更深层的网络也就更容易产生更好的性能

残差连接如何处理输入和输出的形状不同的情况:

第一个方案是在输入和输出分别添加一些额外的0,使得形状能够对应起来。

第二个方案是之前提到的全连接怎么做投影做到卷积上,是通过一个叫做1*1的卷积层,这个卷积层的特点是在空间维度上不做任何改变,主要是在通道维度上做改变。所以只要选取一个1*1的卷积使得输出通道是输入通道的两倍,这样就能将残差连接的输入和输出进行对比了。在ResNet中,如果把输出通道数翻了两倍,那么输入的高和宽通常都会被减半,所以在做1*1的卷积的时候,同样也会使步幅为2,这样的话使得高宽和通道上都能够匹配上

使用1x1卷积减少参数和计算量

如果用了更深层次的网络时,考虑到计算量,首先用1x1的卷积核将输入的256维降到64维,然后通过1x1卷积核恢复到256,这样做的目的是减少参数量计

算量

图片是两种不同的残差模块,左图为刚才提到的常规的残差模块,由两个3X3卷积堆叠而成,但是随着网络的加深,这种残差设计在实践中并不是十分有效。右图所示为“瓶颈残差结构”,依次由 3个 1 × 1,3 × 3 和 1 × 1 的卷积层构成,这里 1 × 1 卷积能够起降维或者升维的作用,从而令 3 × 3 的卷积可以在相对较低维度的输入上进行,以达到提高计算效率的目的。在非常深的网络中,“瓶颈残差模块”可大量减少计算代价。

为什么要在降维之后生维?

保证shape相同

参数怎么降低的?

Resnet到底解决另一个什么样的问题

Rensnet解决了退化问题,获得了更高的准确率,实现了更快的收敛速度

梯度消失和退化现象不是同一个问题

退化现象是随着网络的加深,在数据集和测试集的误差没有降低反而升高,并且这种退化并不是过拟合造成的

而梯度消失和梯度爆炸则是因为网络层数太深,且使用了不合适的激活函数和初始权值太大,而引发的梯度反向传播中的连乘效应。

文中很明确的说明了,数十层的神经网络,归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上能够解决梯度消失/爆炸,网络在反向传播的随机梯度下降(SGD)上能够收敛。

退化问题显然是在梯度问题之后,且更麻烦的的问题。退化的网络效果不好,是因为网络没有被训练好(根据论文本身的观点,网络训练难度随着层数增长的速度不是线性,而至少是多项式等级的增长),因此resnet解决了更好训练网络的问题。

有一点很明显,神经网络就是自主的学习,我们的 resnet 和 short cut 让网络自主的学习网络的深度,去学习网络在哪一部分起作用(权值非零)

上图中比较了18层和34层在有残差连接和没有残差连接的结果

左图中,红色曲线表示34的验证精度(或者说是测试精度)

左图中,粉色曲线表示的是34的训练精度一开始训练精度是要比测试精度高的,因为在一开始的时候使用了大量的数据增强,使得寻来你误差相对来说是比较大的,而在测试的时候没有做数据增强,噪音比较低,所以一开始的测试误差是比较低的

图中曲线的数值部分是由于学习率的下降,每一次乘以0.1,对整个曲线来说下降就比较明显。为什么现在不使用乘0.1这种方法:在什么时候乘时机不好掌控,如果乘的太早,会后期收敛无力,晚一点乘的话,一开始找的方向更准一点,对后期来说是比较好的

主要贡献: ResNet的主要贡献包括以下几个方面:

  1. 残差学习: ResNet提出了残差学习的概念。在传统的神经网络中,学习的是从输入到输出的映射关系。而在ResNet中,网络被训练去学习输入和输出的残差(即输入与期望输出的差异),而不是直接学习映射。这样的设计使得网络在学习过程中更关注于学习残差,从而减轻了梯度的传播难度。

  2. 残差块(Residual Block): ResNet引入了残差块,其中包含了两个分支,一个直接连接输入和输出,另一个学习输入和输出之间的残差。这种设计允许信息在网络中更短的路径上流动,有助于梯度的传播和模型的训练。

  3. 深度网络: ResNet可以训练非常深的网络,最高可达152层。相比于之前的网络结构,ResNet的深度使得它在各种视觉任务上都取得了非常好的性能。

  4. 全局平均池化(Global Average Pooling): ResNet采用全局平均池化代替全连接层,这种池化方式减少了网络参数数量,减轻了过拟合的问题。

实验结果: 在ImageNet数据集上,ResNet相比于同期其他网络结构,在更深的网络下取得了更好的性能。在网络深度为152层时,ResNet的性能远远超过了之前的网络结构,达到了当时最先进的水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值