长短期记忆网络(通常称为“ LSTM”)是一种特殊的RNN,能够学习长期依赖关系。 它们是由Hochreiter&Schmidhuber(1997)引入的,并在随后的工作中被许多人提炼和推广。1它们在处理各种各样的问题上表现出色,现已被广泛使用。
LSTM被明确设计为避免长期依赖问题。 长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!
所有的递归神经网络都具有神经网络的重复模块链的形式。 在标准RNN中,此重复模块将具有非常简单的结构,例如单个tanh层。
LSTM也具有这种链状结构,但是重复模块具有不同的结构。 而不是只有一个神经网络层,而是有四个以非常特殊的方式进行交互的层。
不必担心发生的事情的细节。 稍后,我们将逐步介绍LSTM图。 现在,让我们先尝试一下将要使用的符号。
在上图中,每条线都承载着整个矢量,从一个节点的输出到另一节点的输入。 粉色圆圈表示逐点操作,例如矢量加法,而黄色框表示学习的神经网络层。 合并的行表示串联,而分叉的行表示要复制的内容,并且副本将到达不同的位置。
LSTM背后的核心思想
LSTMs的关键是单元状态,即贯穿图表顶部的水平线。
单元的状态有点像传送带。它沿着整个链向下延伸,只有一些小的线性相互作用。很容易让信息不加改变地沿着它流动。
LSTM确实有能力删除或添加信息到cell状态,由称为门的结构仔细地调节。
门是一种选择性地让信息通过的方式。它们由一个sigmoid型神经网络层和一个点态乘法运算组成。
sigmoid层输出0到1之间的数字,描述有多少组件应该通过。值为零意味着“不让任何东西通过”,值为1意味着“让所有东西通过”。
一个LSTM有三个这样的门,以保护和控制单元的状态。
**
Step-by-Step LSTM Walk Through
**
在我们的LSTM中,第一步是决定从单元状态中丢弃哪些信息。 这是由一个 叫做“forget gate layer.”的sigmoid layer 决定的
下一步是决定在单元格状态中存储什么新信息
首先,一个称为“输入门层”的sigmoid层决定我们将更新哪些值。
接下来,一个tanh层创建一个新的候选值的向量 Ct。
然后将结合这两者来创建对状态的更新。
这一步其实是用来替换上一步丢弃的内容的。
Ct是新的信息,代替Ct-1
最后,我们需要决定输出什么
首先,我们运行一个sigmoid层,它决定我们将输出单元状态的哪些部分。让单元格状态通过tanh层(-1,1),然后和sigmoid层结果相乘,这样就可以得到我们想要输出的信息ht
Variants on Long Short Term Memory
到目前为止,我所描述的是一个非常普通的LSTM。但并非所有的lstm都与上面的相同。实际上,似乎几乎所有涉及LSTMs的论文都使用了略微不同的版本。差别很小,但有一些值得一提。
上面的图给所有的门都增加了窥视孔,但是很多论文只给出了一些窥视孔而没有给出其他的。
耦合遗忘,大致是只有在遗忘了旧值的时候才添加新的状态。
遗忘和输入组合。隐藏输出与单元状态合并。
Conclusion
前面,我提到了人们使用RNNs所取得的显著成果。实际上,所有这些都是使用LSTMs实现的。它们在大多数任务上都做得更好!
将LSTMs写成一组方程,看起来相当吓人。希望在本文中一步一步地了解它们能让它们变得更容易理解。