通过示例了解 LSTM

人工智能 神经网络 Python 循环神经网络 长短期记忆
2021-11-07 10:12:17

我想在 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个回答

在此处输入图像描述

这是一个更好地理解 lstm 的图像......在ft,我们取一个权重矩阵的 sigmoid * 当前时间步的输入 + 另一个权重矩阵 *ht1

代码示例ft

import numpy as np
import math

def sigmoid(values):
    sigmoid_applied = []
    for value in values:
        result = 1 / (1 + math.pow(math.e, -value))
        sigmoid_applied.append(result)
    return np.array(sigmoid_applied)

w1 = np.random.uniform(0, 1, size=[hidden_vector_len, input_len])
w2 = np.random.uniform(0, 1, size=[hidden_vector_len, hidden_vector_len])

f_t = sigmoid(np.dot(w1, input) + np.dot(w2, prev_hidden_state)) # Its matrix multiplication and not just simple multiplication

注意 - 还有一个偏见术语,为了简单起见,我没有在这里包括在内

如果你明白ft,你也可以对其他州做同样的事情。

如果你觉得我在这篇文章的任何地方都错了,那么请考虑添加评论