关于 LSTM 单元、单元和输入的问题

数据挖掘 机器学习 神经网络 深度学习 lstm
2021-10-01 07:43:38

我正在尝试学习LSTM网络是如何工作的,即使我掌握了基础知识,内部结构的细节对我来说也不清楚。

在这个博客链接上,我发现了这个LSTM架构方案

长短期记忆体

显然,每个圆圈都应对应于这样的单个LSTM单元

长短期记忆体

  1. 这个对吗?

  2. 单元格中的每个单元是否独立于其他单元?还是他们共享信息?

  3. 想象一下我有以下配置:样本数 = 1000 时间步数 = 10 特征数 = 5

在这种情况下,单元格中的每个单元都会将大小为 5 的向量作为输入,对吗?

但是一个单元的输出大小是多少?1?

谢谢

3个回答
  1. 这个对吗?

是的,这些图表对我来说都是正确的。理解这两个图的关键是 LSTM 单元的输入和输出是向量。

第一张图中的圆圈确实代表了该层包含多个单独的人工神经元的概念,这可能会让您假设第二张图是其中一个神经元的图片。可以说,一个细胞内有多个“神经元”或具有不同作用的子层,因为有多个地方可以计算表格F(WX+b)发生,扮演的角色略有不同。我认为术语“细胞”是用来指代这种神经元结构的。当我说“神经元”时,我倾向于想到隐藏层的输出级。

但是,在第二张图中,显示的所有操作都适用于向量。最重要的是,第二张图中从左到右的箭头表示从整个层的时间步到时间步的隐藏状态向量。因此,单元中的每个神经元都反复连接到该单元中的每个其他神经元 - 是 LSTM 中的两倍,因为 LSTM 既有内部单元状态,也有层输出。

  1. 单元格中的每个单元是否独立于其他单元?还是他们共享信息?

为了与您对图表的描述相匹配,让我们将“单元”定义为用于构成单元的每种类型的神经元/门的集合,理论上可以将其连接在一起以构成具有单个工作的 LSTM 单元层标量单元状态和输出值。

这些单位独立的,因为每个单位都有自己的权重参数。输入和单元之间的连接,或将状态从一个时间步转发到下一个时间步的递归连接没有共享参数。从这个意义上说,这些单位不共享信息。

但是,这些连接确实意味着在每个时间步长上,输入数据和隐藏状态加上来自单元中所有其他单元的最后输出的输出都被用于计算。任何单元单元都可以将其新的内部状态加上其输出基于单元中其他单元的所有其他输出和内部状态的值。从这个意义上说,这些单位确实共享信息。我从您的问题中猜想您所关心的可能是第二个问题,因为第二个图表让您想到了单个神经元的接线图,但如上所述,情况并非如此。

  1. 想象一下我有以下配置: 样本数 = 1000 时间步数 = 10 特征数 = 5 在这种情况下,单元格中的每个单元都将输入大小为 5 的向量,对吗?

几乎。细胞内的每个神经元将从X,加上隐藏层输出的输入,H. 因此,如果在您的情况下,LSTM 单元大小为 10,则每个神经元将采用 15 的组合向量。此外,还保留了第二个单元状态向量,未在图中标记。它不直接用作任何神经元的输入(即形式的组件F(WX+b)),但确实与其他值交互,并且可以通过各种门自行更改。在第二个图中,它是从左到右的最上面的箭头。

但是一个单元的输出大小是多少?1?

整个单元格将具有您制作图层的任何大小的输出。这就是图 2 试图显示的内容。然而,使用我们对“单元”的工作定义,每个单元的输出将是两个标量值 - 隐藏层输出和单元状态 - 这将是图中所示各自向量的一部分。

我认为你的图像贴错了标签。我认为每个蓝色框都是一个 LSTM 层,由多个单元/单元组成,每个单元都接受一个向量输入 x_t。

有了这个,你的问题的答案是:

1) 是的

2) 是的,它们是独立的(在单个时间步 - 它们在时间步之间相互共享信息)

3)是的,每个单元格将接受大小为 5 的输入。我认为输出大小始终为 1,类似于组合然后激活的神经网络节点(如 sigmoidal 单元)。

实际上这些形状是为了简化。如果您想知道正确的行为,您必须查看每个LSTM单元格的公式。要回答您的第一个问题,可能会有不同的答案。图片所描绘的属于多对多的任务,对于每个输入,您只需要一个输出。可以定义的序列有不同的任务:

  • 一对一
  • 一对多
  • 多对一
  • 多对多

你可以看看这里

为了说明每个LSTM单元格的公式,我给出了 Andrew Ng 教授关于深度学习的课程的以下图片:

在此处输入图像描述

如您所见,LSTM单元中的每个节点都可以间接连接到前一个时间步的相邻单元的输出。这是间接的,因为它们之间有门。还要考虑LSTM单元格共享不同时间步长的所有输入的权重。因此,单元中的每个神经元LSTM都依赖于当前时间步的输入和先前时间步的相邻节点的输出。

关于第三个问题,输入大小将等于每个时间步的输入特征数。正如我最初提到的,输出的数量取决于你的任务。看看第一个链接。