我不明白为什么在LSTM中,展开的次数,即在训练或预测过程中一次考虑的时间步数,会非常重要。无论展开/时间步数是1还是100,LSTM的状态都会在每个时间步发生变化。这仅仅像是常规前馈神经网络中随机梯度下降与小批量梯度下降的区别吗?
-
假设你有100,000个有序的训练样本。你可以按顺序一次训练一个样本。
-
假设在预测时,你有一个“句子”(例如),包含10个单词,你想预测第11个单词。你可以一次将这10个单词输入到展开的网络中,或者你可以一次输入一个单词给LSTM,然后观察在第10个单词后的预测。我怀疑,如果我们试图为不同长度的句子预测下一个单词,一次一个样本的网络可能会有问题(因为理想情况下我们会在不同句子的预测之间重置短期记忆),但我对此非常模糊,希望回答者能提供一些见解。
回答:
展开仅在训练中定义。在评估期间没有展开这一说,你只是输入数据并保持隐藏状态。然而,对于训练,它有巨大的影响。为了更好地理解这一点,让我们来看一下展开3的以下图表。
UPDATE | vLSTM_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之间没有信号,因为前向循环中使用的参数已经更新。为了让信息从LSTMt+3流向LSTMt+2,你需要将xt+2存储在内存中,以便计算偏导数,但这样一来就无法流向LSTMt+1,所以你也需要xt+1在内存中,以此类推。另一方面,长的展开可能会使梯度流动变得困难,从而导致问题。
这是一个比仅仅决定批量大小更大的问题:在这里,你实际上是在处理一种情况下的学习信号缺乏,而另一种情况下的训练可能更加困难。此外,在许多应用中,你根本无法展开到序列的末尾,因为有些序列可能是无限的,或者你需要用模型做其他事情(就像在强化学习中,一方面你要拟合模型,但另一方面你也使用相同的模型来收集新数据)。