首页 > 编程知识 正文

残差结构也是一层卷积层吗,如何输出残差

时间:2023-05-04 14:49:12 阅读:156212 作者:3647

本文将学习deepresiduallearningforimagerecognition (单击此处可下载原文) )论文的个人翻译和对本文的个人理解。

ResNet网络论文翻译个人理解论文翻译

从理论上分析,网络越深,越有能力综合图像的低维、中维、高维信息。

1 .网络越深,不就越是层数重叠吗?

会发生坡度的爆炸和消失,对学习速度有很大的影响。

针对这个问题,我们通过规范化的初始化和中间的规范化层来缓和(增加BN )。

随着网络结构深度的加深,还会发生另一个问题,退化

退化:随着网络深度的增加,精度饱和,迅速下降。 不能用拟合来说明。 train集的精度也会降低。

图1显示test和train两种不同层的网络随着迭代时间精度发生变化。

退化问题表明不是所有的系统都一样容易优化。

作者希望建立浅层构造和建立在其上的深层构造的输出对比。 作者指的是我们对一般网络的输入和输出做一些改动,这里的浅和深可以分别看作是小型网络的输入和输出。 此外,原始网络结构中的identity映射(例如identity mapping常量等映射包含原始输入)、plain映射(图中的笔直网络结构)还包含当前网络输出中的输入输出误差不会比没有恒等映射更大(假设输入已经是最佳的最优化,那么接下来的网络就没有任何最优化,输出就是原来的输入。 具有恒等映射的网络结构的误差据说在原网络的误差以下),实验表明具有恒等映射的网络结构效果更好,且缓解了退化问题。

在这篇文章中,作者提出了残差网络结构来解决退化问题,但基本思想是我们训练的目标是xf(x ) (即h ) x ),而不是网络的输入值加上网络的训练值(desired underlying mapping )

都是输入经过非线性激活函数的输出,所以存在劣化的问题。 输入也应该包括在内。 这样构成残差网络。 残差映射是f(x )=h ) x )-x,原来的映射是f ) x ) x。 在此x是向网络的输入,f ) x是输入经由本来的网络(plain )的输出。 假设优化残差映射比优化原始映射更简单,如果x最合适的话f ) ) x )为0,x要么经由非线性输出,要么x652

作者在ImageNet上实验了152层残差网络,比VGG深8倍,得到了3.57%的错误率。

作者通过一系列实验证明了显示深度,即网络深度对许多视觉识别任务的重要性。 仅使用了非常深的网络,作者在COCO目标检测数据集上就获得了28%的相对提高

二、

传统的学习中也有利用残差向量提取特征的,效果也很好。 有人试着让他进入深度学习。 在highway networks上引入了这个跳跃连接,但他引入了门函数,门关闭时的效果更低。

三、

假设h(x )为已优化为网络训练的输出,则传统网络已输入x,获得网络输出映射,并训练网络如何达到最高输出映射(即h ) x )。 残差网络不同,输入为x,并且训练为最优,假设网络的输入与输出之差f(x )=h ) x )-X )在两个维度上。 两者最终都可以获得优化输出h(x ),但难度都不同。

提出改变网络训练方法是为了缓解退化现象,只要网络中增加了恒等映射,训练误差就不会大于未加。 退化问题表明,我们本来通过非线性层达到优化h(x )的难度有点大。 采用残差网络学习,如果先前优化了网络输出,则该残差网络的权值接近0,输出等于输入,输出总是优化的h(x )。

实际上,输入不是优化的h(x ),但残差网络有助于提高性能,有助于解决老化问题。

3.2通过短路跳跃来实现恒等映射

基于原始网络构建残差结构的模块如图2所示。

