在 RNN 中学习初始状态

机器算法验证 lstm 循环神经网络
2022-03-12 22:10:18

我正在阅读 Hinton 关于循环网络的幻灯片(链接),他说网络的初始状态应该像权重一样学习(幻灯片 14)。如果是这样,我们将如何在测试期间处理未知的初始状态?

此外,在 Gers、Schraudolph 和 Schmidhuber(链接)的“Learning Precise Timing with LSTM”论文中,他们说“网络的初始状态也应该被学习”。但我从未读过大多数使用 RNN 的论文中使用的这种方法。有没有人将初始状态作为参数学习并从中获得更好的结果?如果是这样,您在测试期间是如何处理未知状态的?

2个回答

我假设您了解如何学习 RNN 中的所有其他权重。

所有状态都需要计算,即我们必须获取一些输入并将它们与一些权重矩阵相乘,然后将结果乘积通过一些激活函数,最终获得一个状态。

初始状态很奇怪,因为我们不是通过获取一些初始输入和权重矩阵的乘积来计算它们并使用激活函数——我们可以简单地“给”它们一些随机值。它们本质上是权重。

与其“手动”为它们分配一些值,不如像学习其他权重一样学习它们?这意味着我们必须对这些初始权重进行梯度,并像其他权重一样更新它们。

考虑它的另一种方法是考虑以下场景:让我们使用初始输入。我们可以将初始输入固定为1并学习一个初始权重矩阵。初始输入的乘积 (1) 并且初始权重矩阵将为您提供初始状态。在测试时,我们将继续使用初始输入1并将其与将产生初始状态的初始权重矩阵相乘。权重不会改变,所以初始状态也不会改变,而不是总是相乘1使用初始权重矩阵,您可以只保存初始状态。现在你基本上已经学会了一个初始状态!

其中一种方法在这里: http ://r2rt.com/non-zero-initial-states-for-recurrent-neural-networks.html

也许你可以创建两个 RNN(我从未尝试过,它只是在我脑海中浮现):第一个 RNN 将查看系列并学习状态。然后你可以将状态复制到下一个 rnn,它会尝试做你需要的东西。您可以端到端地学习它们。