我们之前提到的RNN序列结构是比较简单的序列结构,这个序列结构只能实现短时记忆,当我们序列很长的时候,会发生梯度消失的现象,就很容易遗漏一些比较重要的信息,因此我们引入了LSTM序列结构。
如图所示,上面的那条时间序列称为长序列c,下面的那条线是短时间序列h,红色的三个节点代表着sigmoid函数,两个蓝色的节点代表着tanh函数,我们都知道,sigmoid函数将输入缩放到0-1之间,而tanh函数将输入缩放到-1~1之间,接下来我们开始分析。我们先看最左边这个门,这个门叫做遗忘门,首先我们接收到上一时刻的ht-1的输入,与这一时刻的Xt叠加起来,然后与W1t做点积后进入到遗忘门中,遗忘门的作用是有选择性地遗忘,例如,输入中为0或者接近于0的部分就很容易被遗忘。遗忘门输出的结果再与ct-1对应位置相乘。继续探究第二个节点,第二个节点称为输入门,它与第三个节点配合使用,还是ht-1与xt的叠加与W2t点积后进入到输入门中,输入门的作用是有选择地加入,也就是对候选信息进行一次筛选,说白了输入门输出的东西是作为候选信息的权重来使用的,足够重要的信息才能够进入到长序列中,这样做能够更有效地保留着重要的信息。第三个节点就是我们简单序列中的那个激活函数,它的作用是输入与输出,它的输出就作为了我们的候选信息,依然是ht-1与xt的叠加与W3t做点积后进入到tanh函数中,得到的候选信息与输入门的输出相乘再加入到长序列中。这时我们的长序列已经可以输出了,长序列的值copy成两份,一份用于输出到下一时刻,一份流入第五个节点tanh函数,注意这里没有任何的权重,只是单纯的进入tanh函数进行缩放。第四个节点称为输出门,输出门的作用是有选择地输出,注意这里的选择是筛选上一时刻的短序列的信息有多大可能被输出到下一时刻,说白了这里的输出层也是为长序列的输出填上一层权重。注意这里的输出是要输出到短序列中,依然是ht-1与xt叠加后与W4t点积后输入到输出门中,输出门输出的结果与之前做完缩放长序列对应位置相乘后输出到短序列中。这就是整个过程。相比于简单序列,LSTM序列的输出由两个变成了三个,第一个是向上流出,注意这里的向上留出是短序列ht向上流出然后与V矩阵做点积再进入输出层输出,第二个是长序列向右流出,即流入下一个时刻,第三个是短序列向右流出,也是流入下一个时刻。