经典的RNN结构如下图所示:


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题


假设我们的时间序列只有三段, RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下:

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

假设在t=3时刻,损失函数为 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 

则对于一次训练任务的损失函数为 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,即每一时刻损失值的累加。

使用随机梯度下降法训练RNN其实就是对 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题  RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题  RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 以及 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导,并不断调整它们以使L尽可能达到最小的过程。

现在假设我们我们的时间序列只有三段,t1,t2,t3。

我们只对t3时刻的 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导(其他时刻类似):

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

可以看出对于 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导并没有长期依赖,但是对于 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导,会随着时间序列产生长期依赖。因为 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 随着时间序列向前传播,而 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 又是 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题的函数。

根据上述求偏导的过程,我们可以得出任意时刻对 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导的公式:

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

任意时刻对RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 求偏导的公式同上。

如果加上激活函数, RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 

 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 = RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

激活函数tanh和它的导数图像如下。


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

由上图可以看出 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,对于训练过程大部分情况下tanh的导数是小于1的,因为很少情况下会出现RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,如果 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 也是一个大于0小于1的值,则当t很大时 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,就会趋近于0,和 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 趋近与0是一个道理。同理当 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 很大时 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 就会趋近于无穷,这就是RNN中梯度消失和爆炸的原因。

至于怎么避免这种现象,让我在看看 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 梯度消失和爆炸的根本原因就是 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 这一坨,要消除这种情况就需要把这一坨在求偏导的过程中去掉,至于怎么去掉,一种办法就是使 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 另一种办法就是使 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 。其实这就是LSTM做的事情。

LSTM如何解决梯度消失问题

先上一张LSTM的经典图:


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

至于这张图的详细介绍请参考:Understanding LSTM Networks

下面假设你已经阅读过Understanding LSTM Networks这篇文章了,并且了解了LSTM的组成结构。

RNN梯度消失和爆炸的原因这篇文章中提到的RNN结构可以抽象成下面这幅图:


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

而LSTM可以抽象成这样:


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

三个×分别代表的就是forget gate,input gate,output gate,而我认为LSTM最关键的就是forget gate这个部件。这三个gate是如何控制流入流出的呢,其实就是通过下面 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 三个函数来控制,因为 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题(代表sigmoid函数) 的值是介于0到1之间的,刚好用趋近于0时表示流入不能通过gate,趋近于1时表示流入可以通过gate。

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

当前的状态 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题类似与传统RNN RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题。将LSTM的状态表达式展开后得:

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

如果加上激活函数, RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

对于LSTM同样也包含这样的一项,但是在LSTM中 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

假设 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,则 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 的函数图像如下图所示:


RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

可以看到该函数值基本上不是0就是1。

传统RNN的求偏导过程:

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

如果在LSTM中上式可能就会变成:

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

因为 RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题 ,这样就解决了传统RNN中梯度消失的问题。



来源:

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


相关文章:

  • 2021-04-26
  • 2022-12-23
  • 2021-11-05
  • 2022-01-02
  • 2021-12-01
猜你喜欢
  • 2022-01-18
  • 2021-09-29
  • 2021-11-20
  • 2021-11-03
  • 2021-04-30
  • 2021-09-22
  • 2021-11-08
相关资源
相似解决方案