重读经典:《Deep Residual Learning for Image Recognition》

ResNet论文逐段精读【论文精读】

这是李沐博士论文精读的第二篇论文,这次精读的论文是ResNetResNetCVPR2016 的最佳论文,目前谷歌学术显示其被引用数已经达到了90000+。

ResNet论文链接为:https://arxiv.org/abs/1512.03385。


1.第一遍

首先是论文标题,论文标题中文意思是:深度残差学习的图像识别。论文标题指出了关键词:Residual Learning,残差是数理统计中常用到的一个词。

下面是论文的作者,本篇论文作者全部为中国学者,这四个人现在都很有名了。一作也是 CVPR 2009 的最佳论文获得者,目前在Facebook AI Research任研究科学家;二作、三作当时是微软亚洲研究院的实习生,目前二作在旷视工作,三作在蔚来工作,通信作者目前是旷视研究院院长。

在这里插入图片描述
下面是论文摘要,摘要总共11句话。

  • 第1句话就提出了论文要解决的问题,更深的神经网络很难训练
  • 第2、3句介绍了论文使用的方法,提出了一个残差学习框架使深的神经网络更容易训练, 网络中的层对层输入的残差函数进行学习。
  • 4-7句为在ImageNet上的比赛结果,论文设计的152层网络取得了3.57%的错误率,获得了比赛第一名。
  • 第8句,作者在CIFAR-10 数据集上进行了100层和1000层网络的实验分析。
  • 9-11句,其它比赛结果,在ILSVRCCOCO 2015比赛上获得了ImageNet检测任务,定位任务,COCO检测和分割任务的第一名。

在这里插入图片描述

由于 CVPR2016 要求提交论文正文在8页以内,从摘要可以看出,作者做的实验是比较多的,因此本篇论文没有结论部分(不建议大家学习)。

在读第一遍时,可以顺带看看论文中重要的图和表,如论文第一页中的图,可以看到更深的神经网络反而有更高的错误率,这也是作者要解决的问题。第一遍读完后,可以决定后面是否再读第二遍论文,鉴于本篇论文的实验结果如此厉害,因此我们进行第二遍阅读。


2.第二遍

首先是Introduction部分,总共9段。第一段介绍故事背景,第二段引出第一个问题:堆叠更多的层数以后网络是否学习效果更好?但是堆叠更多的层后往往会遇到梯度爆炸、梯度消失问题,会从一开始就阻止收敛。好在这个问题可以通过归一化初始化或中间层归一化来解决。第三段介绍了另一个问题:当网络开始收敛时,往往会出现退化现象。随着网络深度的增加,准确率趋近饱和,然后迅速下降。意外的是,这不是由于过拟合造成的,更深的模型反而会有更高的训练误差(如图1所示)。
在这里插入图片描述

第4-6段,为了解决深度学习的退化问题,作者提出了深度残差学习框架,让网络层去拟合残差映射。如果我们想要得到的映射为 H(x)\mathcal{H}(\mathbf{x})H(x),则我们让添加的非线性网络层去拟合残差映射 F(x):=H(x)−x\mathcal{F}(\mathbf{x}):=\mathcal{H}(\mathbf{x})-\mathbf{x}F(x):=H(x)x,则原始的映射就可以写成 F(x)+x\mathcal{F}(\mathbf{x})+\mathbf{x}F(x)+x。残差映射的实现可以通过图2所示的连接块实现,跳跃连接是一个恒等映射,没有引入额外的参数和计算复杂度,整个网络很容易实现(最初ResNet是使用Caffe库实现的)。

后面三段是本文设计的网络在ImageNetCIFAR-10COCO数据集上的实验结果,大量的实验结果表明作者设计的残差学习框架的通用性,一方面不仅使得网络更容易优化,另一方面随着网络深度的增加,网络复杂度并没有明显增加,准确率却会提高很多。
在这里插入图片描述


