ResNet(Residual Net)残差网是MSRA的何凯明团队在2015年提出来的,不但获得了2015年ImageNet的多项第一,甚至被运用到前一段时间非常火的AlphaGo Zero中去,取得了非常好的效果,可见ResNet的强大。ResNet的一个非常重要的贡献就是在深度网络中创造性地使用了残差块,从而解决了网络退化问题,大大提升了神经网络深度和效果。
1、退化问题
那什么是网络退化问题呢?也就是当模型的深度加深时,其错误率反而也提高了,如图:
在深度网络中,一般来讲,层数越深,效果会越好,因为多层网络可以通过非线性映射拟合任何函数,多出来的深层网络可以拟合输入自身,即深层网络表现至少不会比浅层网络差。但实际情况并不是如此,如果层数过深,容易出现网络退化问题,主要是因为当网络深度很深的时候,会出现梯度消失等问题。因为我们训练网络采用的方法是反向传播算法,误差反向传播公式里包含了权重系数、激活函数的导数,t层w的偏导数中还包含t+1层的激活值。当层数很深的时候,这些值连乘起来容易导致梯度消失或爆炸。
2、梯度消失问题
上面讲到当网络层数比较深的时候,会容易出现梯度消失或爆炸,我们可以通过一个简单的网络来分析。
假设有一个四层隐藏的神经网络,为简便计算,每层只有一个神经元,如图:
前向传播公式为:
zjaj=wj∗aj−1+bj=σ(zj)
如果我们要求误差对 b1 的导数,也就是:
∂C∂b1=∂C∂