梯度爆炸

产生原因

对模型权重进行求导,如果此部分大于1,随着层数增加,梯度更新将以指数形式增加,即发生梯度爆炸;如果此部分小于1,随着层数增加,梯度更新将以指数形式衰减,即发生梯度消失。
梯度消失、爆炸,其根本原因在于反向传播训练法则,链式求导次数太多

解决办法

梯度裁剪

image.png
解决梯度问题 - 图2解决梯度问题 - 图3进行投影即乘以一个小于1的系数, 并且更新后的梯度完全与的原始方向对齐。

权值正则化

image.png

梯度消失

解决办法

选择relu、leakrelu、elu等激活函数

使用Batchnorm(batch normalization,简称BN)

通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。 具体来说就是反向传播中把每层神经网络任意神经元这个输入值的分布强行拉回到接近均值为0方差为1的标准正太分布,即严重偏离的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,使得让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,

使用残差结构

减小模型深度

RNN的门控机制

该值范围在0~1之间,但是在实际参数更新中,可以通过控制bias比较大,使得该值接近于1;在这种情况下,即使通过很多次连乘的操作,梯度也不会消失,仍然可以保留”长距”连乘项的存在。即总可以通过选择合适的参数,在不发生梯度爆炸的情况下,找到合理的梯度方向来更新参数,而且这个方向可以充分地考虑远距离的隐含层信息的传播影响。
这种情况对比RNN就很难实现,因为RNN中远距离的隐层影响要么非常强,要么就非常弱,所以难以找到合适的梯度来优化这些远距离的信息效应。