【论文浅尝】Resnet:Deep Residual Learning for Image Recognition

ResNet论文地址


文章目录

  • 前言
  • 一、实验结果
  • 二、Introduction
  • 三、结构实现
  • 四、实验
  • 五、一点数学
  • 总结


前言

ResNet作为近几年来,CV工业界常用的backbone,其论文在近两个月突破了十万的citation。而在我初看这篇论文时,除了大概看懂网络架构以外,对于具体细节、为什么这么实现、数学原理等一概不通。今年寒假有闲,看到了李沐在B站发布的精读ResNet视频,才恍然大悟。本篇文章是关于该视频的笔记。


一、实验结果

结果1.png
左图显示了18和34层plain network的训练结果,34层的精度反而不如18层的精度,论文认为并不是因为参数过多导致过拟合,而是因为梯度消失或梯度爆炸导致网络没法训练出较好的结果,也符合论文中的第一句话

Deeper neural networks are more difficult to train.

这是他观察到的现象,也是这篇论文将要解决的问题。

右图是采用resnet之后的训练结果,深的神经网络比浅的训练结果要好。

二、Introduction

该部分用了几段式的写法。可以概括为扬-抑-(提出我们的办法)扬

深度神经网络在图像分类任务中取得重大突破,近来的研究表明其网络深度起着至关重要的作用,并且在ImageNet竞赛中的leading results往往采用很深的网络。(第一段)

那么是否更深的网络能学到更好的结果呢?一个伴随深度加大而来的问题是梯度消失/爆炸——正则的初始化(Xavier initialization)和BN解决了该问题,使网络能够在SGD优化器中收敛。(第二段)

尽管网络收敛了,但是深度越深效果却更差了,这并不是因为过拟合,而是因为深的网络导致了更大的训练误差。(第三段)

补充说明:overfitting是训练误差小,测试误差大;而此处加深了神经网络后,训练误差和测试误差都增大了。

这样的训练精度下降表明并不是所有的网络都是那么容易优化的。想象一个浅层的网络结构,在其后面增加若干identity层,使其深度变深。因为增加的层并没有改变网络结果,那么其精度应该与浅层相当。但事实是这样的深层网络的训练精度反而比不上浅层网络。(第四段)

此处不太明白,具体的identity层是如何实现的

intro1.png
为了解决精度下降问题,本文介绍了残差结构。当上一层的结果为x时,这一层我们先学习距离真实结果H(x)的差值F(x):=H(x)-x,再于该层结束时输出F(x)+x。具体采用shortcut connection的方法实现,不会引入额外的参数和计算量。(第五、六段)

我们的结果在ImageNet、CIFAR-10和若干检测任务上都有较好的结果。(第七、八、九段)

三、结构实现

由于不同层之间通道数可能不同,x可能是64通道的,但F(x)却有128通道。于是本文有两种方式实现残差相加,A)填零补充,前64位照常,后64位填0;B)投影,将x投影到128维。

四、实验

结构.png
该图展示了不同层数之间的结构排布,18-layer和34layer是正常的残差结构,50-layer以后使用了bottle-neck,下文将提及。
结果1.png

如图,实线是测试集,虚线是训练集,由于训练集作了很多数据增强,所以其error一开始较高。两个断崖式的下降,是学习率除以10。

ABC.png
这里的三种结果分别是结构实现部分提到的两种残差方式相加,额外增加了C)所有的残差项家都增加投影。尽管C的结果最好,但是为了节省时间空间复杂度,并不应用C。

bottleneck.png
考虑到训练时间,在更深的残差网络中,对残差块作了调整,第一个11用于降低通道数,第二个33用于提取信息,第三个1*1用于增加通道数。这也是34-layer到50-layer时,参数量变化不大的原因。

五、一点数学

math.png
红色是没加残差块时,求导的结果,尽管有BN,但层数多时也会很小,导致模型训练不动。蓝色是加了残差块,能够保证尽管前一部分很小,后一部分也能保证其梯度大小,所以能够训练得快。


总结

纵观整篇论文,其描述非常的清晰,每一步都有头有尾。其结果十分惊艳,这也促使了resnet在工业界的广泛应用。

你可能感兴趣的:(深度学习,人工智能,计算机视觉)