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 单元的多个副本,在你继续训练时得到训练。
目前正在学习RNN,尤其是LSTM网络。看了很多题目,包括this one,还是有一些误解。
下图来自this article and it represents single RNN cell unfolded in time.
文章中的另一张图片表示及时展开的单个 LSTM 单元。
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 单元的多个副本,在你继续训练时得到训练。