神经网络中的梯度爆炸
一、什么事梯度爆炸?
“梯度爆炸指神经网络训练过程中大的误差梯度不断累积,导致模型权重出现重大更新。会造成模型不稳定,无法利用训练数据学习”
误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。 网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。 梯度爆炸引发的问题 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。
总结:
原因:权重初始化过大,导致权重更新梯度大,损失波动幅度大。
结果:1、模型不稳定;2、无法继续学习-nan。
二、如何解决梯度爆炸?
1、重新设计网络模型
在深度神经网络中,梯度爆炸可以通过重新设计层数更少的网络来解决。 在循环神经网络中,训练过程中在更少的先前时间步上进行更新可以缓解梯度爆炸问题。
(网络权重过大在反向连乘时会越乘越大)
2、使用 ReLU系列的激活函数
激活函数也是导致梯度爆炸的因素之一,如 Sigmoid 和 Tanh 函数。 使用 ReLU 系列的激活函数可以减少梯度爆炸,。
(ReLu系列:ReLU、LeakyReLU、pReLU等)
3. 使用长短期记忆网络
在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。 使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。 采用 LSTM 单元是适合循环神经网络的序列预测的较好实践。
4. 使用梯度截断(Gradient Clipping)
在较深较大的深层网络模型中或输入序列较长的LSTM中,可以使用梯度截断的方法来限制梯度。即:当梯度大于阈值时,将梯度设为阈值。