x表示模块的输入,y表示模块的输出,f(x,{W i} )表示学习的残差图。 例如,图2为F=W2(W1x,在激活函数中使用了ReLU,但为了简化概念,这里忽略了偏差,使用相加的第二个非线性输出。

该短路连接不会带来额外的参数和计算量。 这不仅在实际操作中很有吸引力,而且对于比较“正常网络”(plain networks )和“残差网络”(resident networks )很重要。 可以将同时具有相同数量参数、深度、宽度和计算消耗的普通网络与残差网络进行比较。

假设等式1中的x和f具有相同的维度。 如果没有相同的维,请使用线性映射Ws乘以x,使f和Wsx具有相同的维。

通过实验证明恒等映射可以减轻劣化问题且简单,Ws只用于一致x的维数。

残差函数f的形式很灵活,有很多种。 本论文涉及的f有两种,一种是三层楼,另一种是两层楼。 但是,f用于只有一层的残差网络时,就像线性网络一样,没有明显的优点。

以上都介绍了所有连接层的残差网络,但实际上也适用于卷积层。 函数f(x,{Wi} )也可以表示很多

个卷积层,在两个特征映射的每个通道上点加。

3.3网络结构
我们测试了很多一般网络结构和残差网络结构,在这里描述两个模型用于讨论。
plain网络(图3中间的那个):主要来源于VGG-19,卷积核用的主要是33的网络结构遵循两个设计规则:
1.same padding(输入 输出的大小一致)
2.特征映射的数量减半,卷积核的个数增加一倍
通过stride为2的卷积核降采样,在网络的结尾用全局平均池化和神经元为1000的全连接层去连接softmax,该网络的权重层(卷积层+全连接层)为34.该网络和VGG-19相比具有更少的卷积核和更低的复杂度。
Residual网络:我们只是把plain网络中加入了短路连接的方式,顺便用来和plain网络做对比。该网络有实线和虚线的两种短路连接,实线连接是表示输入输出的维度一致,x不需要Ws做线性变化。虚线表示输入和输出维度不一致。当输入输出的维度不一致时(虚线表示的地方),我们考虑两种选择:1.短路仍然用于恒等映射,用0去填充增加的维度。2.用Ws给x做线性变换(用11的卷积核)。对于两个选择,当短路跳跃两层网络结构时,我们将执行这两步。
图3:

3.4实施
训练:我们将图片将调整它的最小的边在[256,480]进行尺度的缩放,从图片中裁剪出224*224大小的图片进行随机采样或者水平翻转,并减去每个像素的均值。对图像使用了彩色增强,还加入BN在卷积层和激活函数之间。还需要初始化权重,采用的批量梯度下降法的批量是256,学习率是从0.1开始的并且当准确率不再提升的时候除以10,训练的最大迭代次数是600000,权重衰减是0.0001动量是0.9,没用用弃权。
测试:为了做对比,我们用10次裁剪进行测试。为了最好的结果,我们将采用全卷积的方式并在多个尺度下平均分数(图像调整最短的边为{224,256,384,480,640})

四、实验
4.1数据集

在ImageNet 2012 classification dataset,这个数据集有1000个类,分为训练图片1.28百万张,验证集5万张,测试10万张。评价用top-1和top-5的错误率。
表1:第一列是block 第二列是这个block的输出大小 其他列就表示是多少层权重层用的卷积block以及内部进行了几次卷积。

表2:分别表示18层和34层的plain/resnet 的在数据集上top-1的错误率。

图4:细线表示训练集上的错误,粗线表示验证集上的错误。左边是plain-18和plain-34右边是ResNet-18和ResNet-34
conclusion:
1.在残差网络中,退化问题得到了很好的缓和,而且随着网络层数的增加 可以获得更小的训练误差。
2.残差网络对比普通的网络有更小的错误率,说明残差网络可以有效我提升分类的精度。
3.ResNet在早期能够提供更快的收敛速度来简化优化。

表3:ResNet改变恒等映射维度通过3个方法:
A.用0-padding
B.只在维度变化时,进行Ws的线性映射
C.所有恒等映射都进行Ws的线性映射
conclusion:
1.三种维度变化方法的ResNet都比原来的plain错误率小,说明相同层数的ResNet比plain训练效果好。
2.ResNet维度变化选择B比选择A的效果好,因为0padding没有进行残差学习
3.C的效果比B好,但会引入额外的参数。
4.ABC表明投影方式的不同对退化问题影响不大。(退化问题的解决是因为残差网络)
5.为了减少计算量和模型的复杂度,本篇文章的增加维数的方式都没有选择C。

图5:表示不同的残差网络结构的F的形式
新结构(右边)中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量
先用11的卷积将256维的chanel降到64维(只改变chanel不改变local信息) 进过33的提取信息 最后再用1*1的卷积增加通道数
因为新结构的输入维度比较大,所以要考虑到计算量的问题。当维数比较小的时候,还是考虑如何能提取更多的特征信息。

图四:单一模型(使用了3层的block)的在验证集上的错误率

表5:ResNet将6种不同的深度模型混合采用152层的网络结构,赢得了15年的第一ILSVRC。

4.2
作者的目的是推动深度网络的发展不只是为了达到state-of-the-art的效果,所以简化了网络结构

图6 细线表示训练错误 粗线表示测试错误 左边是plain网络 中间是ResNet网络 右边是ResNet-110和更高层次的对比

图7表示 每层响应的标准差 这个响应是在卷积层和bn之后,激活函数之前的
上面的表示原始顺序 下面的表示降序排序

个人的理解

为什么要发展深度神经网络?
随着网络的深度不同可以提取图像low/mid/high-level的特征,层数越多提取的特征就越丰富。越深的网络提取的特征越抽象,越具有语义信息。

语义信息:有低、中、高语义信息
视觉层即通常所理解的底层,即颜色、纹理和形状等等,这些特征都被称为底层特征语义;
对象层即中间层,通常包含了属性特征等,就是某一对象在某一时刻的状态;
概念层是高层,是图像表达出的最接近人类理解的东西。

既然深度学习既然能提取更多的信息,为什么不能通过简单的叠加层数来使网络达到深度网络?

通过大量的实验得出,简单地叠加层数来达到深度网络会造成梯度的消失或者爆炸和退化问题。这些问题会导致这样得到的深度网络学习能力比浅层网络好不到哪里去。针对梯度的消失或者爆炸,我们可以增加正则化初始化和中间的正则化层(BN)。BN它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散(特征分布较散)”的问题,从而使得训练深层网络模型更加容易和稳定。退化问题:随着网络深度的增加,准确度达到饱和然后迅速下降。不能用过拟合来解释,因为在train集上的精度也下降。

作者是如何提出来残差网络结构的?

首先在传统学习上,已经有运用这种残差学习如Fisher Vector,且都取得了很不错的效果。深度学习上也有人提出了用这种残差网络的结构,只不过增加了门函数效果不好。作者就是想我学习恒等映射深层网络总不会比比浅层网络的性能差吧(原因下面有解释),后来构建了残差网络的时候发现能有效的缓解退化问题,来提高深层网络的学习能力。

怎么样通俗的理解恒等映射?
原文的解释:

具体的解释:

。所以如果是一层的残差结构那学习起来的意义并不是很大。如果只是一层 类似于线性层并不会带来多大的性能的提升。(CSDN公式编辑器真SB)

残差网络是如何缓和退化问题和梯度问题的?
残差跨过一些层,求导的时候就可以直接加上shortcut的终点层的delta了。
resnet相当于多个模型的集成,其中真正有效的部分其实很短,缓和了退化问题,只是由于从loss到输入的有效路径变短了,所以问题不明显了。但是并没有解决,可以看下最后一个问题。

小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。
最有效的避免梯度爆炸的方法是梯度裁剪和batch-normalization。

残差网络到底在学习什么?
学习恒等映射这点出发,考虑到网络要学习一个F(x)=x的映射比学习F(x)=0的映射更难,所以可以把网络结构设计成H(x) = F(x) + x,这样就即完成了恒等映射的学习,又降低了学习难度。这里的x是残差结构的输入,F是该层网络学习的映射,H是整个残差结构的输出。他把学习的目标从优化F(x) + x接近最优化的H(X)转移到优化F(X),通过学习训练让F(X)接近0。
这样做的好处有很多:从直观上看残差学习需要学习的内容少,因为残差一般会比较小,学习难度小点。
举个大概的例子:如果不使用残差网络结构,这一层的输出F’(5)=5.1 期望输出 H(5)=5 ,如果想要学习H函数,使得F’(5)=H(5)=5,这个变化率较低,学习起来是比较困难的。但是如果设计为H(5)=F(5)+5=5.1,进行一种拆分,使得F(5)=0.1,那么学习目标是不是变为F(5)=0,一个映射函数学习使得它输出由0.1变为0,这个是比较简单的。也就是说引入残差后的映射对输出变化更敏感了。
进一步理解:如果F’(5)=5.1 ,现在继续训练模型,使得映射函数F’(5)=5。(5.1-5)/5.1=2%,也许你脑中已经闪现把学习率从0.01设置为0.0000001。浅层还好用,深层的话可能就不太好使了。如果设计为残差结构呢?5.1变化为5,也就是F(5)=0.1变化为F(5)=0.这个变化率增加了100%。引入残差后映射对输出变化变的更加敏感了,这也就是为什么ResNet虽然层数很多但是收敛速度也不会低的原因。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化。

为何残差网络效果这么好?

使网络更容易在某些层学到恒等映射(identity mapping),假设之前的网络已经是最优化了,经过具有残差结构的网络后输出还是它本身(还是最优化)。如果输入不是最优化,我们再经过网络调优。所以说残差结构的深度网络本身具有不低于浅层网络的性能。残差网络是很多浅层网络的集成,层的指数级很多。主要的实验证据是:把 ResNet 中的某些层直接删掉,模型的性能几乎不下降。残差网络使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。

Resnet 网路结构的目标函数是什么?
目标函数跟网络是分开的两个部分。目标函数,是为了达成目标,给网络一个feedback,让它学习。网络是达成目标的“魔法”,只要知道了最后一层目标函数的导数,扔给网络学就可以了。很多时候我们都认为网络是一个feature extractor(backbone),跟问题本身没有太大关系。ResNet主要是发现了residual connection可以缓和退化的问题,是网络自己的优化。
目标函数和用什么backbone没什么关系,跟你的任务和设计灵感有关。
例如,分类任务 交叉熵损失函数
回归任务 L1 L2 损失函数可以叠加
检测不就是分类+回归

既然采用了残差结构,论文中说为什么当层数达到10^3的数量级时,会出现退化问题?
针对这个问题,此处有两个观点供讨论。

残差结构还是可以的,但网络层数太高了,而数据集相对于网络层数来说有点小了。当层数比较小的时候,残差结构可以很好的缓和退化问题,因为上一层饱和时可以通过残差映射更快的传递给下一层。但是当深度太高时,就算是简化成只有残差传递的话,网络还是很深相当于没有残差映射的原来的网络,所以网络还是退化了。所以我一直描述残差网络可以缓和退化问题,并不说解决。

参考:
https://www.zhihu.com/question/53224378

https://www.zhihu.com/question/52375139

https://blog.csdn.net/wzy_zju/article/details/81262161?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control

https://www.cnblogs.com/alanma/p/6877166.html

如有侵权,马上删除
个人愚笨,可能有很多错误的观点,还望指出讨论。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。