LSTM 中使用多少次展开有关系吗?

fog*_*orn 4 machine-learning lstm

我不明白为什么展开的数量,即在训练或预测期间一次考虑的时间步数,在 LSTM 中非常重要。无论展开/时间步数是 1 还是 100,LSTM 状态在每个时间步都会发生突变。这是否仅仅类似于常规前馈神经网络中随机梯度下降与小批量梯度下降之间的区别?

  • 假设您有 100,000 个有序训练示例。您可以按顺序一次训练一个示例。

  • 假设在预测时,您有一个包含 10 个单词的“句子”(例如),并且您想要预测第 11 个单词。您可以在展开的网络中一次向 LSTM 提供 10 个单词,也可以一次向 LSTM 提供一个单词,然后观察第 10 个单词之后的预测。我怀疑,如果我们试图预测不同长度的句子的下一个单词,那么一次一个示例网络将会出现问题(因为理想情况下,我们会在不同句子的预测之间重置短期记忆),但是我对此非常模糊,希望回答者能提供任何见解。

lej*_*lot 5

展开仅为训练而定义。在评估过程中,没有展开这样的事情,您只需输入数据并保持隐藏状态。但对于训练来说,却有着巨大的作用。为了更好地理解这一点,让我们看一下下面的展开图 3。

                       UPDATE
                          |
                          v
LSTM_t-LSTM_t+1-LSTM_t+2     LSTM_t+3-LSTM_t+4-LSTM_t+5 .... 
 |      |        |            |        |        |
x_t    x_t+1    x_t+2        x_t+3    x_t+4    x_t+5
Run Code Online (Sandbox Code Playgroud)

在反向传播期间,LSTM t+3和 LSTM t+2之间没有信号,因为前向循环中使用的参数已经更新。为了获得来自 LSTM t+3和 LSTM t+2的信息“流” ,您必须将 x t+2存储在内存中才能计算偏导数,但这样就没有流向 LSTM t+ 1,因此内存中还需要 x t+1,依此类推。另一方面,较长的展开可能会使梯度流动变得困难,从而引起问题。

这是一个比决定批量大小要大得多的问题:在这里,您实际上正在处理一种情况下缺乏学习信号的问题,而在另一种情况下可能需要更困难的训练。此外,在许多应用中,你根本无法展开直到序列结束,因为某些序列可能是无限的,或者需要对模型进行其他操作(例如在 RL 中,一方面适合模型,但另一方面) ,另一方面,您使用完全相同的模型来收集新数据)。