梯度爆炸和梯度消失

对于梯度爆炸和梯度消失,首先就要从神经网络的BP算法和反向传播说起。

 反向传播

  对于神经网络来说,最终的目的就是对于权值参数的更新,找到一组合适的权值和BIAS就可以进行预测和分类。可以说灵魂就在于反向传播时的梯度下降(上升)和链式求导。举个例子:

假设有这样一个深度神经网络,针对链式求导法则来说我们的求导公式是

(图片来自其他博主的分享)

对于这个神经网络来说,假设我们选择sigmoid作为激励函数,我们可以得到sigmoid的倒数图像是:

可以看到,倒数最大为0.25<1,而且我们一般对于权值的初始值很常用的是用一个均值为0,标准差(或者方差)为1的高斯分布来进行初始化,也就是说我们的权值初值一般都小于1。

梯度消失

  说到这,我们对于反向传播有:

这是上面的链式求导,可以看到我们从后面的层往前面的层一层一层的求导时,越靠近前面的层,求导结果会越小,对于很深的神经网络来说到最后可能梯度就变成了0,也就是梯度消失了。而且越往前权值的更新就越慢。

 

梯度爆炸

 

  同理,我们如果设置很大的权值初始值,那么会发生什么?在链式求导时,我们越往前面的层,求导的结果就越大,因为这是连乘,并且乘的数还比较大,所以是个递增的。所以前面的层更新的很大,对于深层神经网络来说,甚至可能到了最后,权值都溢出了,出现NAN问题,这就是梯度爆炸。

 

 

如何解决梯度消失和梯度爆炸

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:

1.    用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。

2.    用Batch Normalization。

3.    LSTM的结构设计也可以改善RNN中的梯度消失问题。

 

posted @ 2018-10-04 16:48  我爱吃番茄VV  阅读(89)  评论(0)    收藏  举报