在 LSTM 中,[h(t-1)] 如何与 [h(t)] 大小相同?

In an LSTM, how is [h(t-1)] the same size as [h(t)]?

我似乎无法在任何地方找到这个具体问题的答案。 我正在从头开始重新创建一个 LSTM,因为我想更好地理解它。

我画出了我目前对 LSTM 的理解,并将其附加到此 post。

如果它采用 h(t-1) 并将其与 x(t) 连接起来,这将生成比 h(t-1) 更大的向量。 Sigmoid 稍后应用于此串联向量,tanh 应用于细胞状态,然后将它们相乘。这会产生新的隐藏状态。

那么 h(t) 怎么不比 h(t-1) 大呢?为什么隐藏状态不随每个时间步增长?

Illustration

嗯,在图中的某些步骤中隐藏了一些投影步骤。图中的“sigmoid”符号实际上意味着 将 sigmoid 函数应用于线性投影运算的输出。 也就是说;使用 @ 进行矩阵乘法,numpy 样式,您不是简单地采用 sigmoid([h(t-1); x(t)]),您实际上是采用 sigmoid(W @ x(t) + U @ h(t-1))(暂时不考虑偏置项),其中 W, U 是具有学习参数的投影矩阵。

在矩阵领域,这在数学上确实等同于连接 hx(t) = [h(t-1); x(t)] 并学习一些适当大小的参数 V,这样 V @ hx(t) 就是您的 sigmoid 的输入。事实上,V 只是 U, W(按此顺序)从上方水平连接。

现在,让我们研究一下图表中的示例。你有 h(t-1) 的形状 (3,)x(t) 的形状 (2,),我们将学习 W 的形状 (3, 2)U使用形状 (3, 3) 产生形状 (3,) 的最终输出,这与 h(t-1) 相同。请注意,如果我们决定将其表示为形状为 (5,) 的连接向量 hx(t),实际上,我们可以水平合并 U, W 以达到形状为 (3, 5) 的东西 - - 这仍然会产生所需形状的最终输出 (3,).

要达到 h(t),您需要用单元状态项(在图中标记为 x 的节点处)再进行一次逐元素乘法运算,但结果是形状也 (3,)

Wikipedia page provides an exact overview with all the operations and dimensions as well, which is a more compact form of the equations provided in Section 2 of Gers, Schmidhuber, and Cummins.