下面是Deep Residual Learning部分。这里要理解各种ResNet是如何形成的。网络设计原则为:(i)对于相同的输出特征图尺寸,卷积层具有相同数量的卷积核;(ii)如果特征图尺寸减半,则卷积核数量加倍,以便保持每层的时间复杂度。通过步长为2的卷积层直接执行下采样。下面以ResNet-34为例进行介绍:

  • 首先是第一个卷积层,卷积核大小为 7×77\times77×7,卷积核个数为64,步长为2;
  • 然后是池化层3×33\times33×3 最大池化层,步长为2;
  • 接着是三个残差连接块,每一个连接块由两层卷积网络组成,卷积核大小为 3×33\times33×3,卷积核个数为64;
  • 然后是四个残差连接块,每一个连接块由两层卷积网络组成,卷积核大小为 3×33\times33×3,卷积核个数为128;
  • 接着是六个残差连接块,每一个连接块由两层卷积网络组成,卷积核大小为 3×33\times33×3,卷积核个数为256;
  • 然后是三个残差连接块,每一个连接块由两层卷积网络组成,卷积核大小为 3×33\times33×3,卷积核个数为512;

最后是全局平均池化层和具有softmax的1000维度的全连接层,这样整个网络包含 1+1+(3+4+6+3)×2=341+1+(3+4+6+3)\times2=341+1+(3+4+6+3)×2=34 个卷积层。尽管网络深度相比VGG-19要深了许多,但是FLOPs只是VGG-19的18%左右。

在这里插入图片描述
从表1可以看到, ResNet-18ResNet-34具有相同的残差连接块,每个连接块包含两个卷积层。而ResNet-50/101/152的每个连接块包含3个卷积层。作者把这种连接块称为bottleneck(如下图所示),这里主要使用了1×11\times11×1的卷积核,主要是用于匹配特征图维度以及从实践出发能够承担的起训练时间。(之前听过论文通信作者的一个报告,据说这个网络训练时间为一个月,具体一个月是指纯训练还是指训练+测试+调参就不太清楚了)。

在这里插入图片描述
然后是Implementation部分,作者是参考AlexNetVGG来进行训练。首先对图像的短边进行尺度扩大,扩大到 [256,480][256,480][256,480],然后和AlexNet一样,随机选择 224×224224\times224224×224 大小的图案。作者在这里使用到了batch normalization (BN) 技术;然后作者按照自己的另一篇文章来进行初始化并从零开始训练(如果对作者之前工作不了解的话还要再去看作者的文章了解如何对网络初始化,对第一次看到这篇文章的读者来说增加了阅读难度,不过作者可能也是因为受到篇幅影响,不想再过多介绍)。梯度下降使用了SGDmini-batch大小为256,总共进行了 60×10460\times10^460×104 次迭代(目前很少有这样的写法了,都是介绍训练了多少个epochs)。为了得到最好的实验结果,作者在多个尺度上进行评估,然后取平均分。
在这里插入图片描述


最后是Experiments部分,从论文中可以看到作者做了大量实验。首先是ImageNet Classification,首先评估了plain-18/34两个网络,从表2可以看到,plain-34网络比plain-18有更高的错误率,从图4左图也可以看到,在训练过程中,出现了退化现象,随着网络深度的增加,训练误差反而变大。作者在论文中解释到:退化现象应该不是梯度消失引起的,因为整个训练使用了BN来训练,也查验了反向传播时梯度幅值也是正常的,作者怀疑可能是因为更深的网络有着更低的收敛速度,影响着训练误差的减小,这个问题未来会进一步研究

接着是ResNet-18/34两个网络的评估,从表2和图4右图可以观察到三个现象:

  • 网络越深,训练误差反而越小,退化问题可以通过残差学习得到解决
  • plain-34网络相比,训练误差下降了3.5%,随着网络深度的不断增加,网络性能进一步提高;
  • palin-18/34网络相比,残差网络收敛速度更快;
    在这里插入图片描述

然后是恒等跳跃连接和投影跳跃连接的对比,可以看到三种连接都有助于提高网络性能,但是为了不增加网络结构的复杂度,作者这里主要选择恒等跳跃连接进行后续的实验。
在这里插入图片描述

