如何向量化 LSTM?
How to vectorize LSTMs?
特别是,我对 LSTM 层具有(比如说)50 个单元的含义感到困惑。考虑来自 this awesome blog post 的以下 LSTM 块:
假设我的输入 xt
是一个 (20,)
向量,隐藏层 ht
是一个 (50,)
向量。鉴于单元状态 Ct
在成为新的隐藏状态之前只经历了逐点操作(逐点 tanh
和 *
),我收集到 Ct.shape = ht.shape = (50,)
。现在遗忘门查看与隐藏层连接的输入,这将是一个 (20+50,) = (70,)
向量,这意味着遗忘门必须具有形状为 (50, 70)
的权重矩阵,使得 dot(W, [xt, ht]).shape = (50,)
.
所以我现在的问题是,当 Ct.shape = (50,)
时,我是否正在查看具有 50 个单元格的 LSTM 块?还是我误解了 LSTM 层有 50 个单元的含义?
我明白你对什么感到困惑。所以基本上,连接顶部代表细胞状态的两个框的黑线实际上是一组非常小的 50 条线组合在一起。这些与遗忘门的输出逐点相乘,遗忘门的输出由 50 个值组成。这 50 个值与细胞状态点相乘。
特别是,我对 LSTM 层具有(比如说)50 个单元的含义感到困惑。考虑来自 this awesome blog post 的以下 LSTM 块:
假设我的输入 xt
是一个 (20,)
向量,隐藏层 ht
是一个 (50,)
向量。鉴于单元状态 Ct
在成为新的隐藏状态之前只经历了逐点操作(逐点 tanh
和 *
),我收集到 Ct.shape = ht.shape = (50,)
。现在遗忘门查看与隐藏层连接的输入,这将是一个 (20+50,) = (70,)
向量,这意味着遗忘门必须具有形状为 (50, 70)
的权重矩阵,使得 dot(W, [xt, ht]).shape = (50,)
.
所以我现在的问题是,当 Ct.shape = (50,)
时,我是否正在查看具有 50 个单元格的 LSTM 块?还是我误解了 LSTM 层有 50 个单元的含义?
我明白你对什么感到困惑。所以基本上,连接顶部代表细胞状态的两个框的黑线实际上是一组非常小的 50 条线组合在一起。这些与遗忘门的输出逐点相乘,遗忘门的输出由 50 个值组成。这 50 个值与细胞状态点相乘。