通过例子理解LSTM

我想在 LSTM 中编码一个时间步。我的重点是理解遗忘门层输入门层候选值现在未来的 细胞状态的功能

让我们假设我在 t-1 和 xt 的隐藏状态如下。为简单起见,我们假设权重矩阵是单位矩阵,并且所有偏差都为零。

htminus1 = np.array( [0, 0.5, 0.1, 0.2, 0.6] )
xt = np.array( [-0.1, 0.3, 0.1, -0.25, 0.1] )

我知道忘记状态是 sigmoidhtminus1xt

那么,是吗?

ft = 1 / ( 1 + np.exp( -( htminus1 + xt ) ) )

>> ft = array([0.47502081, 0.68997448, 0.549834  , 0.4875026 , 0.66818777])

我指的是这个链接来实现一个块 LSTM 的一次迭代。链接说ft应该是 0 或 1。我在这里遗漏了什么吗?

如何根据下面提到的图片中给出的模式获得遗忘门层?一个例子对我来说是说明性的。

同样,如何获得输入门层it和新候选值的向量,tilde{C}_t如下图所示?

最后,如何ht按照下图给出的方案获得新的隐藏状态?

一个简单的例子将有助于我理解。提前致谢。

回答

所以这从数字上看并不明显,但它是如何工作的 -

  1. 如果您看到两条线连接形成一条线,则这是一个串联操作。您已将其解释为添加。

  2. 无论您在哪里看到sigmoidtanh阻止,都暗示了与可训练权重矩阵的乘法。

  3. 如果两行通过显式x或 连接+,则分别进行元素乘法和加法。

因此sigmoid(htminus1+xt),您所拥有的不是,而是正确的操作是sigmoid(Wf * np.concatenate(htminus1+xt)) + bfWf是可训练参数的矩阵,bf是相应的偏差项。

请注意,我刚刚在图像右侧用 numpy 编写了方程式,其他内容不多。解释[a, b]a和之间的连接操作b

您可以类似地定义其他操作。

ft = sigmoid(Wf * np.concatenate(htminus1, xt)) + bf
it = sigmoid(Wi * np.concatenate(htminus1, xt)) + bi
Ctt = tanh(Wc * np.concatenate(htminus1, xt)) + bc
Ot = sigmoid(Wo * np.concatenate(htminus1, xt)) + bo

Ct = (C_{t-1} * ft) + (Ctt * it)
ht = Ot * tanh(Ct)

注意:我表示C^{tilda}Ctt

  • You can't get _only_ 0 or 1 in the forget gate: the sigmoid outputs a value between [0,1]. After training your weights this gate will output very close to 1 when the forget gate gets triggered.

以上是通过例子理解LSTM的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>