下面是ResNet-50/101/152网络的评估,首先可以看到,尽管网络深度不断增加,但是复杂度依然低于VGG-16/19
随着网络深度的不断增加,错误率不断下降,同时在训练过程中也没有出现退化现象,在单个模型上取得了4.49%的错误率,在ImageNet2015比赛上,通过集成6个不同的模型,取得了3.57%的错误率(这是一个很了不起的结果,因为ImageNet数据集在人工标注时,可能就会有1%的错误率。)

在这里插入图片描述

最后总结一下,ResNet解决了网络训练退化的问题,找到了可以训练更深网络的办法,目前已经成为了深度学习中最重要的一种模型。


在视频的最后,李沐博士从梯度的角度对残差学习理论进行了阐述,我这里使用吴恩达老师的讲义来进一步补充。
在这里插入图片描述

假设有一个很大的神经网络,其输入为 X\mathbf{X}X,输出为 a[l]{a}^{[l]}a[l] 。给这个神经网络再添加残差块,输出为a[l+2]{a}^{[l+2]}a[l+2]。假设整个网络中都选用 ReLU 作为激活函数,因此输出的所有激活值都大于等于0。​a[l]{a}^{[l]}a[l]a[l+2]{a}^{[l+2]}a[l+2] 之间的函数关系为:

z[l+1]=W[l+1]a[l]+b[l+1]a[l+1]=g(z[l+1])z[l+2]=W[l+2]a[l+1]+b[l+2]a[l+2]=g(z[l+2]+a[l])z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]}\\ a^{[l+1]} = g(z^{[l+1]}) \\ z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]}\\ a^{[l+2]} = g(z^{[l+2]} + a^{[l]}) z[l+1]=W[l+1]a[l]+b[l+1]a[l+1]=g(z[l+1])z[l+2]=W[l+2]a[l+1]+b[l+2]a[l+2]=g(z[l+2]+a[l])

当发生梯度消失时,即残差块网络没有学到有用信息,W[l+2]≈0W^{[l+2]}\approx0W[l+2]0b[l+2]≈0b^{[l+2]}\approx0b[l+2]0,则有:
a[l+2]=g(a[l])=ReLU(a[l])=a[l]a^{[l+2]} = g(a^{[l]}) = ReLU(a^{[l]}) = a^{[l]} a[l+2]=g(a[l])=ReLU(a[l])=a[l]

因此,残差块的使用不会降低网络性能。而如果没有发生梯度消失时,训练得到的非线性关系会使得网络性能进一步提高。(关于残差网络的理论更深解释,也有很多相关的研究,感兴趣的读者可以查阅对应文献。)

[双语字幕]吴恩达深度学习deeplearning.ai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 1131F 】Asya And Kittens(并查集,思维)

题干: Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn and then put them into the cage. The cage consists of one row of nncells, enumerated with integers from 11 to nn from left to right. Adjacent…

关于Xldown和Xlup的用法(Excel VBA)

Xldown和xlup是一对组合,用于寻找某个区间中的非空单元格。 首先我们在单元格的前7行填入如下数据: A1单元格: A2单元格:2 A3单元格:3 A4单元格:4 A5单元格: A6单元格:6 A7单元格&am…

详解道路标记数据集 CeyMo: See More on Roads -- A Novel Benchmark Dataset for Road Marking Detection

本文介绍一个新的道路标记检测数据集,论文收录于 WACV2022。Ceymo数据集总共包含2887张图片,标注了11类共4706个道路标记实例,图片分辨率为 192010801920\times108019201080。其中,对于每一个道路标记实例,作者采用了三…

VBA类之一(初识类)

第一章 开头篇 ——认识类 Visual Basic是基于对象的编程(注:本文所有的代码和讨论将都以VB为基础模型,不过我会尽量使用一些大家在VBA中常见的例子来做说明的。),所以我们常见的一些东西其实都与类有关。不…

【HDU - 5009】Paint Pearls(dp,链表优化dp)

题干: Lee has a string of n pearls. In the beginning, all the pearls have no color. He plans to color the pearls to make it more fascinating. He drew his ideal pattern of the string on a paper and asks for your help. In each operation, he sele…

动手学无人驾驶(7):车道线检测

