RNN 为什么不能直接反向传播?为什么会出现梯度消失和梯度爆炸?

RNN应该是目前用的比较多的技术框架 ,无论是NLP还是CV等领域,今天 我们就详细的讲解一下关于RNN的具体知识

1、RNN为什么不能直接反向传播呢?

首先我们回顾一下普通的反向传播,过程如下所示:

、、

我们为了简便暂时不考虑激活函数,我们可以用以下的链式法则计算:


这个是非常简单的,现在我们来看看RNN是什么样子的:


这样我们就不能直接求偏导了,如果我们还是按照上面那种方法求偏导,试想以下,后面递归的w3变量将会是无穷多,因为h也是递归的,如果要解决这个问题,必须将这个时间序列给拆开,如以下形式:


但是这种仍然存在一个毛病,我们需要求单个RNN的时候,就需要求所有先前时间步长的梯度和得到一个梯度,并且用梯度来更新RNN,素以这时间步数的增加,这种计算会变得非常的昂贵,于是提出来了截断的基于事件的反向传播(TBPTT),用来优化递归的模型。这里可以参考以下文献,意思就是我们只计算倒数到t-T的时候就结束了。并没有从一开始就计算导数。(简而言之就是上面那个求和公式我不需要全部求和 我只求最近的一部分)

BPTT的限制

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容