LSTM 会记住之前的 windows 还是隐藏状态会重置?

Do LSTMs remember previous windows or is the hidden state reset?

我正在训练 LSTM 来预测时间序列的下一个值。假设我有给定形状 (2345, 95) 的训练数据和总共 15 个包含此数据的文件,这意味着我有 2345 window 它们之间有 50% 的重叠(时间序列分为 windows).每个 window 有 95 个时间步长。如果我使用以下模型:

input1 = Input(shape=(95, 1))
lstm1 = LSTM(units=100, return_sequences=False,
             activation="tanh")(input1)
outputs = Dense(1, activation="sigmoid")(lstm1)
model = Model(inputs=input1, outputs=outputs)
model.compile(loss=keras.losses.BinaryCrossentropy(),
              optimizer=tf.keras.optimizers.Adam(learning_rate=0.01))

我使用生成器提供此数据,它每次传递整个文件,因此一个时期将有 15 个步骤。现在我的问题是,在给定的时期,对于给定的步骤,LSTM 是否记得它看到的前一个 window,或者是在看到每个 window 后重置 LSTM 的记忆?如果它记得前面的windows,那么内存是不是只在一个epoch结束时重置?

我看过类似的问题 or https://datascience.stackexchange.com/questions/27628/sliding-window-leads-to-overfitting-in-lstm,但我不是很理解解释,就是不确定是否解释了我想要的内容。我正在寻找更多关于 LSTM 架构中整个 memory/hidden 状态重置位置的技术解释。

编辑:

  1. 所以根据我的理解,有两个概念我们可以称之为“内存” 这里。通过 BPTT 和隐藏状态更新的权重 的 LSTM 细胞。对于给定的 window 个时间步长,LSTM 可以 记住之前的时间步是什么,这是隐藏的 状态是我认为的。现在权重更新不直接 如果我理解正确,请反映记忆。
  2. 隐藏状态的大小,换句话说LSTM有多少 记住是由批量大小决定的,在这种情况下是一个 整个文件,但其他 question/answers (https://datascience.stackexchange.com/questions/27628/sliding-window-leads-to-overfitting-in-lstm and ) 声明如果我们 必须 windows 例如:[1,2,3] 和 [4,5,6] LSTM 没有 知道 4 在 3 之后,因为它们在不同的 windows, 即使它们属于同一批次。所以我仍然不确定如何 LSTM
  3. 中保留了准确的记忆
  4. 当我们查看 LSTM 单元图时,隐藏状态在 windows 之间重置是有道理的。但是权重只会在每一步之后更新,那么隐藏状态在哪里发挥作用呢?

您所描述的称为“时间反向传播”,您可以 google 对于描述该过程的教程。

你的担心一方面是有道理的,另一方面也是不合理的。

LSTM 能够跨多个训练迭代进行学习(例如多个 15 步间隔)。这是因为 LSTM 状态正从一次迭代(例如多个 15 步间隔)向前传递到下一次迭代。这是在多次训练迭代中向前馈送信息。

您的担心是有道理的,因为模型的权重仅针对 15 个步骤(加上您拥有的任何批量大小)进行更新。只要 15 个步骤足以让模型捕捉到有价值的模式,它通常会学习一组很好的权重,这些权重可以泛化到 15 个步骤之外。一个很好的例子是 Karpathy 的“The unreasonable effectiveness of RNNs”中描述的莎士比亚人物识别模型。

总而言之,该模型正在学习为下一步创建良好的隐藏状态,平均超过您定义的 15 个步骤集。 LSTM 通常会通过查看这些有限部分中的数据来生成良好的通用解决方案。类似于批量训练,但随着时间的推移按顺序进行。

我可能会注意到 100 是 LSTM 中更典型的步数上限。在大约 100 步处,您开始看到 vanishing gradient problem in which the earlier steps contribute nearly nothing to the gradient.

请注意,重要的是要确保您在一个情节(任何连续序列)的过程中将 LSTM 状态从训练步骤向前传递到训练步骤。如果错过这一步,模型肯定会受到影响。