引言
作为一篇发表于2015年的文章,至今我们仍在深度卷积神经网络中用到ResNet,作为一个神经网络初学者,我觉得很有必要去阅读一下这篇文章。
在ResNet发表之前,深层神经网络的训练非常困难,而且会遇到当网络层级超过一定界限之后,神经网络的精度出现下降的情况。而通过残差学习(residual learning)的方式,使得训练网络的层数可以变得更深并且获得更好的精度。ResNet在ImageNet数据集上训练到了152层并且具有更低的复杂度,并且成功赢下了ILSVRC 2015。同时,在COCO数据集上,仅仅通过将cnn的主干网络替换成了残差网络就能将性能提高28%,并且赢下了ILSVRC & COCO 2015,这充分证明了ResNet的潜力。
ResNet实现背景与原理
-
背景:
随着神经网络的加深,会出现梯度消失或者梯度爆炸的问题,一般情况下,为了解决这个问题,一是要调整权重的初始化,二是加入一些正则化层(normalization)用来校验每个层的输 出,使之回到标志正态分布。但是即使使用这种方法仍会出现精度下降的问题。
Kaiming He等人发现,使用SGD,增加几个恒等映射层(identity mapping)却不能得到输入等于输出的结果,反而精度有所下降,这是不应该出现的结果。故而残差网络的出现就是为 了解决identity mapping 这个问题。
-
ResNet的具体原理:
1. ResNet结构设计:
对于已知目标函数H(x) = x,通过定义一个残差: f(x) = H(x) - x,只让新加的网络层去学习残差f(x),然后让新加的网络层的输出结果为f(x) + x。通过将残差与输入分离,进行学习的方法,使得残差网络更容易学习与输入无关的、更一般的特征。
这里举一个例子说明残差网络的作用:F 是求和前的网络映射,H 是求和后的网络映射,设将5映射至5.1,加入残差前H(x) = 5.1,加入残差后f(x) = H(x) - x = 0.1,对于两种不 同方法,加入残差后映射f增加了100%,而加入残差前映射f仅增加2%。显然残差的加入使得权重的调整更容易。参考知乎贴子:https://www.zhihu.com/question/53224378/answer/159102095
2. 对于输入输出不同维度的处理
(1)增加一些额外的零,使得输入输出的维度相同,此方法不需要引入额外参数。
(2)通过 1 x 1 的卷积完成通道数的增加,为了不改变高和宽,选择步幅为2的方式执行。3. 不同层数的ResNet网络架构:
由上图中我们可以看到ResNet采取了两种结构:
(1)第一种为普通的残差块,仅做两次3x3的卷积
(2)第二种为bottleneck结构,对于输入通道数较高的情况,我们的计算复杂度会急速增加,可以增加一个1x1的卷积投影使其回到低维,再进行3x3的卷积操作,最后再投影回原维度从而降低计算复杂度。
标签:跟读,映射,卷积,残差,网络,ResNet,神经网络,李沐 From: https://www.cnblogs.com/fqlb/p/18300971本人为深度学习神经网络小白一枚,有任何错误欢迎指出。