了解 LSTM 单元与单元格

机器算法验证 神经网络 术语 lstm 循环神经网络 张量流
2022-01-27 09:08:14

我研究 LSTM 已经有一段时间了。我高度理解一切是如何运作的。但是,要使用 Tensorflow 来实现它们,我注意到BasicLSTMCell需要许多单位(即num_units)参数。

从对 LSTM 的这个非常彻底的解释中,我收集到单个LSTM 单元是以下之一

LSTM 单元

这实际上是一个 GRU 单元。

我假设 的参数num_unitsBasicLSTMCell指我们想要在一个层中相互连接的数量。

这就留下了一个问题——在这种情况下,什么是“细胞”?“细胞”是否等同于正常前馈神经网络中的一层?

4个回答

不幸的是,术语不一致。num_units在 TensorFlow 中是隐藏状态的数量,即您给出的方程式ht

此外,来自https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md

此包中的细胞定义与文献中使用的定义不同。在文献中,单元是指具有单个标量输出的对象。此包中的定义是指此类单元的水平阵列。

“LSTM 层”可能更明确,例如

def lstm_layer(tparams, state_below, options, prefix='lstm', mask=None):
    nsteps = state_below.shape[0]
    if state_below.ndim == 3:
        n_samples = state_below.shape[1]
    else:
        n_samples = 1

    assert mask is not None
    […]

大多数 LSTM/RNN 图只显示隐藏单元,但从不显示这些单元的单元。因此,混乱。每个隐藏层都有隐藏单元,其数量与时间步数一样多。此外,每个隐藏单元都由多个隐藏单元组成,如下图所示。因此,RNN中隐藏层矩阵的维数为(时间步数,隐藏单元数)。

在此处输入图像描述

尽管这个问题与我在这个答案中的回答几乎相同,但我想在图表中说明这个问题,这在今天的 seq2seq 模型中也让我有些困惑(感谢@Franck Dernoncourt 的回答)。在这个简单的编码器图中:

在此处输入图像描述

上面的每个都是不同时间步长中的相同单元格(单元格为 GRU 或 LSTM 与您的问题中的单元格相同),并且单元格中的权重向量(不是偏差)的大小相同(num_units/ num_hiddenstate_size 或 output_size) .hi

RNN 是一种特殊类型的图形模型,其中节点形成有向列表,如本文第 4 节所述:用于结构分类的监督神经网络我们可以认为是num_unitsCRF 中的标签数量(尽管 CRF 是无向的),并且矩阵()在所有时间步中都是共享的,就像 CRF 中的转移矩阵一样。W

keras.layers.LSTM(units, activation='tanh', ....)中, 是units隐藏状态的维度或长度传递给下一个 LSTM 单元/单元的激活向量的长度 - 下一个 LSTM 单元/单元是“上面的绿色图片,带有来自http://的门等colah.github.io/posts/2015-08-Understanding-LSTMs/

一个 LSTM 单元/单元(即来自http://colah.github.io/posts/2015-08-Understanding-LSTMs/的带有门等的绿色框)与中的units不同keras.layers.LSTM(units, activation='tanh', ....)

units有时也latent dimensions称为. 下面是unitsLSTM参数的详细解释:

https://zhuanlan.zhihu.com/p/58854907