理解ResNet

ResNet(Residual Net)残差网是MSRA的何凯明团队在2015年提出来的,不但获得了2015年ImageNet的多项第一,甚至被运用到前一段时间非常火的AlphaGo Zero中去,取得了非常好的效果,可见ResNet的强大。ResNet的一个非常重要的贡献就是在深度网络中创造性地使用了残差块,从而解决了网络退化问题,大大提升了神经网络深度和效果。

1、退化问题
那什么是网络退化问题呢?也就是当模型的深度加深时,其错误率反而也提高了,如图:


理解ResNet_第1张图片

在深度网络中,一般来讲,层数越深,效果会越好,因为多层网络可以通过非线性映射拟合任何函数,多出来的深层网络可以拟合输入自身,即深层网络表现至少不会比浅层网络差。但实际情况并不是如此,如果层数过深,容易出现网络退化问题,主要是因为当网络深度很深的时候,会出现梯度消失等问题。因为我们训练网络采用的方法是反向传播算法,误差反向传播公式里包含了权重系数、激活函数的导数,t层w的偏导数中还包含t+1层的激活值。当层数很深的时候,这些值连乘起来容易导致梯度消失或爆炸。

2、梯度消失问题
上面讲到当网络层数比较深的时候,会容易出现梯度消失或爆炸,我们可以通过一个简单的网络来分析。
假设有一个四层隐藏的神经网络,为简便计算,每层只有一个神经元,如图:


理解ResNet_第2张图片

前向传播公式为:
zjaj=wjaj1+bj=σ(zj)

如果我们要求误差对 b1 的导数,也就是:
Cb1=Ca4w4σ(z4)w3σ(z3)w4σ(z2)w4σ(z2)w1σ(z1)
可以看到,对 b1 的导数非常依赖 wjσ(zj) ,在连乘状态下,非常容易出现梯度消失或爆炸的情况。

ResNet方法

通过上面分析,网络越深,梯度消失的现象就越来越明显,导致训练效果也不会很好。 但是现在浅层的网络难以明显提升效果,所以现在的问题就是如何在加深网络的情况下又能解决梯度消失的问题。

ResNet的提出就是为了解决上面的问题的,ResNet通过引入了残差网络结构(residual network),可以把网络层增加到152层,并取得了惊人的成绩。残差网络的基本结构如下图所示:


理解ResNet_第3张图片

与普通网络相比,它在输出跟输入之间引入一个shortcut connection,然而就是这样一项简单设计,不但没有额外增加网络参数,还可以解决网络由于很深出现梯度消失的问题。

利用残差网络,作者将部分网络中的恒等映射 h(x)=x 转换为 h(x)=F(x)+x 。作者假设深度网络表现至少不比浅层网络差,因为若恒等映射是最优的,我们可以轻松地训练参数使得 F(x) 趋近0,实现恒等映射这比直接训练恒等映射要容易的多;若恒等映射不是最优的,我们也可以通过多层的残差网络进行调整,残差网可以很好地克服梯度消失的问题,训练也比较容易。

在残差块中,有
h(xn)=F(xn,wn)+xn
xn+1=re(h(xn))
后向传播求 xn 的梯度为:

xn+1xn=rehF(xn,wn)+xnxn=F(xn,wn)xn+1

F(xn,wn) xn 的一个残差,当残差变化大时,可以利用梯度进行更新参数,当残差变化小的时候,也能够保证梯度不会消失。

最后作者通过实验证明了ResNet可以很好地解决退化问题,并且收敛速度也优于plain net


理解ResNet_第4张图片

对ResNet的解读
在论文《Residual Networks are Exponential Ensembles of Relatively Shallow Networks》中,作者对残差网络通过另一个角度来理解。


理解ResNet_第5张图片

我们可以把残差网络单元转换成右图的形式,从右图中可以看出,残差网络其实是由多种路径组合的一个网络,从输入到输出之间我们通过选择是否跳过残差块( F(x)=0 )来选择不同的映射。直白了说,残差网络其实是很多并行子网络的组合,整个残差网络其实相当于一个多人投票系统(Ensembling)。

参考
1、Deep Residual Learning for Image Recognition
2、关于梯度消失,梯度爆炸的问题
3、Understand Deep Residual Networks
4、对ResNet的理解

你可能感兴趣的:(神经网络)