首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNN/LSTM信元的解释

RNN/LSTM信元的解释
EN

Stack Overflow用户
提问于 2020-04-24 02:03:01
回答 1查看 923关注 0票数 4

目前我正在学习RNN,特别是LSTM网络。我读过很多主题,包括这一个和我仍然有一些误解。下面的图像来自这篇文章,它表示单个RNN单元在时间上展开。

1.我是否正确理解,从前馈神经网络的角度来说,RNN细胞不是单个神经元,而是其内部的一层神经元?

文章中的另一张图像代表了在时间上展开的单个LSTM单元。

2.基于第一个问题的逻辑,从前馈神经网络的角度看,LSTM细胞不是一个单一的神经元,而是一组4层的神经元,在它的内部?

3.粗略地说,我们可以说,RNN (或LSTM)层(例如Keras层)是我们所称的“cell”?

提前感谢您的回答!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 04:24:44

考虑到您发布的图表,如您所见,每个单元使用其前体单元的输出。例如,当您想要将x2中的内容输入到您的LSTM网络时,您必须使用来自前一个单元格的h1 (即前一个时间步骤的输出)以及x2的向量。给这两个单元喂食会给您h2,然后它将被前向传播到下一个单元。这是timestep t=2中发生的事情的一个例子。

递归神经网络可以被认为是同一网络的多个副本,每个副本传递一个消息给后继人。但是,在教程中,您可以看到这些网络是为了便于理解而展开的。这并不是在实践中所发生的事情,因为所描绘的细胞并不是分开的,因为它们都有相同的参数,这些参数都会在每次反向传播迭代中得到更新。

为了让它更容易理解,请考虑下面的代码片段。

代码语言:javascript
复制
# 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单元的多个副本,当你进行训练时,它会被训练。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61399871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档