Deep learning RNN/LSTM单元的解释

Deep learning RNN/LSTM单元的解释,deep-learning,lstm,recurrent-neural-network,Deep Learning,Lstm,Recurrent Neural Network,目前我正在学习RNN,尤其是LSTM网络。我读了很多话题,包括,但我仍然有一些误解。 下面的图像来自,它表示单个RNN单元在时间上展开。 1。我是否正确理解RNN细胞不是前馈神经网络中的单个神经元,而是它内部的一层神经元? 文章中的另一幅图像表示在时间上展开的单个LSTM单元。 2。根据第一个问题的逻辑,就前馈神经网络而言,LSTM细胞不是单个神经元,而是一组4层神经元吗? 3。粗略地说,我们可以说RNN(或LSTM)层(例如,就Keras层而言)是我们所称的“单元”吗? 提前感谢您的回答 考虑

目前我正在学习RNN,尤其是LSTM网络。我读了很多话题,包括,但我仍然有一些误解。 下面的图像来自,它表示单个RNN单元在时间上展开。 1。我是否正确理解RNN细胞不是前馈神经网络中的单个神经元,而是它内部的一层神经元?

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

3。粗略地说,我们可以说RNN(或LSTM)层(例如,就Keras层而言)是我们所称的“单元”吗?


提前感谢您的回答

考虑到您发布的图表,如您所见,每个单元都使用其前体单元的输出。例如,当您想将
x2
馈入LSTM网络时,必须使用上一个单元格中的
h1
(即上一个时间步的输出)以及
x2
的向量。给这两个细胞喂食将产生
h2
,然后将其向前传播到下一个细胞。这是timestep
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/GRU单元(每个单元使用最后一个单元的输出)组成一个RNN层/网络。所以粗略地说,细胞可以被视为FFNN术语中的神经元,尽管它们的功能不同。@inverted_index,谢谢你的回答。“一组绑定在一起的RNN/LSTM/GRU单元”是什么意思?它是当前时间段的一组单元格,还是一个单元格随时间的“拷贝”集?因此,据我所知,操作原理如下:1。我们正在创建模型(例如,指定输入大小、时间步长等)2。添加RNN层。模型尚未启动,因此该RNN层实际上只是一个RNN单元(即一个神经元层)。3.模型启动。4.RNN单元的副本是随时间创建的,因此创建的RNN单元将成为一个大小为T(时间步数)的层。换句话说,RNN层由一个原始RNN单元及其副本组成。我说得对吗?非常感谢!你真的帮助我理解了这一点