概述
梯度消失
RNN循环神经网络:
长期依赖效应,RNN并不擅长处理。RNN中某一单元主要受它附近的单元的影响。
一个很深的神经网络进行反向传播时,梯度很难从后层nn传播回去。即它很难影响靠前层的权重。
RNN有同样的问题。后面层的输出误差很难影响前面层的计算。
基本的RNN模型会有很多局部影响,某一单元主要受它附近的单元的影响。
这意味着很难让一个神经网络能够意识到它看到的是单数名词还是复数名词,然后在序列后面,生成单复数依赖形式,正确使用was或were。并且一个英语句子中间部分可能很长,所以需要让RNN长时间记住一个单词是单数还是复数,前面的句子才能正确。
如
cat was full after ate food...
cats were full after ate food...
由cat变成cats时候,was也要变成were。
单数使用was,复数使用were,这是固定的规则,但是RNN不擅长处理长期依赖的问题。
梯度消失比梯度爆炸更需要去解决,梯度消失更难解决。
因为梯度爆炸更明显,梯度爆炸很容易发现(它使网络崩溃),如数值溢出。一般使用梯度修剪解决梯度爆炸问题。
说白了,梯度消失和爆炸是因为链式法则的多项连乘,多个大于1的数相乘或者多个小于1的数相乘就会出现梯度消失或爆炸的问题。RNN的这个缺点有处理方法:
1.换激活函数。使用relu激活函数而不是sigmoid。因为sigmoid激活函数的导数值太小了,最大导数值才是0.25,并且还是x在0点附近的情况下。反向传播的时候,多个小于1的数字相乘,梯度自然而然就趋于0了,对前面的nn层没有训练的效果。
2.梯度修剪:观察参数值,如果它大于阈值,就修改它;
3.使用LSTM替代RNN。LSTM独特的门结构可以解决梯度消失问题,LSTM可以长时间保留cell记忆,比RNN更擅长处理长序列问题。
最后
以上就是难过嚓茶为你收集整理的RNN梯度消失问题的全部内容,希望文章能够帮你解决RNN梯度消失问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复