RNNLSTM细胞的解释

问题描述 投票:0回答:1

目前我正在学习RNN,尤其是LSTM网络。我看了很多专题,包括 这个 而我仍然有一些误解.下面的图片来自于 本文 并且它代表单个RNN细胞展开的时间。enter image description here1. 我理解得对吗,RNN细胞不是Feedforward神经网络中的单个神经元,而是单层神经元,是它的内部?

文章中的另一张图片代表了单层LSTM细胞在时间上的展开。enter image description here2. 根据第一个问题的逻辑,从Feedforward神经网络的角度来看,LSTM细胞不是一个单一的神经元,而是一组4层的神经元,是在它的内部吗?

3. 粗略的说,我们是否可以说,RNN(或LSTM)层(比如用Keras层来说)就是我们所说的 "细胞"?

先谢谢您的解答!

deep-learning lstm recurrent-neural-network
1个回答
1
投票

考虑到你发布的图,正如你所看到的,每个单元都使用其前体单元的输出。例如,当你想输入 x2 到您的LSTM网络中,您必须使用 h1 的向量,以及前一个单元的输出(即前一个时间步长的输出)。x2. 喂养这两个人会给你 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(LSTMGRU)单元,它有一堆可训练的参数,如权重矩阵和偏置。这些参数都是相同的,并且被每个 X[i]hidden 实例,在每次迭代时都会被输入到RNN单元中。

所以回到你的问题,一个RNN网络实际上是一个RNN单元的多个副本,随着你的继续训练而得到训练。

© www.soinside.com 2019 - 2024. All rights reserved.