摘自:https://zybuluo.com/hanbingtao/note/581764 写得非常好 见原文
长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
上图仅仅是一个示意图,我们可以看出,在t时刻,LSTM的输入有三个:当前时刻网络的输入值、上一时刻LSTM的输出值、以及上一时刻的单元状态;LSTM的输出有两个:当前时刻LSTM输出值、和当前时刻的单元状态。注意、、都是向量。
LSTM的关键,就是怎样控制长期状态c。在这里,LSTM的思路是使用三个控制开关。第一个开关,负责控制继续保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。三个开关的作用如下图所示:
接下来,我们要描述一下,输出h和单元状态c的具体计算方法。
长短时记忆网络的前向计算
下图显示了遗忘门的计算:
接下来看看输入门,下图表示了输入门的计算:
接下来,我们计算用于描述当前输入的单元状态,它是根据上一次的输出和本次输入来计算的,下图是计算:
现在,我们计算当前时刻的单元状态。它是由上一次的单元状态按元素乘以遗忘门,再用当前输入的单元状态按元素乘以输入门,再将两个积加和产生的,下图是计算:
这样,我们就把LSTM关于当前的记忆和长期的记忆组合在一起,形成了新的单元状态。由于遗忘门的控制,它可以保存很久很久之前的信息,由于输入门的控制,它又可以避免当前无关紧要的内容进入记忆。下面,我们要看看输出门,它控制了长期记忆对当前输出的影响。
下图表示输出门的计算:
LSTM最终的输出,是由输出门和单元状态共同确定的。
下图表示LSTM最终输出的计算:
式1到式6就是LSTM前向计算的全部公式。至此,我们就把LSTM前向计算讲完了。