重读经典:《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…

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

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

动手学无人驾驶(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 相关…

给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

lower_bound算法返回第一个大于等于给定值所在的位置。设置两个指针start和last&#xff0c;其中start指向数组的起始位置&#xff0c;last指向数组末尾位置之后的位置。当start和last指向相同位置时循环结束。mid指向[start,last)区间的中间位置&#xff0c;当中间位置元素值大…

详解IMU标定经典论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments

本文介绍一篇 关于IMU 标定的经典论文&#xff0c;论文收录于 ICRA14&#xff0c;在论文中作者介绍了如何不适用外部设备标定 IMU 加速度和角速度偏差、尺度系数、轴偏移参数。 论文链接&#xff1a;https://readpaper.com/paper/2021503353、https://readpaper.com/paper/221…

重读经典:《Momentum Contrast for Unsupervised Visual Representation Learning》

MoCo 论文逐段精读【论文精读】这次论文精读李沐博士继续邀请了亚马逊计算机视觉专家朱毅博士来精读 Momentum Contrast&#xff08;MoCo)&#xff0c;强烈推荐大家去看本次的论文精读视频。朱毅博士和上次一样讲解地非常详细&#xff0c;几乎是逐词逐句地讲解&#xff0c;在讲…

【HRBUST - 1623】Relation(思维模拟,拆解字符串)

题干&#xff1a; 一天&#xff0c;ikki在看书的时候发现书上有个类似于家谱状的插图&#xff0c;突然ikki想到了一个有趣的现象&#xff1a;有时候用某个人一连串 的关系描述另一个人的时候&#xff0c;最后可能还是他本身。例如&#xff1a;小明的爸爸的爸爸和小明的爷爷是同…

一步步编写操作系统 67 系统调用的实现1-2 68

接上文&#xff1a; 系统调用的子功能要用eax寄存器来指定&#xff0c;所以咱们要看看有哪些系统调用啦&#xff0c;在linux系统中&#xff0c;系统调用是定义在/usr/include/asm/unistd.h文件中&#xff0c;该文件只是个统一的入口&#xff0c;指向了32位和64位两种版本。在a…

【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)

题干&#xff1a; Acesrc is a famous tourist at Nanjing University second to none. During this summer holiday, he, along with Zhang and Liu, is going to travel to Hong Kong. There are nnspots in Hong Kong, and n−1n−1 bidirectional sightseeing bus routes …

一步步编写操作系统 69 汇编语言和c语言共同协作 70

由于有了上一节的铺垫&#xff0c;本节的内容相对较少&#xff0c;这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用。 会两种不同语言的人&#xff0c;只是掌握了同一件事物的两种表达方式。人在学习一种新语言时&#xff0c;潜意识里是建立了语言符号与事物形象…

一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

一直以来&#xff0c;我们在往屏幕上输出文本时&#xff0c;要么利用bios中断&#xff0c;要么利用系统调用&#xff0c;这些都是依赖别人的方法。咱们还用过一个稍微有点独立的方法&#xff0c;就是直接写显存&#xff0c;但这貌似又没什么含量。如今我们要写一个打印函数了&a…

【CodeForces - 208C 】Police Station(单源最短路条数,起点终点建图,枚举顶点)

题干&#xff1a; The Berland road network consists of n cities and of m bidirectional roads. The cities are numbered from 1 to n, where the main capital city has number n, and the culture capital — number 1. The road network is set up so that it is possi…