机器学习:神经网络中的梯度消失和梯度爆炸

一、什么是梯度消失和梯度爆炸

机器学习:神经网络中的梯度消失和梯度爆炸

1. 梯度消失(gradient vanishing problem)

     我们知道神经网络在进行反向传播(BP)的时候会对参数W进行更新,梯度消失就是靠后面网络层(如layer3)能够正常的得到一个合理的偏导数,但是靠近输入层的网络层,计算的到的偏导数近乎零,W几乎无法得到更新。

2. 梯度爆炸(gradient exploding problem)

    梯度爆炸的意思是,靠近输入层的网络层,计算的到的偏导数极其大,更新后W变成一个很大的数(爆炸)。

二、梯度消失和梯度爆炸产生的原因

    产生梯度消失和梯度爆炸都是因为在神经网络中使用了sigmoid**函数并且网络很深。为什么呢?

    以下图的反向传播为例(假设每一层只有一个神经元且对于每一层机器学习:神经网络中的梯度消失和梯度爆炸,其中机器学习:神经网络中的梯度消失和梯度爆炸为sigmoid函数)

    机器学习:神经网络中的梯度消失和梯度爆炸

    可以推导出

 机器学习:神经网络中的梯度消失和梯度爆炸

    而sigmoid的导数如下图所示:

    机器学习:神经网络中的梯度消失和梯度爆炸 

    可见sigmoid的导数的最大值是0.25。然后我们观察上面的推导式,是三个机器学习:神经网络中的梯度消失和梯度爆炸的连乘。

    当初始时机器学习:神经网络中的梯度消失和梯度爆炸 < 1 , 这种概率是很大的,因为一般初始化w都是小于1, 这时候,经过很多个小于1的数的连乘,最终得到的偏导数远远小于1,甚至接近于零,就产生了梯度消失的现象。这个时候,前面的hidden layer 1的权值更新会变得很慢,导致前面的层权值几乎不变,仍接近于初始化的权值,这就导致hidden layer 1相当于只是一个映射层,对所有的输入做了一个同一映射,这是此深层网络的学习就等价于只有后几层的浅层网络的学习了。

    当初始时机器学习:神经网络中的梯度消失和梯度爆炸 > 1, 就是w的初始化值远远大于4,这时候,经过很多个大于1的数的连乘,最终的到的偏导数远远大于1, 这就产生了梯度爆炸的现象。

    无论是梯度消失还是梯度下降,都是使得神经网络的训练过程变得更为曲折,应该尽可能避免它们。

三、解决方法

    对于梯度消失问题,可以考虑用ReLU**函数取代sigmoid**函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。

四、参考资料

   【1】 https://zhuanlan.zhihu.com/p/25631496

   【2】https://ziyubiti.github.io/2016/11/06/gradvanish/