ResNet论文阅读笔记

文章目录

  • 前言
  • 介绍
  • Residual Learning
  • shortcut
  • Deeper Bottleneck Architectures
  • 实验部分

前言

原论文标题:Deep Residual Learning for Image Recognition

介绍

就如文章第一句话,较深的网络有助于提高模型的准确度,但是训练一个很深的神经网络是一件很难的事情。


ResNet论文阅读笔记_第1张图片
从上图可以看出,56层的网络的误差比20层的还大。并且这并不是过拟合的问题:因为我们可以看到训练的误差也是56层的比较大。
理论上在较浅的网络上再加很多层也是可以达到同样的准确度的(只要让加上的层是indentity function),但是结果却是较深的网络的效果更差了,说明训练深的网络并不是件容易的事。
所以文章引入residual learning,下面来对它做详细介绍。

Residual Learning

ResNet论文阅读笔记_第2张图片
普通的神经网络都是一层一层往上叠,而ResNet还加了一个“跳跃”(shortcut connection)。文章假设学习残差F(X)比直接学习H(X)=F(X)+X容易。举例一种极端情况:如果H(X)是indentity function,那让残差变为0应该比学到indentity function容易。

其实加上这条线还能防止网络过深导致梯度消失的问题(这个观点来自李沐老师的论文讲解):
比如普通的两次网络堆叠,设第一层的函数是g(x),第二层的函数是f(x)。
那么对于普通的网络的求梯度: ∂ f ( g ( x ) ) ∂ w = ∂ f ( g ( x ) ) ∂ g ( x ) ∂ g ( x ) ∂ w \frac{\partial f(g(x))}{\partial w} = \frac{\partial f(g(x))}{\partial g(x)} \frac{\partial g(x)}{\partial w} wf(g(x))=g(x)f(g(x))wg(x)。这样子如果梯度比较小,一直乘下去就会导致梯度消失问题。
而对于残差网络求梯度: ∂ f ( g ( x ) ) + ∂ g ( x ) ∂ w \frac{\partial f(g(x)) + \partial g(x)}{\partial w} wf(g(x))+g(x)。引入了 ∂ g ( x ) ∂ w \frac{\partial g(x)}{\partial w} wg(x),从而让每个梯度都不会太小。

加入了这条线,让训练效果变好,让网络可以变深,而且不增加任何参数,妙!

shortcut

因为加上这条线,要相加的话必须保持维度相同,所以需要一些方法。论文提供了三种方法:
(1)对于channel数不同的shortcut补零。
(2)只对channel数不同的shortcut做projection(用1 × \times × 1卷积),即: y = F ( x , W i ) + W s x \mathbf{y} = \mathcal{F}(\mathbf{x},\mathbf{W_i}) + \mathbf{W_s}\mathbf{x} y=F(x,Wi)+Wsx
(3)对所有shortcut都做projection。
论文在ImageNet上做实验比较了这三种方法的效果:

ResNet论文阅读笔记_第3张图片
可以看到第三种方法效果最好,原因也很显然,毕竟所有shortcut的1 × \times × 1卷积核的参数都是学出来的。但是第三种方法的参数比第二种方法的参数多出许多,效果也没好多少,所以我们会使用第二种方法。

Deeper Bottleneck Architectures

刚才前面看到的原始版两层结构的参数实在是有点多,所以作者希望能先通过一层1 × \times × 1卷积来减少通道数后再进行卷积,最后再通过1 × \times × 1卷积恢复通道数目。如下图所示:

ResNet论文阅读笔记_第4张图片
可以算一下原始版和改进版的参数数目差距,对于原始版(2个3x3x256卷积核):2x3x3x256 = 1179648;对于改进版:1x1x256x64+3x3x64x64+1x1x64x256 = 69632。只是一块的参数数目就可以少这么多。

实验部分

这部分主要讲ResNet有多厉害,以及一些实验操作细节。
有个点我自认为比较重要的,就是论文训练了一个1202层的ResNet,他的结果也很好,但是没比过一个110层的ResNet,说明网络太深也不好,容易过拟合。

你可能感兴趣的:(深度学习论文阅读,论文阅读,深度学习,计算机视觉)