参考资料:http://neuralnetworksanddeeplearning.com/chap5.html
深度网络中不同层次的神经元的学习速度是不同的。用梯度下降法学习,存在固有过的不稳定性,这种不稳定性导致网络在前面或后面的层次在训练中停滞。
比如,如果我们设计一个每层只有一个神经元的网络:
在反向传播时,前面层次的梯度由后面层次的权重和导数累乘得到。
sigmoid的导数图像如下:
函数的顶点在0.25处。
初始化时,如果按照常规的正态分布从0到1中随机选取权重的方法,权重的绝对值大都小于1.
这样,经过累乘,梯度反向传播到前面的层次时就已经很小了,这就出现了梯度消失现象。
如果我们针对这个现象采取权宜之计:
将权重初始化得大一点,初始化b使得激活函数的导数不要太小。
但是大权重的累乘会造成梯度爆炸现象 ,而取得一个恰到好处的值是非常困难的。
只要是sigmoid激活函数构造的神经网络都会造成梯度更新时的不稳定,遇到梯度爆炸或者梯度消失的问题。
用ReLU代替sigmoid可以有效缓解梯度爆炸/梯度消失问题。