文章目录
一、梯度弥散
1.1 什么是梯度弥散?
梯度弥散就是梯度消失,导数为0
1.2 梯度弥散造成的问题
靠近输出层的隐藏层梯度大,参数更新快,所以很快就会收敛;
靠近输入层的隐藏层梯度小,参数更新慢,几乎就和初始状态一样,随机分布。
由于神经网络前几层的权重更新过慢,或者没有更新,从而导致了整个网络
的学习性能下降,达不到训练的标准。
1.3 梯度弥散造成的原因
-
激活函数的"饱和"。
-
样本中的奇异样本引起模型无法收敛。
-
使用反向传播算法传播梯度的时候,随着网络传播深度的增加,
梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢。
不能有效学习。 -
从数学的角度看,是因为梯度连乘的问题,是梯度消失问题的所在。
-
学习率过大而导致模型震荡无法收敛。
1.4 梯度弥散的解决办法
- 使用ReLU,Leaky_ Relu等 激活函数替代Sigmoid。
- 网络层中的数据进行 batch normalization(批量标准化)。
- 数据归一化、数据清洗。
- 使用更好的网络,比如ResNet。
- 降低学习率。
二、梯度爆炸
1.1 什么是梯度爆炸?
梯度的衰减是有连续乘法导致的,如果在连续乘法中出现一个非常大的值,最后计算出的梯度就会很大,就想当优化到断崖处时,会获得一个很大的梯度值, 如果以这个梯度值进行更新,那么这次迭代的步长就很大,可能会一下子飞出了合理的区域。
1.2 梯度爆炸造成的问题
● 前面网络层的梯度通过训练变大,后面网络层的梯度指数级增大。
● 神经网络模型无法收敛,达不到训练结果。
1.3 梯度爆炸造成的原因
-
神经网络初始化的权值过大,每层网络反向求导的结果都大于1,
这样梯度相乘就会变得更大。 -
学习率非常大而导致梯度爆炸
1.4 梯度爆炸的解决方式
- 重设初始化权值(指定正态分布采样)
- 学习率调小