RNN/LSTM 单元格的解释

Interpretation of RNN/LSTM cell

目前正在学习RNN,尤其是LSTM网络。看了很多题目,包括this one,还是有一些误解。 下图来自this article and it represents single RNN cell unfolded in time. 1.我是否理解正确,就前馈神经网络而言,RNN 单元不是单个神经元,而是其中的单层神经元?

文章中的另一张图片表示及时展开的单个 LSTM 单元。 2。根据第一个问题的逻辑,就前馈神经网络而言,LSTM 单元不是单个神经元,而是一组 4 层神经元吗?

3。粗略地说,我们可以说 RNN(或 LSTM)层(例如,就 Keras 层而言)就是我们所说的 'cell'?

提前感谢您的回答!

考虑到您发布的图表,如您所见,每个单元格都使用其前体单元格的输出。例如,当您想将 x2 馈入 LSTM 网络时,您必须使用前一个单元格中的 h1(即前一个时间步的输出)以及 [=11 的向量=].喂养这两个会给你 h2,然后将其传播到下一个单元格。这是时间步 t=2 中发生的事情的示例。

循环神经网络可以被认为是同一网络的多个副本,每个副本都将一条消息传递给后继者。但是在教程中,您会看到为了便于理解,这些网络是展开的。这并不是实际发生的事情,因为图中的单元格不是分开的,因为它们都具有相同的参数,这些参数会随着每次反向传播迭代而更新。

为了使其更易于理解,请考虑下面的代码片段。

# X is the input sequence (e.g., word embeddings vectors)
# steps is the input sequence length
# h0, and c0 are zero state vector (commonly done) that you want to 
# feed into the first RNN cell
# h_out is the hidden states that the RNN network outputs


X = torch.randn(seq_len, hidden_dim) 
steps = range(seq_len)
h0 = torch.zeros(seq_len, hidden_dim)
c0 = torch.zeros(seq_len, hidden_dim)
hidden = (h0, c0)
h_out = list()

for i in steps:
    # advance rnn
    hidden = RNN(X[i], hidden)
    hy, cy = hidden
    h_out.append(hy)

假设RNN(.,.)是一个RNN(LSTM/GRU)单元,它有一堆可训练的参数,比如权重矩阵和偏差。这些参数都是相同的,并且由每个 X[i]hidden 实例学习,这些实例在每次迭代时被馈送到 RNN 单元中。

回到你的问题,RNN 网络实际上是 RNN 单元的多个副本,在你继续训练时得到训练。