概述
学过RNN的想必都听过下面的言论,
“RNN容易产生梯度消失和梯度爆炸”,“RNN不能捕获长期记忆”,那么
RNN为什么不能捕获长期记忆?RNN真的就会发生梯度消失和爆炸吗?
先来个答案,当序列很长的时候,RNN确实不能捕获长期依赖关系,也确实容易梯度爆炸,但是否容易梯度消失,却要好好分析下,亦或者说,RNN梯度消失不同于我们往常理解的“MLP、CNN等里面的梯度消失”。详细解说请往下看~
一切要从BPTT说起~
目录
(1) RNN中的梯度消失与梯度爆炸
(2) 梯度消失为什么会成为一个问题?
(3)怎么看待RNN不能捕获长期依赖关系?
(1) RNN中的梯度消失与梯度爆炸
RNN中loss对某个参数的梯度由2部分相加组成,一部分是横向沿着时间轴传播的,另一部分是纵向沿着网络层数传播的,一般而言,RNN的网络层数不会太深,但时间轴却可能很长。所以纵向部分的不会出现梯度消失或爆炸的,横向部分会梯度爆炸,但不会梯度消失(因为RNN的各个时间步是共享参数的,所以梯度=各个时间步的梯度之和,即使梯度越传越弱,那也只是远距离的梯度很小,但近距离的梯度依旧有),两者相加之后,梯度不会消失,但依旧会爆炸(只要横向或纵向一者爆炸则爆炸)。
其实我们常说的RNN容易梯度消失,这里的梯度消失不同于我们“MLP、CNN”等里面的梯度消失,这里的梯度消失的含义是在时间轴上,梯度被近距离的梯度主导。如下图,
RNN梯度消失(图片来自CS224n的ppt)
[矩阵的二范数(因为令
,则
,所以等式成立)]
当w的最大特征值大于1的时候,会发生梯度爆炸,小于1则会发现梯度消失。
(2) 梯度消失为什么会成为一个问题?
梯度消失会导致RNN不能捕获长期依赖关系,如下图(图片来自CS224n的ppt))
(3)怎么看待RNN不能捕获长期依赖关系?
从正向传播来看,在时间轴上,不断的连乘使得较远的消息几乎为0,所以在生成单词词,几乎没有参考到前面的信息,所以存在捕捉长距离依赖的问题。
从反向传播来看,见(2)。
最后
以上就是勤劳月饼为你收集整理的RNN 真的会梯度消失么的全部内容,希望文章能够帮你解决RNN 真的会梯度消失么所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复