ResNet(Residual Net)残差网是MSRA的何凯明团队在2015年提出来的,不但获得了2015年ImageNet的多项第一,甚至被运用到前一段时间非常火的AlphaGo Zero中去,取得了非常好的效果,可见ResNet的强大。ResNet的一个非常重要的贡献就是在深度网络中创造性地使用了残差块,从而解决了网络退化问题,大大提升了神经网络深度和效果。
1、退化问题
那什么是网络退化问题呢?也就是当模型的深度加深时,其错误率反而也提高了,如图:
在深度网络中,一般来讲,层数越深,效果会越好,因为多层网络可以通过非线性映射拟合任何函数,多出来的深层网络可以拟合输入自身,即深层网络表现至少不会比浅层网络差。但实际情况并不是如此,如果层数过深,容易出现网络退化问题,主要是因为当网络深度很深的时候,会出现梯度消失等问题。因为我们训练网络采用的方法是反向传播算法,误差反向传播公式里包含了权重系数、**函数的导数,t层w的偏导数中还包含t+1层的**值。当层数很深的时候,这些值连乘起来容易导致梯度消失或爆炸。
2、梯度消失问题
上面讲到当网络层数比较深的时候,会容易出现梯度消失或爆炸,我们可以通过一个简单的网络来分析。
假设有一个四层隐藏的神经网络,为简便计算,每层只有一个神经元,如图:
前向传播公式为:
如果我们要求误差对
可以看到,对
ResNet方法
通过上面分析,网络越深,梯度消失的现象就越来越明显,导致训练效果也不会很好。 但是现在浅层的网络难以明显提升效果,所以现在的问题就是如何在加深网络的情况下又能解决梯度消失的问题。
ResNet的提出就是为了解决上面的问题的,ResNet通过引入了残差网络结构(residual network),可以把网络层增加到152层,并取得了惊人的成绩。残差网络的基本结构如下图所示:
与普通网络相比,它在输出跟输入之间引入一个shortcut connection,然而就是这样一项简单设计,不但没有额外增加网络参数,还可以解决网络由于很深出现梯度消失的问题。
利用残差网络,作者将部分网络中的恒等映射
在残差块中,有
后向传播求
最后作者通过实验证明了ResNet可以很好地解决退化问题,并且收敛速度也优于plain net
对ResNet的解读
在论文《Residual Networks are Exponential Ensembles of Relatively Shallow Networks》中,作者对残差网络通过另一个角度来理解。
我们可以把残差网络单元转换成右图的形式,从右图中可以看出,残差网络其实是由多种路径组合的一个网络,从输入到输出之间我们通过选择是否跳过残差块(
参考
1、Deep Residual Learning for Image Recognition
2、关于梯度消失,梯度爆炸的问题
3、Understand Deep Residual Networks
4、对ResNet的理解