LSTM 中使用了多少次展开重要吗?

Does it matter how many unrollings are used in an LSTM?

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

展开仅为训练定义。在评估期间没有展开之类的东西,您只需输入数据并保持隐藏状态。但是,对于训练,它具有巨大的效果。为了更好地理解这一点,让我们看一下展开 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 中,一方面适合模型,但,另一方面,您使用完全相同的模型来收集新数据)。