通过例子理解LSTM

Lin*_*Guo 3 python neural-network lstm recurrent-neural-network

我想在 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] )
Run Code Online (Sandbox Code Playgroud)

我知道忘记状态是 sigmoidhtminus1xt

那么,是吗?

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

>> ft = array([0.47502081, 0.68997448, 0.549834  , 0.4875026 , 0.66818777])
Run Code Online (Sandbox Code Playgroud)

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

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

在此处输入图片说明

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

在此处输入图片说明

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

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

在此处输入图片说明

ANA*_*N S 5

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

  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)
Run Code Online (Sandbox Code Playgroud)

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

  • 在遗忘门中你不能_仅_获得 0 或 1:sigmoid 输出一个 [0,1] 之间的值。训练完你的权重后,当忘记门被触发时,该门的输出将非常接近 1。 (2认同)