残差网络resnet详解

1 产生背景

网络的深度对于特征提取具有至关重要的作用,实验证得,如果简单的增加网络深度,会引起退化问题[Degradation问题],即准确率先上升然后达到饱和,再持续增加深度会导致准确率下降。该实验说明了深度网络不能很好地被优化,也就是优化器很难去利用多层网络拟合函数。

这就产生了一个冲突,即需要多层网络,但多层网络又很难拟合函数,故提出了残差网络。

这里写图片描述

2 解决退化问题

假如目前有一个可以工作的很好的网络A,这时来了一个比A更深的网络B,只需要让网络B的前一部分与A完全相同,后一部分只实现一个恒等映射,这样网络B最起码能获得与A相同的性能,而不至于更差。

这里写图片描述

如上图所示,18层网络结构已经能达到最优效果,如果转化成34层网络则会导致准确率下降,按照上述思想,应该将34层网络中多出的层(extra layers)只起到恒等映射的作用,即x经过extra layer结果还是x。

3 具体算法

resnet在2015名声大噪,而且影响了2016年DL在学术界和工业界的发展方向。下面是这个resnet的网络结构,大家先睹为快。

 

它对每层的输入做一个reference, 学习形成残差函数, 而不是学习一些没有reference的函数。这种残差函数更容易优化,能使网络层数大大加深。
我们知道,在计算机视觉里,特征的“等级”随增网络深度的加深而变高,研究表明,网络的深度是实现好的效果的重要因素。然而梯度弥散/爆炸成为训练深层次的网络的障碍,导致无法收敛。
有一些方法可以弥补,如归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。然而,虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差, 如下图。 这种deep plain net收敛率十分低下。


的确,通过在一个浅层网络基础上叠加y=x的层(称identity mappings,恒等映射),可以让网络随深度增加而不退化。这反映了多层非线性网络无法逼近恒等映射网络。

但是,不退化不是我们的目的,我们希望有更好性能的网络。  resnet学习的是残差函数F(x) = H(x) - x, 这里如果F(x) = 0, 那么就是上面提到的恒等映射。事实上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情况,它没有引入额外的参数和计算复杂度。 假如优化目标函数是逼近一个恒等映射, 而不是0映射, 那么学习找到对恒等映射的扰动会比重新学习一个映射函数要容易。从下图可以看出,残差函数一般会有较小的响应波动,表明恒等映射是一个合理的预处理。


残差块的结构如下图,


它有二层,如下表达式,其中σ代表非线性函数ReLU


然后通过一个shortcut,和第2个ReLU,获得输出y


当需要对输入和输出维数进行变化时(如改变通道数目),可以在shortcut时对x做一个线性变换Ws,如下式,然而实验证明x已经足够了,不需要再搞个维度变换,除非需求是某个特定维度的输出,如文章开头的resnet网络结构图中的虚线,是将通道数翻倍。


实验证明,这个残差块往往需要两层以上,单单一层的残差块(y=W1x+x)并不能起到提升作用。


残差网络的确解决了退化的问题,在训练集和校验集上,都证明了的更深的网络错误率越小,如下图


实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1, 如下图。新结构中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量。


下面是resnet的成绩单, 在imagenet2015夺得冠军


参考:

1.残差resnet网络原理详解

https://blog.csdn.net/mao_feng/article/details/52734438

2.【目标检测】Mask RCNN算法详解

https://blog.csdn.net/disiwei1012/article/details/79508839


猜你喜欢

转载自blog.csdn.net/qinghuaci666/article/details/80915235