梯度爆炸gradient explode和梯度消失gradient vanish

梯度消失:什么是梯度消失?下图是Bengio等人2012年论文On the difficulty of training recurrent neural networks中提到的说法,当梯度快速的变为0时,使得模型无法学习到远程事件的关联。

以前对梯度消失的理解比较模糊,以为就是梯度变得很小,没有去想是哪里的梯度变小,在什么时候发生的,以及在什么情况下会发生(发生的原因)。上面这句话说的比较明确了,由于神经网络的训练基于反向传播,求梯度时的连乘(激活函数的导数、权重)可能会导致离输出层较远的梯度值很小,使此处的权重无法正常更新,即模型无法学习到远程关联(例如RNN无法学习到句子前面的词语信息,CNN的浅层网络无法起到正常的作用),这类情况就是梯度消失。

梯度消失造成的影响:会造成神经网络中浅层网络的参数无法更新,远程关联缺失。

DNN和RNN中的梯度消失情况并不一样

1、DNN:在求梯度时,会有激活函数的导数连乘的情况出现,而常用的激活函数例如tanh的导数值域(0,1),sigmoid导数值域(0,1/4),这些小于1的值连乘后会使得前面一些层的梯度很小,就可能出现梯度消失的情况。

2、RNN:RNN中神经元的状态值,会出现W或激活函数多次相乘的情况,而在DNN中各层之间的连接权重W基本不会一样,可能有大有小,连乘之后不会产生质变,所以基本不会考虑W带来的梯度消散。当RNN中层数过深时,同一个W的累乘会导致状态值出现极端情况,如下面两幅图中的例子(图片来源)。在反向求梯度时根据BPTT算法,损失函数对W的导数是各个时刻关于W的导数的和,展开后可以发现对之前时刻W的导数会乘以多个激活函数导数和权重W,导致这些部分导数的值接近0,即较早时刻的信息没有影响到最终的梯度求解,这样模型就无法学习到较早时刻的信息。这里比较微妙,根据公式可以看出,即使较早时刻的倒数都变为0,但临近输出层的部分由于没有乘以那些东东有可能是正常值,这样最后算出来的损失函数关于W的梯度值就并不接近0,如果按照梯度接近0就出现梯度消散的理解在RNN这里就解释不通了,所以正确的梯度消散的理解是开始讲的那种。

总结出来就是DNN的梯度消散是发生在空间上的,RNN的梯度消散发生在时序上。

如何知道网络中是否出现梯度消失?

这个问题还待解决,最直观的就是在训练时打印梯度看一下,DNN可以这样,RNN呢?

如何解决梯度消失问题?

1、正确的初始化

2、设置阈值;

3、选择激活函数;

4、优化方式NAG,RMSprop;

5、RNN变体;

梯度爆炸:

 

参考:

https://blog.csdn.net/sysstc/article/details/75333008

https://zhuanlan.zhihu.com/p/25631496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值