我应该将哪个 NN 用于时间序列数据集,其模式随着时间的推移而变化

数据挖掘 张量流 rnn lstm 无监督学习
2021-09-23 03:54:32

我正在使用(监督)张量流深度学习分析时间序列数据集。tensorflow 代码有一系列输入,并且基于每个输入,NN 必须预测不久的将来的输出值。

对于培训,过去有很多预先标记的输入/输出。每个输入都是每个时间步的状态数组,每个输入都标有一个结果值。到目前为止,这种任务在深度学习中很常见,我使用了多个 GRU 层来解决这个问题。

但问题是,我发现寻找合适输出的模式实际上会随着时间的推移而变化。对于每 10 小时(大约),模式会发生变化,因此在每个模式周期的每个开始(例如总共 10 小时的前 1-2 小时),NN 的预测能力较差,但在那之后,预测率会提高。另外,我认为数据也有一些噪音。

到目前为止,我使用 GRU 的实现完成了它的工作,但如果可能的话,我想找到更好的方法来构建 NN。我目前知道一些基本的监督学习技术和一些高级技术,如 LSTM,对于无监督学习,我知道 DQN 和策略梯度。

2个回答

你知道新模式什么时候开始吗?每次在训练期间发生这种情况时,您都可以重置 RNN 的隐藏状态。本文更详细的解释:https ://arxiv.org/pdf/1706.04148.pdf

在那篇论文中,他们试图预测用户会话中的下一个项目。他们使用 GRU 创建用户级表示(在您的情况下可能是模式表示)和另一个 GRU 根据当前会话信息预测下一个项目。

为此,他们在每次会话更改时重置第二个 GRU 的隐藏状态,并在每次用户更改时重置第一个 GRU 的隐藏状态,我认为您可以在每次模式更改时重置隐藏状态。在这里很难解释清楚,我建议你阅读我之前提到的论文。

编辑:

要知道模式变化点在哪里,您可以训练另一个网络,可能使用 GRU 准确度大幅下降的标签点,然后使用该网络的预测在训练时重置这些点的隐藏状态,正如我之前提到的。

在@Andres Espinosa 的回答中结束讨论,这里有一个选项可以在没有任何额外门控巫毒的情况下适用。嵌套 LSTM论文,这里的实现嵌套 LSTM 的想法是建立时间抽象层次结构的想法 - 在您的情况下,这可能会捕获第一级的当前模式,以及在更深层次上切换模式的需要。

此外,还有一个关于为什么你的 LSTM 不工作的原始想法。在做额外的工作之前,也许值得尝试可视化LSTM激活从理论上讲,如果 LSTM 在您的输入中学习了不同的阶段,则激活的分布会有所不同,具体取决于“阶段”或更重要的阶段之间隐藏状态与阶段内的变化,因为它会关注不同的事情取决于阶段,这可能只是更多的训练时间的问题。如果它始终没有找到可以通过视觉诊断的东西,那么它会建议尝试其他想法之一。