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

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

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

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

、、

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


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


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


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

BPTT的限制

你可能感兴趣的:(RNN 为什么不能直接反向传播?为什么会出现梯度消失和梯度爆炸?)