LSTM相较传统RNN的优势
As the gap between the relevant information grows, RNNs become unable to learn to connect the information. But LSTM are capable of handling such “long-term dependencies.”.
LSTM Networks
LSTM被明确地设计为避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西。
在上图中,每条线都承载着整个矢量,从一个节点的输出到另一个节点的输入。粉色圆圈表示逐点操作,例如矢量加法,而黄色框表示学习的神经网络层。合并的行表示串联,而分叉的行表示要复制的内容,并且副本到达不同的位置。
The Core Idea Behind LSTMs
LSTM的关键是单元状态,水平线贯穿图的顶部。
单元状态有点像传送带。它沿整个链条一直沿直线延伸,只有一些较小的线性相互作用。信息不加改变地流动非常容易。
LSTM确实具有删除或向单元状态添加信息的能力,这些功能被称为门的结构精心调节。
闸门是一种选择性地让信息通过的方式。它们由S形神经网络层和逐点乘法运算组成。
Sigmoid Layer输出介于零和一之间的数字,描述每个组件中的多少应该被允许通过。值为零表示“不让任何内容通过”,而值为1表示“让所有内容通过!”
LSTM具有这些门中的三个,以保护和控制单元状态。
Step-by-Step LSTM Walk Through
“forget gate layer” decides what information we’re going to throw away from the cell state.
LSTM的第一步是决定要从单元状态中丢弃哪些信息。该决定由称为“忘记门层”的S形层决定。它查看ht-1和xt,并在单元状态Ct-1中为每个数字输出介于0和1之间的数字。 1代表“完全保留此条件”,而0代表“完全保留此条件”。
让我们回到语言模型的示例,该模型试图根据所有先前的单词来预测下一个单词。在这样的问题中,细胞状态可能包括当前受试者的性别,从而可以使用正确的代词。看到新主题时,我们想忘记旧主题的性别。
下一步是确定要在单元状态下存储哪些新信息。这包括两个部分。首先,称为“输入门层”的S形层决定了我们将更新哪些值。接下来,tanh层创建一个新候选值向量C̃t,该向量可以添加到状态中。在下一步中,我们将两者结合起来以创建该状态的更新。
在我们的语言模型示例中,我们希望将新主题的性别添加到单元格状态,以替换我们忘记的旧主题。
sigmod函数的数学公式为:
tanh(x)函数的数学公式为:
现在是时候将旧单元状态Ct-1更新为新单元状态Ct。前面的步骤已经确定了要做什么,我们只需要实际进行即可。
我们将旧状态乘以ft,忘记了我们早先决定忘记的事情。然后我们将它加* C̃t。这是新的候选值,根据我们决定更新每个状态值的大小来缩放。
就语言模型而言,这是我们实际删除旧主题的性别的信息并添加新信息的地方,正如我们在前面的步骤中所确定的那样。
最后,我们需要决定要输出什么。此输出将基于我们的单元状态,但将是过滤后的版本。首先,我们运行一个S型层,确定要输出的单元状态的哪些部分。然后,我们通过tanh放置单元状态(将值推到-1和1之间),然后将其乘以S型门的输出,以便仅输出确定的部分。
对于语言模型示例,由于它只是看到一个主语,因此可能要输出与动词相关的信息,以防万一。例如,它可能输出主语是单数还是复数,以便我们知道如果接下来要动词,则应将动词以哪种形式共轭。