LSTM 的遗忘层是如何工作的?

人工智能 神经网络 长短期记忆 数学
2021-10-17 23:35:56

有人可以解释 LSTM 的遗忘层背后的数学直觉吗?

据我了解,细胞状态本质上是长期记忆嵌入(如果我错了,请纠正我),但我也假设它是一个矩阵。然后通过连接先前的隐藏状态和当前输入并添加偏置来计算遗忘向量,然后将其通过一个输出向量的 sigmoid 函数,然后乘以单元状态矩阵。

前一个输入和当前输入的隐藏状态与偏差的连接如何帮助忘记什么?

为什么将之前的隐藏状态、当前输入和偏差放入一个 sigmoid 函数中?sigmoid 是否有一些特殊的特征可以创建一个重要的嵌入向量?

我真的很想了解计算单元状态和隐藏状态背后的理论。大多数人只是告诉我把它当作一个黑匣子来对待,但我认为,为了成功地将 LSTM 应用于一个问题,我需要知道幕后发生了什么。如果有人有任何有助于学习为什么细胞状态和隐藏状态计算在短期和长期记忆中提取关键特征背后的理论的资源,我很乐意阅读。

1个回答

TL;DR这是一个带有图表的漂亮解释:来源

讲话:

细胞状态本质上是长期记忆嵌入(如果我错了,请纠正我)

嵌入可以是长期或短期的,它是一个向量。

回答:

为什么将之前的隐藏状态、当前输入和偏差放入一个 sigmoid 函数中?sigmoid 是否有一些特殊的特征可以创建一个重要的嵌入向量?

摘自来源:

sigmoid 层输出 0 到 1 之间的数字,描述应该让每个组件的多少。值 0 表示“不让任何东西通过”,而值 1 表示“让所有东西通过!”

形式上,忘记向量是:

ft=σ(Wf[ht1,xt],+bf)

所以我们看到它实际上是一个线性操作,然后是一个非线性操作,它将值限制在 0 和 1 之间。这之后是对前一个单元状态的元素操作。那就是我们“门”/“过滤”之前的细胞状态:

Ct1ft,

在哪里是逐元素乘法。

因此,我们看到遗忘门实际上就像一个门:它要么让值通过,要么将它们推向零。因此,它的目的是分配要忘记/记住的值。

回答:

前一个输入和当前输入的隐藏状态与偏差的连接如何帮助忘记什么?

这种连接考虑了“滚动”隐藏状态当前输入。也就是说,线性运算会产生一个新向量,该向量可以看作是当前输入的“考虑嵌入”以及过去输入和单元状态的“总结”。然后 sigmoid 将这个“考虑嵌入”转换为忘记向量。

总之,遗忘门的主要目的是形成一个介于 0 和 1 之间的值向量。这个向量是通过考虑当前输入和先前的隐藏状态得到的。该向量用于通过逐元素乘法来忘记/记住先前单元状态的部分。所以,不,它不是一个黑匣子,它是一种高度考虑时间的非线性操作。

额外的直觉 - 更多的数学

回想一下,将右侧的矩阵乘以列向量会产生一个向量,该向量是矩阵列的线性组合。所以每一列Wf可以看作是一列“切换”,向上推到 1 或拉到 0(一旦我们应用 sigmoid)。也就是说,列Wf形成“切换空间”的一种“基础”。

当我们连接形成[ht1,xt]然后相乘,我们看到这个术语Wf[ht1,xt]考虑隐藏状态和输入。也就是说,两者ht1xt有手在切换门。

LSTM 从数据中学到了如何使这种切换“有意义”。下面是一个简单的象形图示例。

象形平行矩阵形式

那是,Wf[ht1,xt]将是列空间中的向量Wf(即“切换空间”)。因此,连接的向量将“指向”列(“toggle”)空间中的最佳“toggle”Wf. 这个“切换”然后被转换为“门空间”中的“门”。

如此直观地,忘记组件的范围是一种“门空间”,其中域是所有形式的向量[ht1,xt]. 正式地:

ft:[ht1,xt]gt

也就是说,遗忘门学习了从连接隐藏/输入域到可能门范围的最佳映射。

重要的提示

LSTM 只是众多类型的遗忘门映射中的一种。主要的收获是 LSTM在许多应用程序中都是凭经验工作的。

那就是忘记门是一般“门映射”的一个实例:

ft:vtgt,

在哪里vt可以是任意数量的连接产生的任意数量的向量。

结论

过去的一些数据与当前时间步无关。我们需要一种正确“忘记”无关信息的方法。“忘记”的一种方法是使用忘记门映射(如 LSTM 中的那个)。然后我们需要优化那个遗忘门的参数。在常见的 LSTM 架构中使用了一种实现。最后,前一个隐藏状态的连接为当前输入提供了上下文信息,这对遗忘非常有帮助。

更多数学直觉

这是从动态的角度来看 LSTM 中正在发生的事情的另一种观点:视频