深度残差网络(Residue Network)

我们都知道增加网络的宽度和深度可以很好提高网络的性能,深的网络一般都比浅的的网络效果好。比如,一个深的网络 A 和一个浅的网络 B,那 A 的性能至少都能跟 B一样,为什么呢?

https://arxiv.org/abs/1512.03385

因为就算我们把B的网络参数全部迁移到A的前面几层,而A后面的层只是做一个等价的映射,就达到了B网络的一样的效果。一个比较好的例子就是VGG,该网络就是在AlexNet的基础上通过增加网络深度大幅度提高了网络性能。

对于原来的网络,如果简单地增加深度,会导致梯度消失或梯度爆炸。对于该问题的解决方法是选择更好的初始化方法、Batch Normalization,这样的话可以训练几十层的网络。

虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题。随着网络层数的增加,网络在训练集上的准确率下降了。这个不能解释为 overfitting,因为 overfit 应该表现为在训练集上表现更好才对。

退化问题说明了深度网络不能很简单地被很好地优化。作者通过实验:通过浅层网络等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率。

如果深层网络的后面的层是恒等映射,那么模型就退化为一个浅层网络。我们希望网络在无法保证继续高质量学习下去同时,保持目前的成绩就行,不要成绩下降。这其实就是要求网络模型也能够具备学习恒等映射的能力,否则的话,它就会退化。

我们把网络公式表示如下:

函数 F 称作 “残差函数”,残差模块有两个分支,将这两个分支相加后,再经过一个非线性的变换,形成残差学习模块。

残差连接通过在不同层之间建立连接,在反向传播过程中,梯度的流动方向不仅仅限于反向的顺序方向,还有跳过连接这一流动方向,这样在反向传播过程中就不容易由于经过太多的网络层而导致梯度消失,实践中也证明其效果很好,特别有利于深层的神经网络训练,让模型能够学到不错的参数,从而提升模型的性能。

未经允许不得转载:一亩三分地 » 深度残差网络(Residue Network)