了解LSTM单位与细胞


32

我学习LSTM已有一段时间了。我从较高的角度了解一切。但是,要使用Tensorflow实施它们,我注意到BasicLSTMCell需要许多单位(即num_units)参数。

这个 LSTMs的非常详尽的解释,我已经收集单个LSTM单元是以下情况之一

LSTM单位

实际上是GRU单位

我假设参数num_unitsBasicLSTMCell指的是我们要多少,这些在层挂钩到对方。

这就提出了问题-在这种情况下什么是“单元”?“单元”是否等效于普通前馈神经网络中的一层?


我仍然很困惑,我在阅读colah.github.io/posts/2015-08-Understanding-LSTMs,我理解得很好。“单元”一词在该文章中如何应用?似乎本文中的LSTM单元格是Tensorflow中的向量,对吧?
Pinocchio

Answers:


17

不幸的是,该术语不一致。num_unitsTensorFlow中的隐藏状态数,即您给出的方程式中的维数。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
    […]

嗯,我知道了,因此“单元”是一个num_unit大小相互连接的LSTM单元的水平阵列。说得通。那么,这将类似于标准前馈网络中的隐藏层吗?

* LSTM状态单位

@rec没错
Franck Dernoncourt

1
@Sycorax,例如,如果神经网络的输入是具有10个时间步长的时间序列,则水平维度有10个元素。
弗兰克·德农古尔

1
我仍然很困惑,我在阅读colah.github.io/posts/2015-08-Understanding-LSTMs,我理解得很好。“单元”一词在该文章中如何应用?似乎本文中的LSTM单元格是Tensorflow中的向量,对吧?
Pinocchio

4

大多数LSTM / RNN图仅显示隐藏的单元格,而不显示这些单元的单位。因此,混乱。每个隐藏层都有隐藏的单元格,与时间步长一样多。而且,每个隐藏单元格都由多个隐藏单元组成,如下图所示。因此,RNN中隐藏层矩阵的维数为(时间步数,隐藏单位数)。

在此处输入图片说明


4

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

在此处输入图片说明

上面的每个在不同的时间步是相同的单元(GRU或LSTM单元与您的问题相同),并且单元中的权重向量(不偏倚)具有相同的大小(num_units / num_hiddenstate_size或output_size) 。hi


我相信num_units = n这个数字
Notilas

-1

在我看来,对于多层LSTM模型,单元格是指诸如隐藏单元格之类的节点,也称为隐藏节点,可以通过time_steps * num_layers计算单元格数,并且num_units等于time_steps


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.