机器学习

梯度爆炸与梯度弥散

2019-04-13  本文已影响0人  9933fdf22087

实际现象:当我们使用sigmoid function作为激活函数时,随着神经网络的隐藏层数增加,训练误差反而增大,造成了深度网络的不稳定。

梯度弥散:靠近输出层的hidden layer 梯度大,参数更新更快,所以很快就会收敛。而靠近输入层的hidden layer梯度小,参数更新慢,几乎和初始状态一样,随机分布。

梯度爆炸:当前面hidden layer的梯度通过训练变大,而后面的梯度将会指数级增大。

现象原因:sigmoid函数会将[+∞,-∞]的输入压缩到[0,1],导致当输入更新时,输出的更新会很小。在这种情况下,就会随着隐藏层数的增加,反向传递时,数值更新将会越来越小。

解决方法:

1.Relu函数代换Sigmoid函数。

2.逐层贪婪预训练,如同训练自编码器的过程,每次只训练一层参数。由于得到的参数将会是局部最优,所以需要对整个网络再进行调优。

3.梯度减切。设置一个梯度减切的阈值,如果在更新梯度的时候,梯度超过这个阈值,则会将其限制在这个范围之内,防止梯度爆炸。

4.正则。对参数加入正则规范,限制参数范数过大。

5.加入batch normalization层。

6.加入残差结构。

7.LSTM层由于有记忆,可以缓解梯度消失的发生。

上一篇 下一篇

猜你喜欢

热点阅读