我正在尝试理解和实现多层LSTM。问题是我不知道他们是如何联系的。我有两个想法:
在每个时间步,第一个LSTM的隐藏状态H将成为第二个LSTM的输入。
在每个时间步,第一个LSTM的隐藏状态H将成为第二个LSTM隐藏状态的初始值,第一个LSTM的输入将成为第二个LSTM的输入。
请帮忙!
答案 0 :(得分:1)
TLDR:每个LSTM单元在时间t和级别l都有输入x(t)和隐藏状态h(l,t) 在第一层中,输入是实际序列输入x(t)和先前的隐藏状态h(l,t-1),在下一层中,输入是先前层h中相应单元格的隐藏状态(l-1,t)。
来自https://arxiv.org/pdf/1710.02254.pdf:
增加GRU网络的容量(Hermans和 Schrauwen 2013),循环层可以堆叠在 彼此。 由于GRU没有两个输出状态,因此相同的输出隐藏状态h'2 被传递到下一个垂直层。换句话说,下一层的h1等于h'2。 这迫使GRU学习沿深度和时间有用的变换。
答案 1 :(得分:0)
我正在接受colah's blog post的帮助,只是因为我会缩短它以使你理解特定部分。
正如您可以看到上面的图像,LSTM具有这种链状结构,每个都有四个神经网络层。
我们传递给下一个时间戳(单元状态)和下一层(隐藏状态)的值基本相同,它们是所需的输出。此输出将基于我们的单元状态,但将是过滤版本。首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分。然后,我们将单元格状态设置为tanh(将值推到介于-1和1之间)并将其乘以sigmoid门的输出,以便我们只输出我们决定通过的部分。
我们还将先前的单元状态信息(下一个单元格的顶部箭头)传递到下一个时间戳(单元状态),然后决定使用sigmoid层(忘记门层),我们将继续获取新输入和来自先前州的输入。
希望这有帮助。
答案 2 :(得分:0)
在PyTorch中,多层LSTM的实现表明上一层的隐藏状态成为下一层的输入。所以您的第一个假设是正确的。
答案 3 :(得分:-1)
没有明确的答案。这取决于你的问题,你应该尝试不同的东西。
您可以做的最简单的事情是将第一个LSTM(不是隐藏状态)的输出作为第二层LSTM的输入(而不是对它施加一些损失)。这应该适用于大多数情况。
您也可以尝试管理隐藏状态,但我没有经常看到它。
您还可以尝试其他组合。比如第二层,您输入第一层的输出和原始输入。或者您链接到当前单位和前一单元的第一层输出。
这一切都取决于你的问题,你需要尝试看看哪些对你有用。