最近在研究视觉语义地图,需要进行车道线检测,发现这篇车道线检测论文效果蛮好的 (Ultra Fast Structure-aware Deep Lane Detection)。论文作者在知乎上已经介绍过了:https://zhuanlan.zhihu.com/p/157530787&#xff…

Coursera自动驾驶课程第16讲:LIDAR Sensing

在第15讲《Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation》 我们学习了自动驾驶定位中常用的两种传感器:IMU(惯性测量单元) 和GNSS(全球导航卫星系统)。 本讲我们将学习自动驾驶汽…

DB、ETL、DW、OLAP、DM、BI关系结构图

在此大概用口水话简单叙述一下他们几个概念: (1)DB/Database/数据库——这里一般指的就是OLTP数据库,在线事物数据库,用来支持生产的,比如超市的买卖系统。DB保留的是数据信息的最新状态,只有一…

Tarjan 算法 常用模板

可以求每个点属于第几个强连通分量&#xff1a;https://blog.csdn.net/dellaserss/article/details/8267192 int Tarjan(int u){int v;dfn[u]low[u]Index;stack[Top]u;Instack[u]1;for(int i0;i<G[u].size();i){vG[u][i];if(!dfn[v]){Tarjan(v);low[u]min(low[u],low[v]);}…

【HDU - 5012】Dice(模拟,bfs)

题干&#xff1a; There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a 1.a 2,a 3,a 4,a 5,a 6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A. S…

重读经典:《Generative Adversarial Nets》

GAN论文逐段精读【论文精读】这是李沐博士论文精读的第五篇论文&#xff0c;这次精读的论文是 GAN。目前谷歌学术显示其被引用数已经达到了37000。GAN 应该是机器学习过去五年上头条次数最多的工作&#xff0c;例如抖音里面生成人物卡通头像&#xff0c;人脸互换以及自动驾驶中…

一步步编写操作系统 62 函数调用约定

由于我们要将c语言和汇编语言结合编程啦&#xff0c;所以一定会存在汇编代码和c代码相互调用的问题&#xff0c;有些事情还是要提前交待给大家的&#xff0c;本节就是要给大家说下函数调用规约中的那些事儿。 函数调用约定是什么&#xff1f; 调用约定&#xff0c;calling co…

重读经典:《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》

ViT论文逐段精读【论文精读】这次李沐博士邀请了亚马逊计算机视觉专家朱毅博士来精读 Vision Transformer&#xff08;ViT&#xff09;&#xff0c;强烈推荐大家去看本次的论文精读视频。朱毅博士讲解的很详细&#xff0c;几乎是逐词逐句地讲解&#xff0c;在讲解时把 ViT 相关…

【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)

题干&#xff1a; 把26个字母分成19个辅音字母和7个元音字母&#xff0c;让你通过 将某些字母改为大写状态&#xff0c;使得字符串中连续的两个大小写状态不同的辅音字母组成的字母对数量最多&#xff0c;输出该状态下的字符串。注意输出的字符串中同一字母必须形态统一&#…

浅谈Mysql 表设计规范

本文首先探讨下数据库设计的三大范式&#xff0c;因为范式只是给出了数据库设计的原则&#xff0c;并没有告诉我们实际操作中应该怎样操作&#xff0c;应该注意什么&#xff0c;所以我们还会谈下实际工作中需要注意的具体操作问题。 三大范式 首先放出三大范式内容&#xff0c…

从零开始学视觉Transformer(1):Hello Vision Transformer

Vision Transformer打卡营分享一门很棒的 ViT 课程&#xff0c;课程详细介绍可以看这篇文章&#xff1a; 《Vision Transformer打卡营来啦&#xff01;朱欤博士带你从零玩转ViT爆款模型&#xff01;》

SQLServer中ISNULL、NULLIF和CONVERT函数

效率&#xff1a; UNION和UNION ALL关键字都是将两个结果集合并为一个&#xff0c;但这两者从使用和效率上来说都有所不同。 1、对重复结果的处理&#xff1a;UNION在进行表链接后会筛选掉重复的记录&#xff0c;Union All不会去除重复记录。 2、对排序的处理&#xff1a;Union…