LSTM 中使用了多少次展开重要吗?
Does it matter how many unrollings are used in an LSTM?
我不明白为什么展开次数,即训练或预测期间一次考虑的时间步数,在 LSTM 中非常重要。无论 unrollings/timesteps 的数量是 1 还是 100,LSTM 状态都会在每个时间步发生变异。这仅仅是随机梯度下降与常规前馈神经网络中的小批量梯度下降之间的区别吗?
假设您有 100,000 个有序训练示例。您可以按顺序一次训练一个示例。
假设在预测时,你有一个 "sentence"(例如)有 10 个单词,你想预测第 11 个单词。您可以在展开的网络中一次将 10 个单词输入 LSTM,或者您可以一次将一个单词输入 LSTM,然后观察第 10 个单词之后的预测。我怀疑如果我们试图为不同长度的句子预测下一个单词,一次一个例子的网络会有问题(因为理想情况下我们会在不同句子的预测之间重置短期记忆)但是我对此很模糊,非常感谢回答者的任何见解。
展开仅为训练定义。在评估期间没有展开之类的东西,您只需输入数据并保持隐藏状态。但是,对于训练,它具有巨大的效果。为了更好地理解这一点,让我们看一下展开 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
在反向传播过程中,LSTMt+3和LSTMt+2[=30之间有no信号=],因为前向循环中使用的参数已经更新。为了从 LSTMt+3 和 LSTMt+2 获得 "flow" 的信息,你必须存储 xt+2 在内存中能够计算偏导数,但是没有流向 LSTMt+1,所以你需要 xt+1 在内存中也是如此,依此类推。另一方面,长展开可能会使梯度流动变得困难,从而导致问题。
这比仅仅决定批量大小要大得多:在这里,您实际上是在处理一种情况下缺乏学习信号,而另一种情况下可能需要更艰苦的训练。此外,在许多应用程序中,您根本无法展开直到序列的末尾,因为某些序列可能是无限的,或者实际上需要对模型做其他事情(例如在 RL 中,一方面适合模型,但,另一方面,您使用完全相同的模型来收集新数据)。
我不明白为什么展开次数,即训练或预测期间一次考虑的时间步数,在 LSTM 中非常重要。无论 unrollings/timesteps 的数量是 1 还是 100,LSTM 状态都会在每个时间步发生变异。这仅仅是随机梯度下降与常规前馈神经网络中的小批量梯度下降之间的区别吗?
假设您有 100,000 个有序训练示例。您可以按顺序一次训练一个示例。
假设在预测时,你有一个 "sentence"(例如)有 10 个单词,你想预测第 11 个单词。您可以在展开的网络中一次将 10 个单词输入 LSTM,或者您可以一次将一个单词输入 LSTM,然后观察第 10 个单词之后的预测。我怀疑如果我们试图为不同长度的句子预测下一个单词,一次一个例子的网络会有问题(因为理想情况下我们会在不同句子的预测之间重置短期记忆)但是我对此很模糊,非常感谢回答者的任何见解。
展开仅为训练定义。在评估期间没有展开之类的东西,您只需输入数据并保持隐藏状态。但是,对于训练,它具有巨大的效果。为了更好地理解这一点,让我们看一下展开 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
在反向传播过程中,LSTMt+3和LSTMt+2[=30之间有no信号=],因为前向循环中使用的参数已经更新。为了从 LSTMt+3 和 LSTMt+2 获得 "flow" 的信息,你必须存储 xt+2 在内存中能够计算偏导数,但是没有流向 LSTMt+1,所以你需要 xt+1 在内存中也是如此,依此类推。另一方面,长展开可能会使梯度流动变得困难,从而导致问题。
这比仅仅决定批量大小要大得多:在这里,您实际上是在处理一种情况下缺乏学习信号,而另一种情况下可能需要更艰苦的训练。此外,在许多应用程序中,您根本无法展开直到序列的末尾,因为某些序列可能是无限的,或者实际上需要对模型做其他事情(例如在 RL 中,一方面适合模型,但,另一方面,您使用完全相同的模型来收集新数据)。