梯度不稳定
梯度下降算法运行时,前面层的梯度是来自于后面层上梯度的乘积。当在深层神经网络当中,或是采用了不合适的损失函数时,会出现不稳定情况,如梯度消失或梯度爆炸。
原因
上图为三个隐藏层的单神经网络,假设每一层网络激活函数的输出为g(z),那么下一层的函数则为gi+1(z) = g(z*w) ,设偏差b=0。如果要更新第二隐藏层的权值,根据链式求导法则,可以推出是对激活函数求导后与权重相乘的式子。(公式省略)
如果激活函数求导后与权重相乘的积大于1,那么在深层神经网络当中,最终求出的梯度更新信息将以指数形式增加,发生梯度爆炸。而乘积小于1时,则会发生梯度消失。
哪个更容易发生
因为sigmoid导数最大为1/4,所以在梯度下降算法时,梯度消失更容易发生。
解决
梯度消失
- 1、ReLU激活函数
如果运用导数为1的激活函数则能有效的解决sigmoid带来的问题,函数如下图:
优点:计算方便,计算速度快;加速了网络的训练
缺点:由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决); 输出不是以0为中心的
而leakyReLU很好的解决了ReLU的问题。
- 2、batchnorm
Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。参考
)
梯度爆炸
- 1、使用长短期记忆网络
在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。
使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。
采用 LSTM 单元是适合循环神经网络的序列预测的最新最好实践。
- 2、使用权重正则化(Weight Regularization)
如果梯度爆炸仍然存在,可以尝试另一种方法,即检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。