梯度爆炸和梯度消失
对于梯度爆炸和梯度消失,首先就要从神经网络的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中的梯度消失问题。

浙公网安备 33010602011771号