到底Resnet在解决一个什么问题呢?

版权声明:人工智能/机器学习/深度学习交流QQ群:811460433 , 微信公众号:程序员深度学习 https://blog.csdn.net/sinat_24143931/article/details/86292128
人工智能/机器学习/深度学习交流QQ群:116270156
也可以扫一扫下面二维码加入微信群,如果二维码失效,可以添加博主个人微信,拉你进群

论文地址:https://arxiv.org/abs/1512.03385

1. 思想

作者根据输入将层表示为学习残差函数。实验表明,残差网络更容易优化,并且能够通过增加相当的深度来提高准确率。
核心是解决了增加深度带来的副作用(退化问题),这样能够通过单纯地增加网络深度,来提高网络性能。

  • 作者在ImageNet上实验了一个152层的残差网络,比VGG深8倍,取得了3.57%的错误率。
  • 作者通过一系列实验证明了表示的深度(即网络的深度)对很多视觉识别任务都至关重要。仅仅由于使用了非常深的网络,作者就在COCO目标检测数据集上获得了28%的相对提升。

2. ResNet要解决的问题

2.1 网络的深度为什么重要?

因为CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。

2.2 为什么不能简单地增加网络层数?

  • 对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸
    对于该问题的解决方法正则化初始化和中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。

  • 虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting,因为overfit应该表现为在训练集上表现更好才对。
    退化问题说明了深度网络不能很简单地被很好地优化。
    作者通过实验:通过浅层网络+ y=x 等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率,推断退化问题可能是因为深层的网络并不是那么好训练,也就是求解器很难去利用多层网络拟合同等函数。

3. 怎么解决退化问题?

深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是**直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。**但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。
通俗的理解:
理论上深层的神经网络一定比浅层的要好,比如深层网络A,浅层网络B,A的前几层完全复制B,A的后几层都不再改变B的输出,那么效果应该是和B是一样的。也就是说,A的前几层就是B,后几层是线性层。但是实验发现,超过一定界限之后,深层网络的效果比浅层的还差。一个可能的解释是:理论上,我们可以让A的后几层输入等于输出,但实际训练网络时,这个线性关系很难学到。既然如此,我们把这个线性关系直接加到网络的结构当中去,那么效果至少不必浅层网络差。也就是说,Resnet让深层神经网络更容易被训练了。

  • 一方面: ResNet解决的不是梯度弥散或爆炸问题,kaiming的论文中也说了:臭名昭著的梯度弥散/爆炸问题已经很大程度上被normalized initialization and intermediate normalization layers解决了;
  • 另一方面: 由于直接增加网络深度的(plain)网络在训练集上会有更高的错误率,所以更深的网络并没有过拟合,也就是说更深的网络效果不好,是因为网络没有被训练好。

在ResNet中,building block:
在这里插入图片描述
H(x)是期望拟合的特征图,这里叫做desired underlying mapping

一个building block要拟合的就是这个潜在的特征图

当没有使用残差网络结构时,building block的映射F(x)需要做的就是拟合H(x)

当使用了残差网络时,就是加入了shortcut connection 结构,这时候由一个building block 的任务由: F(x) := H(x),变成了F(x) := H(x)-x

对比这两个待拟合的函数,文中说假设拟合残差图更容易优化,也就是说:F(x) := H(x)-x 比 F(x) := H(x)更容易优化,接下来举了一个例子,极端情况下:desired underlying mapping要拟合的是identity mapping,这时候残差网络的任务就是拟合F(x): 0,而原本的plain结构的话就是F(x) : x,而F(x): 0任务会更容易,原因是:resnet(残差网络)的F(x)究竟长什么样子?中theone的答案:

F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是F’(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化,看到残差网络我第一反应就是差分放大器。

4. 最后

欢迎大家扫一扫下面二维码加入微信交流群,如果二维码失效,可以添加博主个人微信,拉你进群

猜你喜欢

转载自blog.csdn.net/sinat_24143931/article/details/86292128