梯度消失,梯度爆炸产生的原因及解决办法

1.梯度消失和爆炸产生的原因:

a)从网络深度来分析:

在反向传播过程中需要对激活han函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。

b)从激活函数来分析:

前面a中提到的激活函数,我们就以Sigmoid函数为例

Sigmoid函数:

Sigmoid函数的导数:

从Sigmoid导数中我们可以看出来当x趋近于无穷大的时候,导数趋近于0。这样经过链式求导之后很容易造成梯度消失问题。

2.梯度消失和爆炸的解决办法

a)预训练+微调

b)梯度裁剪:主要针对梯度爆炸问题,设置一个阈值,当梯度查过这个阈值之后将它限制在这个范围之内。

c)权重正则化,L1和L2正则化。

正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式: 
Loss=(y−WTx)2+α||W||2
其中,α是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。在实际训练过程中梯度消失的问题发生的比较多。

d)使用Relu Lrelu Prelu Rrelu激活函数来防止梯度消失问题。

e)batchnorm

f)使用残差网络:https://blog.csdn.net/donkey_1993/article/details/81805287

猜你喜欢

转载自blog.csdn.net/donkey_1993/article/details/81807847
今日推荐