精华内容
下载资源
问答
  • ResNet论文复现

    2018-02-11 16:12:53
    原文链接:点击打开链接摘要: ResNet论文笔记 一、论文简介先从Kaiming He的那篇paper说起吧,paper主要解决的还是神经网络的深度和准确率之间的关系,当神经网络的层数增加,出现了degradation,trainging error...

    原文链接:点击打开链接

    摘要: ResNet论文笔记 一、论文简介先从Kaiming He的那篇paper说起吧,paper主要解决的还是神经网络的深度和准确率之间的关系,当神经网络的层数增加,出现了degradation,trainging error和test error都会增加,针对这种退化问题,作者提出了Residual...

    ResNet论文笔记

    一、论文简介
    先从Kaiming He的那篇paper说起吧,paper主要解决的还是神经网络的深度和准确率之间的关系,当神经网络的层数增加,出现了degradation,trainging error和test error都会增加,针对这种退化问题,作者提出了Residual block的结构:
    pasted_image_0

    下面这段话对这个block进行了理论解释:
    In this paper, we address the degradation problem by introducing a deep residual learning framework. Instead of hoping each few stacked layers directly fit a desired underlying mapping, we explicitly let these layers fit a residual mapping. Formally, denoting the desired underlying mapping as H(x), we let the stacked nonlinear layers fit another mapping of F(x) := H(x)−x. The original mapping is recast into F(x)+x. We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.
    理解一下就是,先对比较难以拟合的目标映射H(x),我们去fit一个F(x)=H(x)-x(此时H(x)=F(x)+x),作者假设这个映射更容易拟合,考虑一下极限情况,对一个恒等映射,我们只需要把F(x)push到0,就可以得到我们的F(x),而不用靠非线性神经网络去拟合原本的恒等映射。

    接下来,为了实现F(x)+x,我们用一个shortcut connection,将恒等映射x直接加到神经网络的output,然后再用SGD进行训练。

    二、实验
    接下来作者在ImageNet和Cifar10上做了一系列的对比实验,将plain network和residual network在不同层数进行对比。我这里出于硬件的限制,只在Cifar10上做了几个实验,epochs也远远比不上paper里的64k,不过总体还算符合了论文的结果。

    我的结果:Resnet20:88.41%的test acc,比paper91.25低了不少,对比了一下和原作的差距,按重要性我总结了三个原因:1、data augmentation上原作对所有的图片进行了size2的zero padding,然后在镜像或者原图随机取了3232,我这里用的是mxnet,在api里没找到对image进行zero padding的函数,就直接crop了2828,test set 也都crop了2828,对结果影响还是蛮大的,最后的overfitttng比较严重也侧面说明了data augmentation还是比较影响了结果的。2、epochs的差距,我这里只训练了200个epochs,分别在1/2和3/4的地方将lr乘了0.1。3、在卷积过程中会遇到dimension increase,paper里提供了两个选择去解决这个问题,一个是他采用的zero padding多余的维度,第二种就是我采用的用11的卷积核去进行维度的增加操作。原文是这么写的: When the dimensions increase (dotted line shortcuts in Fig. 3), we consider two options: (A) The shortcut still performs identity mapping, with extra zero entries padded for increasing dimensions. This option introduces no extra parameter; (B) The projection shortcut in Eqn.(2) is used to match dimensions (done by 1×1 convolutions). For both options, when the shortcuts go across feature maps of two sizes, they are performed with a stride of 2.

    当然除了这三个,我还注意到了bn层的位置的问题,原文里是这么说的:We adopt batch normalization (BN) [16] right after each convolution and before activation, following [16].
    [16] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. In ICML, 2015.这里写了在每次卷积之后,激活之前。那么我们这里可以得到了卷积,bn,激活三个层的顺序,但是由于residual block里加入了一个与恒等映射相加的操作,那么等于是要在卷积,bn,激活三层中插入,问题来了,到底放在哪儿呢,作者后来又发了一篇paper专门讲这个问题:Identity Mappings in Deep Residual Networks,做了实验进行对比,得到了下面这张图:
    pasted_image_0_1_

    里面效果最好的还是e:full pre-acticvation,也就是把identity mapping放在了最后。

    下面讲一下我自己做实验遇到的问题以及是如何解决的吧,首先参数都是按照paper里设置的:We use a weight decay of 0.0001 and momentum of 0.9, and adopt the weight initialization in [13] and BN [16] but with no dropout. These models are trained with a minibatch size of 128 on two GPUs. We start with a learning rate of 0.1, divide it by 10 at 32k and 48k iterations, and terminate training at 64k iterations, which is determined on a 45k/5k train/val split.当然这里的64k的epochs我换成了自己设置的,这也导致了问题的产生。
    pasted_image_0_2_

    这是第一次的图片,y轴label是test_acc开始打错了。。。图中可以看到效果是44>32>56>20,当时有预感应该是epochs太少了,所以又做了一次epochs200的,如下图,可以看到效果好了点:
    pasted_image_0_3_

    这里我对比了一下两张图,感觉在epochs到1/2处学习率可能还是太大了,如果动一下应该能弥补一下epochs太少的问题,为了验证我的猜想,我在原参数的0.1,0.10.1,0.10.10.1修改了一下变成0.1,0.10.05.0.10.050.05,并跑了一次epochs=100看了一下效果:
    pasted_image_0

    事实证明效果好了很多,因此我直接令epochs=256分别在plain net和residual net上跑了一下进行了对比,基本达到了paper里的效果:
    pasted_image_0_2_

    pasted_image_0_1_


    展开全文
  • ResNet论文详解

    万次阅读 2018-11-19 20:28:53
    原文地址: https://arxiv.org/pdf/1512.03385.pdf 论文目标: 提出一种方法使更深的卷积神经网络的训练成为可能。 论文工作: 将网络层要学习的函数关系变为学习关于层输入的残差函数,不是学习没有参考的...

    原文地址:

    https://arxiv.org/pdf/1512.03385.pdf

     

    论文目标:

    提出一种方法使更深的卷积神经网络的训练成为可能。

     

    论文工作:

    将网络层要学习的函数关系变为学习关于层输入的残差函数,不是学习没有参考的函数。
     

    传统思路:

    更好的网络是不是靠堆叠更多的层就能实现。

    堆叠网络的缺点:
    1.网络难以收敛,梯度消失/爆炸在一开始就阻碍网络的收敛。

           传统解决办法:
           通过标准初始化和中间标准化层在很大程度上解决。这使得数十层的网络能通过具有反向传播的随机梯度下降(SGD)开始收敛。

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

    退化问题上的一个思考:
    假设我们训练了一个浅层网络,那么在其后面直接添加多层恒等映射层而构成的一个深层网络,那这个深层网络最起码也不能比浅层网络差(或许是我们在合理的时间内实现不了吧)。所以我们可以得出这一个结论:不是所有的系统都很容易优化,即深层网络不容易被优化(不代表深层网络能做到更好的效果)
     

    残差结构的提出:

    1.提出目的:
    解决上述的退化问题,解决网路优化难得问题

    2.基本思路:
    提出residual层,明确地让这些层拟合残差映射,而不是希望每几个堆叠的层直接拟合期望的基础映射。形式上,将期望的基础映射表示为H(x),我们将堆叠的非线性层拟合另一个映射F(x)=H(x)−x。原始的映射重写为F(x)+x。我们假设残差映射比原始的、未参考的映射更容易优化。在极端情况下,如果一个恒等映射是最优的,那么将残差置为零比通过一堆非线性层来拟合恒等映射更容易。,快捷连接简单地执行恒等映射,并将其输出添加到堆叠层的输出(图2)。恒等快捷连接既不增加额外的参数也不增加计算复杂度。整个网络仍然可以由带有反向传播的SGD进行端到端的训练。

    3.参数网络效果简述:
    我们在ImageNet[35]上进行了综合实验来显示退化问题并评估我们的方法。我们发现:
    1)我们极深的残差网络易于优化,但当深度增加时,对应的“简单”网络(简单堆叠层)表现出更高的训练误差;
    2)我们的深度残差网络可以从大大增加的深度中轻松获得准确性收益,生成的结果实质上比以前的网络更好。

     

    残差结构提出的具体过程:

    1.残差表示作为一种重构或预处理方法,被证明具有优势:
            1.对于矢量量化,编码残差矢量[17]被证明比编码原始矢量更有效。
            2.求解器比不知道解的残差性质的标准求解器收敛得更快。

    2.快捷连接这一思路的实践和理论研究:
    导致快捷连接[2,33,48]的实践和理论已经被研究了很长时间。训练多层感知机(MLP)的早期实践是添加一个线性层来连接网络的输入和输出[33,48]。在[43,24]中,一些中间层直接连接到辅助分类器,用于解决梯度消失/爆炸。论文[38,37,31,46]提出了通过快捷连接实现层间响应,梯度和传播误差的方法。在[43]中,一个“inception”层由一个快捷分支(仅仅是快捷连接这一思路)和一些更深的分支组成。

    3.残差结构确实比其他结构更易学习:

    尽管两种形式应该都能渐近地近似要求的函数(如假设),但学习的难易程度可能是不同的。理由如下:

           1.关于退化问题的反直觉现象激发了这种重构。正如我们在引言中讨论的那样,如果添加的层可以被构建为恒等映射,更深模型的训练误差应该不大于它对应的更浅版本。退化问题表明求解器通过多个非线性层来近似恒等映射可能有困难。通过残差学习的重构,如果恒等映射是最优的,求解器可能简单地将多个非线性连接的权重推向零来接近恒等映射。
           2.在实际情况下,恒等映射不太可能是最优的,但是我们的重构可能有助于对问题进行预处理。如果最优函数比零映射更接近于恒等映射,则求解器应该更容易找到关于恒等映射的抖动,而不是将该函数作为新函数来学习。我们通过实验(图7)显示学习的残差函数通常有更小的响应,表明恒等映射提供了合理的预处理。
    下图通过表明残差函数有更小的响应证明了残差结构可以提供合理的预处理效果:

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

    4.添加快捷恒等映射(Shortcuts)的一些具体问题:

    1.快捷连接既没有引入外部参数又没有增加计算复杂度。这不仅在实践中有吸引力,而且在简单网络和残差网络的比较中也很重要。前面方程中x和F的维度必须是相等的。如果不是这种情况(例如,当更改输入/输出通道时),我们可以通过快捷连接执行线性投影Ws来匹配维度(Ws仅在匹配维度时使用):

    2.残差函数F的形式是可变的。本文中的实验包括有两层或三层(图5)的函数F,同时可能有更多的层。但如果F只有一层,方程(1)类似于线性层:y=W1x+x,我们没有看到优势。

     

    5.使用循序渐进的方式引出我们的最终的残差架构:

    从Vgg的启发出发,我们构建一个简单的卷积神经网络,之后用一下两个设计规则设计出我们的残差网络:

    (i)对于相同的输出特征图尺寸,层具有相同数量的滤波器;
    (ii)如果特征图尺寸减半,则滤波器数量加倍,以便保持每层的时间复杂度。我们通过步长为2的卷积层直接执行下采样。

    下面的后两个网络以全局平均池化层和具有softmax的1000维全连接层结束。ImageNet的网络架构例子。左:作为参考的VGG-19模型40。中:具有34个参数层的简单网络(36亿FLOPs)。右:具有34个参数层的残差网络(36亿FLOPs)。带点的快捷连接增加了维度。

    基于上述的简单网络,我们插入快捷连接(图3,右),将网络转换为其对应的残差版本。当输入和输出具有相同的维度时(图3中的实线快捷连接)时,可以直接使用恒等快捷连接(方程(1))。当维度增加(图3中的虚线快捷连接)时,我们考虑两个选项:
    A)快捷连接仍然执行恒等映射,额外填充零输入以增加维度。此选项不会引入额外的参数;
    B)方程(2)中的投影快捷连接用于匹配维度(由1×1卷积完成)。对于这两个选项,当快捷连接跨越两种尺寸的特征图时,它们执行时步长为2(Fm网格要变小)。

     

    6.ResNet更多细节和其他变种:

    ImageNet架构。构建块显示在括号中,以及构建块的堆叠数量。下采样通过步长为2的conv3_1, conv4_1和conv5_1执行。
    分析:
    值得注意的是我们的模型与VGG网络(图3左)相比,有更少的滤波器和更低的复杂度。我们的34层基准有36亿FLOP(乘加),仅是VGG-19(196亿FLOP)的18%。

     

    模型的训练与测试:

    1.训练过程的配置:

        1.调整图像大小,其较短的边在[256,480]之间进行随机采样,用于尺度增强。
        2.224×224裁剪是从图像或其水平翻转中随机采样,并逐像素减去均值[21]。
        3.使用了[21]中的标准颜色增强。
        4.在每个卷积之后和激活之前,我们采用批量归一化(BN)[16]。
        5. 我们按照[12]的方法初始化权重,从零开始训练所有的简单/残差网络
        6.我们使用批大小为256的SGD方法。
        7.学习速度从0.1开始,当误差稳定时学习率除以10,并且模型训练高达60×104次迭代。
        8.我们使用的权重衰减为0.0001,动量为0.9。
        9.根据[16]的实践,我们不使用Dropout[13]。

    2.测试阶段的配置:

    1.为了比较学习我们采用标准的10-crop测试
    2.对于最好的结果,我们采用如[40, 12]中的全卷积形式,并在多尺度上对分数进行平均(图像归一化,短边位于{224, 256, 384, 480, 640}中)。

    3.模型测试结果:

    1.我们首先评估18层和34层的简单网络。再评估18层和34层的ResNet网络。

    下面是在ImageNet上训练。细曲线表示训练误差,粗曲线表示中心裁剪图像的验证误差。左:18层和34层的简单网络。右:18层和34层的ResNet。在本图中,残差网络与对应的简单网络相比没有额外的参数。

    该测试结果分析:

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

    2.评估18层和34层残差网络(ResNets)

    我们对所有快捷连接都使用恒等映射和零填充以增加维度(选项A)。所以与对应的简单网络相比,它们没有额外的参数。我们看到三个主要的观察结果。
           1.首先,残留学习的情况变了——34层ResNet比18层ResNet更好(2.8%)。更重要的是,34层ResNet显示出较低的训练误差,并且可以泛化到验证数据。这表明在这种情况下,退化问题得到了很好的解决,我们从增加的深度中设法获得了准确性收益。
           2.与对应的简单网络相比,由于成功的减少了训练误差,34层ResNet降低了3.5%的top-1错误率。这种比较证实了在极深系统中残差学习的有效性。
           3.我们还注意到18层的简单/残差网络同样地准确(表2),但18层ResNet收敛更快(图4右和左)。当网络“不过度深”时(18层),目前的SGD求解器仍能在简单网络中找到好的解。在这种情况下,ResNet通过在早期提供更快的收敛简便了优化。

    3.恒等快捷连接和投影快捷连接的效果评估:

    我们已经表明没有参数,恒等快捷连接有助于训练。接下来我们调查投影快捷连接(方程2)。在表3中我们比较了三个选项:

    (A) 零填充快捷连接用来增加维度,所有的快捷连接是没有参数的(与表2和图4右相同);
    (B) 投影快捷连接用来增加维度,其它的快捷连接是恒等的;
    (C)所有的快捷连接都是投影。

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

    4.更深的Residual结构(改为了瓶颈结构)的探究:

    考虑到我们能承受的模型的训练时间,我们将原来的residual结构改为了瓶颈结构。对于每个残差函数F,我们使用3层堆叠而不是2层(图5)。三层是1×1,3×3和1×1卷积,其中1×1层负责减小然后增加(恢复)维度,使3×3层成为具有较小输入/输出维度的瓶颈。

    无参数恒等快捷连接对于瓶颈架构尤为重要。如果图5(右)中的恒等快捷连接被投影替换,则可以显示出时间复杂度和模型大小加倍,因为快捷连接是连接到两个高维端。因此,恒等快捷连接可以为瓶颈设计得到更有效的模型。

    更改后的ResNet结构:

           1.50层ResNet:我们用3层瓶颈块替换34层网络中的每一个2层块,得到了一个50层ResNet(表1)。我们使用选项B来增加维度。该模型有38亿FLOP
           2.101层和152层ResNet:我们通过使用更多的3层瓶颈块来构建101层和152层ResNets(表1)。值得注意的是,尽管深度显著增加,但152层ResNet(113亿FLOP)仍然比VGG-16/19网络(153/196亿FLOP)具有更低的复杂度。

    测试结果:

    50/101/152层ResNet比34层ResNet的准确性要高得多(表3和4)。我们没有观察到退化问题,因此可以从显著增加的深度中获得显著的准确性收益。所有评估指标都能证明深度的收益(表3和表4)。

    5.与最先进的方法比较

    在表4中,我们与以前最好的单一模型结果进行比较。我们基准的34层ResNet已经取得了非常有竞争力的准确性。我们的152层ResNet具有单模型4.49%的top-5错误率。这种单一模型的结果胜过以前的所有综合结果(表5)。我们结合了六种不同深度的模型,形成一个集合(在提交时仅有两个152层)。这在测试集上得到了3.5%的top-5错误率(表5)。这次提交在2015年ILSVRC中荣获了第一名。
    单模型结果:上一张图
    组合模型结果:

     

    6.Cifa10数据测试

    这里,我们的焦点在于极深网络的行为,但不是推动最先进的结果,所以我们有意使用如下的简单架构。
    简单/残差架构遵循图3(中/右)的形式。网络输入是32×32的图像,每个像素减去均值。第一层是3×3卷积。然后我们在大小为{32,16,8}的特征图上分别使用了带有3×3卷积的6n个堆叠层,每个特征图大小使用2n层。滤波器数量分别为{16,32,64}。下采样由步长为2的卷积进行。网络以全局平均池化,一个10维全连接层和softmax作为结束。共有6n+2个堆叠的加权层。下表总结了这个架构:

    当使用快捷连接时,它们连接到成对的3×3卷积层上(共3n个快捷连接)。在这个数据集上,我们在所有案例中都使用恒等快捷连接(即选项A),因此我们的残差模型与对应的简单模型具有完全相同的深度,宽度和参数数量。

    模型配置:

    1.我们使用的权重衰减为0.0001和动量为0.9,并采用[12]和BN[16]中的权重初始化,但没有使用丢弃。
    2.这些模型在两个GPU上进行训练,批处理大小为128。
    3.我们开始使用的学习率为0.1,在32k次和48k次迭代后学习率除以10,并在64k次迭代后终止训练,这是由45k/5k的训练/验证集分割决定的。
    4.我们按照[24]中的简单数据增强进行训练:每边填充4个像素,并从填充图像或其水平翻转图像中随机采样32×32的裁剪图像。
    5.对于测试,我们只评估原始32×32图像的单一视图。

    测试结果:
    我们比较了n=3,5,7,9,得到了20层,32层,44层和56层的网络。图6(左)显示了简单网络的行为。深度简单网络经历了深度增加,随着深度增加表现出了更高的训练误差。这种现象类似于ImageNet中(图4,左)和MNIST中(请看[41])的现象,表明这种优化困难是一个基本的问题。(中)显示了ResNet的行为。与ImageNet的情况类似(图4,右),我们的ResNet设法克服优化困难并随着深度的增加展示了准确性收益。

    下图:在CIFAR-10上训练。虚线表示训练误差,粗线表示测试误差。左:简单网络。简单的110层网络错误率超过60%没有展示。中间:ResNet。右:110层ResNet和1202层ResNet。

    进一步的测试:

    我们进一步探索了n=18得到了110层的ResNet。在这种情况下,我们发现0.1的初始学习率对于收敛来说太大了。因此我们使用0.01的学习率开始训练,直到训练误差低于80%(大约400次迭代),然后学习率变回到0.1并继续训练。学习过程的剩余部分与前面做的一样。这个110层网络收敛的很好(图6,中)。它与其它的深且窄的网络例如FitNet[34]和Highway41相比有更少的参数,但结果仍在目前最好的结果之间(6.43%,表6)。

    在CIFAR-10测试集上的分类误差。所有的方法都使用了数据增强。对于ResNet-110,像论文[42]中那样,我们运行了5次并展示了“最好的(mean±std)”。

    超过1000层的探索:

    我们探索超过1000层的过深的模型。我们设置n=200,得到了1202层的网络,其训练如上所述。我们的方法显示没有优化困难,这个103层网络能够实现训练误差<0.1%(图6,右图)。其测试误差仍然很好(7.93%,表6)。
    这个1202层网络的测试结果比我们的110层网络的测试结果更差,虽然两者都具有类似的训练误差。

    原因分析:
    我们认为这是因为过拟合。对于这种小型数据集,1202层网络可能是不必要的大(19.4M)。在这个数据集应用强大的正则化,如maxout[9]或者dropout[13]来获得最佳结果([9,25,24,34])。

    7.在PASCAL和MS COCO上的目标检测

     

     

    欢迎批评指正,讨论学习~
    最近在github放了两份分类的代码,分别是用Tensorflow和Pytorch实现的,主要用于深度学习入门,学习Tensorflow和Pytorch搭建网络基本的操作。打算将各网络实现一下放入这两份代码中,有兴趣可以看一看,期待和大家一起维护更新。
    代码地址:
    Tensorflow实现分类网络
    Pytorch实现分类网络

     

     

     

     

     

     

     

     

    展开全文
  • ResNet 论文研读笔记

    2018-12-15 22:02:00
    原文链接 摘要 深度神经网络很难去训练,本文提出了一个残差学习框架来简化那些非常深的网络的训练,该框架使得层能根据其输入来学习残差函数而非原始函数。本文提出证据表明,这些残差网络的优化更简单,而且通过...

    Deep Residual Learning for Image Recognition

    原文链接

    摘要

    深度神经网络很难去训练,本文提出了一个残差学习框架来简化那些非常深的网络的训练,该框架使得层能根据其输入来学习残差函数而非原始函数。本文提出证据表明,这些残差网络的优化更简单,而且通过增加深度来获得更高的准确率

    引言

    深度网络很好的将一个端到端的多层模型中的低/中/高级特征以及分类器整合起来,特征的等级可以通过所堆叠层的数量来丰富。有结果显示,模型的深度发挥着至关重要的作用

    在深度的重要性的驱使下,出现了一个新的问题:训练一个更好的网络是否和堆叠更多的层一样简单呢?解决这一问题的障碍便是困扰人们很久的梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。当深层网络能够收敛时,一个退化问题又出现了:随着网络深度的增加,准确率达到饱和(不足为奇)然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率

    深层"plain"网络的在CIFAR-10上的错误率
    1503464-20181215215634811-1093988336.png

    退化的出现(训练准确率)表明了并非所有的系统都是很容易优化的。本文提出了一种深度残差学习框架来解决这个退化问题。方法是让这些层来拟合残差映射,而不是让每一个堆叠的层直接来拟合所需的底层映射。假设所需的底层映射为\(H(x)\),让堆叠的非线性层来拟合另一个映射:\(F(x):=H(x)−x\)。 因此原来的映射转化为:\(F(x)+x\),研究者推断残差映射比原始未参考的映射(unreferenced mapping)更容易优化,在极端的情况下,如果某个恒等映射是最优的,那么将残差变为0比用非线性层的堆叠来拟合恒等映射更简单

    公式 F(x)+x 可以通过前馈神经网络的“shortcut连接”来实现,Shortcut连接就是跳过一个或者多个层。shortcut 连接只是简单的执行恒等映射,再将它们的输出和堆叠层的输出叠加在一起。恒等的shortcut连接并不增加额外的参数和计算复杂度。完整的网络仍然能通过端到端的SGD反向传播进行训练,并且能够简单的通过公共库(例如,Caffe)来实现而无需修改求解器

    一个残差网络构建块(Fig.2)
    1503464-20181215215836100-333602106.png

    本文表明

    1. 极深的残差网络是很容易优化的,但是对应的“plain”网络(仅是堆叠了层)在深度增加时却出现了更高的错误率
    2. 深度残差网络能够轻易的由增加层来提高准确率,并且结果也大大优于以前的网络

    深度残差学习

    残差学习

    \(H(x)\)看作一个由部分堆叠的层来拟合的底层映射,其中\(x\)是这些层的输入。假设多个非线性层能够逼近复杂的函数,这就等价于这些层能够逼近复杂的残差函数,例如,\(H(x) - x\)。我们明确地让这些层来估计一个残差函数:\(F(x):=H(x)−x\)而不是\(H(x)\)。因此原始函数变成了:\(F(x)+x\)。尽管这两个形式应该都能够逼近所需的函数,但是前者更易学习。使用这种表达方式的原因是之前提到的退化问题,使用残差学习的方式重新表达后,如果恒等映射是最优的,那么求解器将驱使多个非线性层的权重趋向于零来逼近恒等映射。如果最优函数更趋近于恒等映射而不是0映射,那么对于求解器来说寻找关于恒等映射的扰动比学习一个新的函数要容易的多,实验表明,学习到的残差函数通常只有很小的响应,说明了恒等映射提供了合理的预处理

    通过捷径进行identity mapping

    在堆叠层上采取残差学习算法,一个构件块如上图(Fig.2)所示,其定义为(Eq.1)
    \[ y = F(x, {W_i}) + x \]
    其中\(x\)\(y\)分别表示层的输入和输出。函数\(F(x, {Wi})\)代表着学到的残差映射,该shortcut连接没有增加额外的参数和计算复杂度

    在Eq.1中,\(x\)\(F\)的维度必须相同,如果不同,可以通过shortcut连接执行一个线性映射\(W_s\) 来匹配两者的维度(Eq.2)
    \[ y = F({x, {W_i}}) + W_sx \]
    实验表明,恒等映射已足够解决退化问题,并且是经济的,因此\(W_s\)只是用来解决维度不匹配的问题

    不仅是对于全连接层,对于卷积层残差连接也是同样适用的。函数\(F(x, {W_i})\)可以表示多个卷积层,在两个特征图的通道之间执行元素级的加法

    网络架构

    VGG、普通网络与残差网络的配置对比
    1503464-20181215215916082-1171961353.png

    详细架构
    1503464-20181215215929708-1488981016.png

    普通网络

    卷积层主要为3*3的滤波器,并遵循以下两点要求

    1. 输出特征尺寸相同的层含有相同数量的滤波器
    2. 如果特征尺寸减半,则滤波器的数量增加一倍来保证每层的时间复杂度相同

    直接通过stride为2的卷积层来进行下采样。在网络的最后是一个全局的平均pooling层和一个1000 类的包含softmax的全连接层。加权层的层数为34

    残差网络

    在普通网络的基础上,插入shortcut连接,将网络变成了对应的残差版本。如果输入和输出的维度相同时,可以直接使用恒等shortcuts(Eq.1)(残差连接实线部分),当维度增加时(残差连接虚线部分),考虑两个选项

    1. shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数
    2. 使用Eq.2的映射shortcut来使维度保持一致(通过1*1的卷积)

    对于这两个选项,当shortcut跨越两种尺寸的特征图时,均使用stride为2的卷积

    实验

    普通网络
    实验表明34层的网络比18层的网络具有更高的验证错误率,比较了训练过程中的训练及验证错误率之后,观测到了明显的退化现象----在整个训练过程中34 层的网络具有更高的训练错误率,即使18层网络的解空间为34层解空间的一个子空间

    残差网络
    实验观察到以下三点

    1. 34层的ResNet比18层ResNet的结果更优。更重要的是,34 层的ResNet在训练集和验证集上均展现出了更低的错误率。这表明了这种设置可以很好的解决退化问题,并且可以由增加的深度来提高准确率
    2. 与对应的普通网络相比,34层的ResNet在top-1 错误率上降低了3.5%,这得益于训练错误率的降低,也验证了在极深的网络中残差学习的有效性
    3. 18层的普通网络和残差网络的准确率很接近,但是ResNet 的收敛速度要快得多

    错误率比较
    1503464-20181215215959159-2104193982.png

    如果网络"并不是特别深"(如18层),现有的SGD能够很好的对普通网络进行求解,而ResNet能够使优化得到更快的收敛

    恒等 vs 映射 Shortcuts

    已经验证了无参数的恒等shortcuts是有助于训练的。接下来研究映射shortcut(Eq.2),比较了三种选项

    1. 对增加的维度使用0填充,所有的shortcuts是无参数的
    2. 对增加的维度使用映射shortcuts,其它使用恒等shortcuts
    3. 所有的都是映射shortcuts

    实验表明三种选项的模型都比普通模型要好,2略好于1,研究者认为这是因为1中的0填充并没有进行残差学习。3略好于2,研究者将其归结于更多的(13个)映射shortcuts所引入的参数,实验结果也表明映射shortcuts对于解决退化问题并不是必需的,因此为了减少复杂度和模型尺寸,在之下的研究中并不使用模型3。恒等shortcuts因其无额外复杂度而对以下介绍的瓶颈结构尤为重要

    深度瓶颈结构

    将构建块修改为瓶颈设计。对于每一个残差函数\(F\),使用了三个叠加层而不是两个,这三层分别是1*1、3*3 和1*1 的卷积,1*1 的层主要负责减少然后增加(恢复)维度,剩下的3*3的层来减少输入和输出的维度

    构建块(Fig.5),这两种设计具有相似的时间复杂度
    1503464-20181215220019261-329015051.png

    无参数的恒等shortcuts对于瓶颈结构尤为重要。如果使用映射shortcuts来替代Fig.5(右)中的恒等shortcuts,将会发现时间复杂度和模型尺寸都会增加一倍,因为shortcut连接了两个高维端,所以恒等shortcuts对于瓶颈设计是更加有效的

    层响应分析

    在CIFAR-10上层响应的标准方差(std)
    1503464-20181215220058122-1503938552.png

    以标准方差来展示层响应,响应是每一个3*3卷积层的BN之后、非线性层(ReLU/addition)之前的输出,实验表明ResNets的响应比它对应的普通网络的响应要小,即残差函数比非残差函数更接近于0,同时越深的ResNet的响应幅度越小。当使用越多层时,ResNets中单个层对信号的改变越少

    总结

    网络随着深度的增加,训练误差和测试误差非但没有降低,反而变大了,然而这种问题的出现并不是因为过拟合,该现象被称为退化问题(degradation problem),本文即是为了解决深度神经网络中产生的退化问题

    \(x\)作为我们的输入,期望的输出是\(H(x)\),如果我们直接把输入\(x\)传到输出作为初始结果,那么我们需要学习的目标就变成了\(F(X) = H(x) - x\)。Resnet相当于将学习目标改变了,不再是学习一个完整的输出\(H(x)\),而是\(H(x)-x\),即残差,进行这样的改变不会计算量和参数,却能使网络更容易优化。然后,ResNet就是在原来网络的基础上,每隔2层(或者3层,或者更多)的输出\(F(x)\)上再加上之前的输入\(x\)。这样做,整个网络就可以用SGD方法进行端对端的训练,用目前流行的深度学习库(caffe等)也可以很容易地实现

    本文提出的深度残差学习架构,其中的构建块为
    1503464-20181215220115873-1134690967.png

    该结构的思想就是:如果增加的层能够改善恒等映射,更深的网络应该不会比对应的浅层网络的训练误差大。如果恒等映射是最优的,训练会驱使增加的非线性层的权重趋于0以靠近恒等映射

    这种网络的优点有

    1. 更容易优化
    2. 网络越深,准确率越高

    参考文献

    [论文阅读] Deep Residual Learning for Image Recognition(ResNet)
    Deep Residual Learning for Image Recognition(残差网络)

    推荐阅读
    对ResNet本质的一些思考

    转载于:https://www.cnblogs.com/zhhfan/p/10124903.html

    展开全文
  • 首先给出最具有权威性的论文原文。 论文地址:文章目录1、ResNet的亮点2、ResNet网络结构解析3、pytorch利用ResNet进行迁移学习 1、ResNet的亮点 1.1、现在的网络层数越来越多,很有可能出现梯度消失和梯度爆炸的...

    正好课程作业需要用到迁移学习,就顺便学习了很厉害的ResNet网络,是真的厉害呀。

    首先给出最具有权威性的论文原文。
    论文地址:Deep Residual Learning for Image Recognition

    1、ResNet的亮点

    1.1、现在的网络层数越来越多,很有可能出现梯度消失和梯度爆炸的问题-----resnet利用了BN(Batch Normalization)方式
    1.2、如果只采用扁平的plain结构的网络,层数过高反而精度越低这类的退化问题----resnet采用了residual(残差结构)的网络结构
    1.3、模型层数越高,参数越多,计算复杂度越大,优化越困难-----采用residual网络结构能够在不增加参数的情况下更好拟合

    2、ResNet网络结构解析

    先放出ResNet的网络结构(论文中给出的是34layers):
    在这里插入图片描述
    我们先来看看为什么要使用残差网络,在传统的网络模型中,都是靠着不同的层数堆叠,但这种方式当层数很深时,会增大训练误差,因此会造成不好优化,论文中给出了传统模型在两个数据集上的结果。
    在这里插入图片描述
    看到56-layer的网络的误差比20-ayer的误差还要大,所以当层数比较深时,plain网络并不能很好拟合数据,因此提出了新型的残差网络。作者又做了实验来验证网络能够解决退化问题。如下图:
    在这里插入图片描述
    左侧是扁平网络,34层的错误率比18层的要高,右侧是残差网络,34层的错误率比18层的低了,所以深层的残差网络表现更好。


    残差网络的组成结构分别是residual representations(相当于主干short connection(相当于捷径 组成,我们来看看核心组成成分:
    在这里插入图片描述
    在残差网络中,不是让网络直接拟合原先的映射,而是拟合残差映射。 假设原始的映射为H(x)H(x),残差网络拟合的映射为:F(x)=H(x)xF(x):=H(x)-x。其中F(x)F(x)去拟合残差会比直接利用输入去拟合输出拟合能力更好,并且运算也会比较简单。论文中给出的结论是:

    1. deep residual nets are easy to optimize 【更容易优化】
    2. deep residual nets can easily enjoy accuracy gains from greatly increased depth【能够在深层网络得到更好地精度】

    接下来再来看看具体的残差结构,下图是论文给出的两种残差结构:
    在这里插入图片描述
    为什么深层和浅层用的不一样呢,如果是深层网络,就要尽可能减少参数量。如果同样假设上面左右两幅图输入输出的维度均为256,那么左侧的参数则为33256256+33256256 ≈118w,而右侧的参数为2561164+336464+1164*256 ≈7w,所以深层网络用右侧模型更好!可以看到右侧是实线结构,所以输入和输出的维度一定要一致!,因为在输出节点,残差结构F(X)xF(X)要和输入x相加


    既然上面我们提到了输入和输出的维度一定要一致,那如果不一致呢,此时需要的就是虚线结构。
    我们先来看看论文中不同模型所对应的不同网络结构,如下图所示:
    在这里插入图片描述
    可以看到对于34-layer和50-layer,第二层的输出分别是64和256,而第三层的输入均是128,和上一层的输出不匹配,所以要进行相应的升维和降维操作,该操作由1*1的卷积核来实现。
    对于低层的网络,根据下图实现维度不匹配问题,通过该层,可以将64维的数据升到128维。
    在这里插入图片描述
    同理,对于深层网络,利用下图的网络进行升维操作。
    在这里插入图片描述
    到此,虚线结构和实线结构的网络已经了解了长什么样子,再看看resnet网络和其他网络的区别。
    在这里插入图片描述
    该图也是以34-layer为例。我们可以发现resne和plain扁平网络对比,也就是增加了shortcut connection结构,而旁边的shortcut有实现和虚线之分,那上面的数字是什么意思呢,回到上面的不同网络比较的表格,可以看到34-layer的层数分别是【3,4,6,3】啦,所以是指该种网络在有多少个。最下面是表现也很优秀的VGG-19网络,但是可以计算一下,VGG所需要的参数非常多,而ResNet的参数确实很少的。所以ResNet是在保证精度的同时还降低了算法复杂度。


    再看看作者在后文还提出了变态的resnet1202层网络,如下图:
    在这里插入图片描述
    在最后一张图还是发现,resnet-1202的错误率比resnet-110高一点,但从前两种图还是可以发现,随着ResNet网络的层数越深,得到的效果越好,更能验证残差网络解决了传统模型存在的退化问题。

    3、pytorch利用ResNet进行迁移学习

    我进行迁移学习的数据集是CIFAR10,也可以下载其他的数据集,用了TensorFlow官方的花卉数据集试了下,也不错。附上GitHub链接如下。
    https://github.com/njau-fyl/Classfication-ResNet

    展开全文
  • Deep Residual Learning for Image Recognition--ResNet 原文  点击打开链接 “ease the training of networks that are substantially deeper than those used previously” 核心思想:提高更深层网络的训练...
  • ResNet网络复现

    2021-04-20 13:46:12
    阅读ResNet论文原文 搜集学习资源:视频讲解-博客资源 熟悉ResNet网络结构 代码复现,清楚网络结构中层与层之间的操作 ResNet论文 原论文:2015-Deep Residual Learning for Image Recognition 2016-Identity ...
  • 原文链接:https://arxiv.org/pdf/1602.07261.pdf 文章目录0 摘要 0 摘要
  • 论文原文:https://arxiv.org/pdf/1512.03385.pdf 一、背景简介 深度学习中的基础网络的发展从ALexNet(5个卷积层)、VGG(19个卷积层)到GoogLeNet(22个卷积层),网络的结构在不断变深。这是因为更深的网络可以...
  • 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
  • 论文:Deep Residual Learning for Image Recognition论文原文:https://arxiv.org/abs/1512.03385论文翻译:http://www.jianshu.com/p/f71ba99157c7核心技术: 1.研究了普通网络在深度较深的时候的表现,发现反倒...
  • ResNet

    千次阅读 2018-12-05 21:06:15
    文章目录论文信息ResNet 设计动机 论文信息 原文地址: Deep Residual Learning for Image Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 成就:模型赢得了ImageNet检测任务、ImageNet定位...
  • 创建各版本的ResNet模型,ResNet18,ResNet34,ResNet50,ResNet101,ResNet152 原文地址: https://arxiv.org/pdf/1512.03385.pdf 论文就不解读了,大部分解读都是翻译,看的似懂非懂,自己搞懂就行了。最近想着...
  • AlexNet AlexNet是在IMAGENET比赛中第一个获奖的CNN结构。 VGGNet VGGNet和AlexNet实际上都是对最传统的...结构如下: (示意图来自于cs231n的课件,有一点小问题,vgg16应该是3个conv层后接pool) ResNet 论文原文...
  • 英文原文:《Deep Residual learning for Image Recognition》 中文翻译:用于图像识别的深度残差学习 何恺明 摘要 更深的神经网络更难以训练。我们提出了一个残差学习框架来减轻网络的训练,这些网络比以前使用的...
  • Densely Connected Convolutional Networks DenseNet模型,它的基本思路与ResNet一致,但是它...这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。
  • 文章目录原文地址论文阅读方法初识(Abstract & Introduction & Conclusion)相知(Body)2. Related Work3. Deep Residual Learning3.1 Residual Learning3.2 Identity Mapping by Shortcut3.3 Network ...
  • 原文如下图,它的四个作者都是华人,在一些非常有名的深度学习文章中都能看到他们的名字。ResNet有这么几个亮点:超深的网络结构(突破1000层)、提出了残差模块,使用Batch Normalization(一种标准化处理)加速训练...
  • 文章目录1.参考资料 ...RetinaNet论文原文:https://arxiv.org/pdf/1708.02002.pdf RetinaNet论文最全解析!一文读懂!:https://blog.csdn.net/weixin_40400177/article/details/103449280 Retina
  • ResNet核心思想的理解

    千次阅读 2019-05-04 14:52:23
    3.论文原文 分析摘录: 我们作这样一个假设:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的...
  • ResNet原理和实现

    2019-11-20 10:33:51
    原文链接:http://www.chenjianqu.com/show-59.html ...本文是论文Deep Residual Learning for Image Recognition.Kaiming He,Xiangyu Zhang,Shaoqing Ren,Jian Sun,etc的阅读笔记,最后给出Keras实现...
  • ResNet50的实现【Keras】

    千次阅读 2019-07-19 15:57:12
    网上分析 resnet 的帖子和博客有很多,但是我还是建议大家去看一下论文原文,一定会有不一样的收获。 按照原文的意思,将underlying mapping H(x) , 表示为 F(x )+ x 的这种形式; 但是使用加法的前提就是 F(x...
  • 这篇教程我们来实现Kaiming He大神提出的ResNet网络,并在CIFAR-10数据及上进行测试,我的测试结果完全复现了论文中的精度。本文中的参数设置、数据增强等内容均遵循原文。 网络搭建 ResNet原文: Deep Residual ...
  • CV 经典主干网络 (Backbone) 系列: ResNet家族 作者:Kaiming He 等 发表时间:2015 Paper 原文: Deep Residual Learning for Image Recognition 该篇是 CV 经典主干网络 ...ResNet家族:主要介绍原版(凯明大神论文
  • 论文地址: resnet 论文原文地址 文献翻译地址:https://blog.csdn.net/Quincuntial/article/details/77263562?locationNum=6 网络深度为何重要? 因为CNN能够提取low/mid/high-level的特征,网络的层数越多,...
  •   ResNet(Residual Neural Network)由前微软研究院的 Kaiming He 等4名华人提出(有兴趣的可以点击这里,查看论文原文),通过使用 Residual Blocks 成功训练152层深的神经网络,在 ILSVRC 2015 比赛中获得了...
  • 论文题目及原文:Deep Residual Learning for Image Recognition (ResNet) 参考译文:https://www.jianshu.com/p/f71ba99157c7
  • 【原创】对残差网络ResNet的理解

    千次阅读 2018-04-27 17:16:50
    我没有看原文,近期准备好好看一下:Deep Residual Learning for Image Recognition附上论文详细解读对ResNet的理解主要来自吴恩达的课件、CNN入门讲解:什么是残差网络Resnet(视频)以及CSDN上相关资料。...
  • 我没有看原文,近期准备好好看一下:Deep Residual Learning for Image Recognition ... 附上论文详细解读 ...对ResNet的理解主要来自吴恩达的课件、CNN入门讲解:什么是残差网络Resnet(视频)以及CSDN上相关资料
  • 【MXNet】(二十五):实现ResNet

    千次阅读 2019-02-20 15:36:17
    论文原文《Deep residual learning for image recognition》。 from mxnet import gluon, init, nd from mxnet.gluon import nn class Residual(nn.Block): def __init__(self, num_channels, use_1x1conv=False...
  • 论文原文 论文翻译 在AlexNet[1] 取得 LSVRC2012分类竞赛冠军之后,引爆了深度学习网络。 在何凯明在2015年的深度残差网络(Deep Residual Network,简写为ResNet)[4]可以说是过去几年中计算机视觉和深度学习领域最...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

resnet论文原文