梯度爆炸与梯度消失

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/83472872

梯度消失:

这种情况往往在神经网络中选择了不合适的激活函数时出现。如神经网络使用sigmoid作为激活函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))。因此两个0到1之间的数相乘,得到的结果就会变得很小。当神经网络层数非常深的时候,最后一层产生的梯度就因为乘了很多的小于1的导数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。

梯度爆炸:

初始化权值w时过大,导致前面层会比后面层变化的更快,这样就会导致权值越来越大,这就是梯度爆炸。即网络层之间的梯度(值大于1.0)重复相乘导致的指数级增长会产生梯度爆炸。在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。

如何修复梯度爆炸?

1、重新设计网络模型

将层数设计少一些;使用更小的批尺寸数据来训练网络;减小学习率也可能有效。

2、使用 ReLU 激活函数

在深度多层感知机神经网络中,梯度爆炸的发生可能是因为激活函数,如之前很流行的 Sigmoid 和 Tanh 函数。使用 ReLU 激活函数可以减少梯度爆炸。采用 ReLU 激活函数是最适合神经网络隐藏层的新实践。

3.、使用长短期记忆网络

在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。 LSTM 单元是适合循环神经网络的序列预测的最新最好实践。

4、使用梯度截断(Gradient Clipping)

在训练过程中检查和限制梯度的大小,这就是梯度截断。

5、使用权重正则化(Weight Regularization)

扫描二维码关注公众号,回复: 3759797 查看本文章

检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/83472872