我正在尝试了解 RNN 的架构。我发现本教程非常有帮助:http ://colah.github.io/posts/2015-08-Understanding-LSTMs/
这如何适应前馈网络?这个图像只是每一层中的另一个节点吗?
我正在尝试了解 RNN 的架构。我发现本教程非常有帮助:http ://colah.github.io/posts/2015-08-Understanding-LSTMs/
这如何适应前馈网络?这个图像只是每一层中的另一个节点吗?
A 实际上是一个完整的层。该层的输出是,实际上是神经元输出,可以插入到 softmax 层(如果你想要时间步的分类,例如)或其他任何东西,如另一个 LSTM 层,如果你想更深入的话。这一层的输入是它与常规前馈网络的不同之处:它同时接受输入以及前一个时间步中网络的完整状态(两者以及来自 LSTM 单元的其他变量)。
注意是一个向量。因此,如果您想与具有 1 个隐藏层的常规前馈网络进行类比,则可以认为 A 代替了隐藏层中的所有这些神经元(加上重复部分的额外复杂性)。
在您的图像中,A 是具有单个隐藏神经元的单个隐藏层。从左到右是时间轴,在底部你每次都会收到一个输入。在顶部,可以通过添加层来进一步扩展网络。
如果您及时展开该网络,就像您的图片中直观显示的那样(从左到右,时间轴展开),那么您将获得一个前馈网络,其中包含 T(总时间步长)隐藏层,每个隐藏层包含一个在中间 A 块中绘制的单个节点(神经元)。
希望这能回答你的问题。
我想在一个相对复杂的上下文中解释这个简单的图表:seq2seq 模型的解码器中的注意力机制。
在下面的流程图中,到是时间步长(与输入数字的长度相同,带有用于空白的 PAD)。每次将单词放入第 i 个(时间步长)LSTM 神经元(或与图像中的三个中的任何一个相同的内核单元)时,它都会根据其先前的状态计算第 i 个输出(第(i-1)个输出)和第 i 个输入. 我用这个来说明你的问题是因为时间步长的所有状态都保存在注意力机制中,而不是仅仅为了获得最后一个状态而被丢弃。它只是一个神经元,被视为一个层(可以堆叠多个层,例如在某些 seq2seq 模型中形成双向编码器,以在更高层中提取更多抽象信息)。
然后它将句子(L 个单词和每个单词表示为形状的向量:embedding_dimention * 1)编码为 L 张量列表(每个形状:num_hidden/ num_units * 1)。并且经过解码器的状态只是列表中每个项目的相同形状的句子嵌入的最后一个向量。
图片来源:注意力机制