LSTM 中隐藏层的大小和单元状态层的大小有什么关系?

人工智能 神经网络 张量流 循环神经网络 长短期记忆
2021-10-25 21:16:11

我通过一些示例来熟悉 TensorFlow 的 LSTM API,但注意到所有 LSTM 初始化函数只需要num_units参数,它表示单元格中隐藏单元的数量。

根据我从著名的 colah 的博客中了解到的,细胞状态与隐藏层无关,因此它们可以用不同的维度表示(我认为),然后我们应该传递至少 2 个参数,分别表示#hidden#cell_state

所以,当我试图弄清楚 TensorFlow 的细胞做什么时,这让我很困惑。在幕后,他们是为了方便而实现的,还是我误解了博客中提到的某些内容?

尺寸图

3个回答

我遇到了与您对尺寸问题非常相似的问题。这是纲要:

您在 LSTM 单元中看到的每个节点都具有完全相同的输出维度,包括单元状态否则,你会看到忘记门和输出门,你怎么可能用细胞状态做一个元素明智的乘法呢?它们必须具有相同的尺寸才能正常工作。

使用以下示例n_hiddenunits = 256

Output of forget gate: 256
Input gate: 256
Activation gate: 256
Output gate: 256
Cell state: 256
Hidden state: 256

现在,如果您希望 LSTM 输出大小为 5 的 one hot 向量,这显然是有问题的。因此,要做到这一点,在隐藏状态的末尾添加一个 softmax 层,以将其转换为正确的维度。所以只是一个具有正常权重的标准 FFNN(没有偏差,因为 softmax)。现在,还假设我们输入一个大小为 5 的 one hot 向量:

input size: 5
total input size to all gates: 256+5 = 261 (the hidden state and input are appended)
Output of forget gate: 256
Input gate: 256
Activation gate: 256
Output gate: 256
Cell state: 256
Hidden state: 256
Final output size: 5

那是细胞的最终尺寸。

我对由 4 个单元组成的 LSTM 层的理解如下图所示: 具有 4 个单元的 LSTM 层

这可以解释这样一个事实,即整个层的隐藏状态具有与隐藏状态(或单元格)完全相同的维度。

但是,我仍然不完全理解的是 LSTM 层之间的“返回序列”,它将形状从 [hidden_​​states] 更改为 [x_dimension, hidden_​​states]。这是因为通常我们只关心最后一个cell的状态,而在连接多层时,cell的所有状态都会传递到下一层。尽管如此,我仍然无法以图形方式理解它。

例如 model = keras.models.Sequential([ keras.layers.LSTM(20, return_sequences=True, input_shape=[None, 1]), keras.layers.LSTM(20, return_sequences=True), keras.layers.TimeDistributed(keras.layers.Dense(10)) ])

查看计算隐藏状态作为单元状态和输出门函数的方程:

ht=tanh(Ct)ot
这个方程意味着隐藏状态和单元状态具有相同的维度。