为什么在时间序列分析中首选 RNN/LSTM 而不是其他 NN?

数据挖掘 神经网络 预测建模 时间序列 rnn 模型选择
2021-10-05 14:39:29

与其他神经网络(如 MLP 或 CNN)相比,我最近对 ​​RNN/LSTM 在时间序列分析中的优势进行了一次精彩的讨论。

对方说:

  1. NN 必须足够深以模拟时间连接

  2. 只是使用 RNN,因为它们更快

  3. 对于 RNN,较旧的(例如 t-20)时间点与较新的时间点(例如 t-1)相比并不那么相关,因为来自较旧时间点的数据必须经过所有神经元,直到该神经元中的权重更新。

  4. 与 RNN 相比,更容易理解普通 NN 的权重矩阵以部分理解 NN 的行为

我对此的回答是:

  1. 每个人都建议使用 LSTM 进行时间序列分析

  2. 与滑动窗口方法相比,它可以更好地考虑时间,特别是如果序列的长度很长

  3. 到 3. 如果你使用 vanilla RNN 而不是 LSTM,就会发生这种情况,因为梯度爆炸

所以我知道我没有完全回答他(也许不是正确的),我现在对大多数时候建议 LSTMS 的真正原因非常感兴趣。也许他是对的?你怎么认为?

  • 正常的 NN 可以像 RNN/LSTM 那样对时间连接进行建模,只要它足够深吗?
  • 与 NN 相比,RNN 是否需要更多或更少的数据才能获得
    相同/更好的结果?
  • 是否存在正常 NN 或 RNN/LSTM 表现更好的时间序列?
  • 是时间数据取决于哪个模型表现最好还是有一些指导方针?
  • NN 的行为能比 RNN 的行为更容易理解吗?
2个回答

我将尝试提供一些见解,希望对您有所帮助。

  • 正常的 NN 可以像 RNN/LSTM 那样对时间连接进行建模,只要它足够深吗?

如果变得更深,每个神经网络在理论上都会变得更好。对于常规 NN 来正确建模时间连接,您可以使用最后 n 个时间步作为您的输入,并将第 n+1 个时间步作为您的目标。这将生成您的训练集,并且根据您的数据,您可以相当有效地对时间序列进行建模。

这种方法的所有最明显的缺陷实际上都由 RNN/LSTM 解决。

  • 与 NN 相比,RNN 是否需要更多或更少的数据才能获得相同/更好的结果?

困难的问题,可能需要一些实证结果来检验该理论。此外,对于神经网络,有时更重要的是它的训练速度,而不是它拥有多少训练数据才能对性能产生最大的影响。

对我来说,主要区别在于您的常规 NN 将需要一个固定大小的输入,而您的 RNN 将能够使用“达到”一定大小的输入进行学习,这对于很好地建模整个时间序列可能是一个很大的优势.

  • 是否存在正常 NN 或 RNN/LSTM 表现更好的时间序列?

同样,这是一个难题,因为它将取决于数据、网络架构、训练时间等。

我还没有对此进行实证研究,但我想说你最好的猜测是时间序列相当短(例如少于 100 个时间步)。如果时间序列很短,您可能不需要对如此复杂的时间关系进行建模,常规 NN 可能与 RNN 一样好。

  • 是时间数据取决于哪个模型表现最好还是有一些指导方针?

如上所述,每次学习练习都将高度依赖于所使用的架构和超参数,甚至是权重的初始化,是否使用预训练,当然还有数据。同样,我认为时间序列越短,常规神经网络就越有竞争力。但同样,这只是基于直觉,并没有经过彻底检查。

- NN 行为能否比 RNN 行为更好地理解?

这完全取决于你理解的意思。RNN 比 NN 有更多的权重,所以最终会有更多的东西需要分析和最终理解。但是,随着数据越多,信息也会越多,因此也许从 RNN 中可以获得比简单 NN 更多的信息,即使它是深度神经网络。

另外,有时,基于权重和其他参数的初始化,模型的解释可能会有所不同,即使它是在相同的数据上训练的。

RNN 不一定更快。很难比较不同的架构,但在我正在做的文本挖掘应用程序中,我的 RNN 训练和评分的时间是我的 CNN 的 3-5 倍。

远程关系需要大量数据来学习任何模型。我不清楚更多地关注最近的数据是一件坏事。系统会随着时间而变化,因此过多关注古代数据可能没有用。

你所说的“理解”是什么意思:抽象地理解、可视化、探究特定的预测?

对于一个很酷的 RNN 可视化(文本):https ://arxiv.org/abs/1506.02078 。

选择不是“LSTMs are all hype”与“LSTMs ROCK”。例如,在文本使用(单词或字符的分类时间序列)中,CNN 在某些方面表现更好,而 LSTM 在其他方面表现更好。

从理论上讲,RNN(当然包括 LSTM)可以直接处理变长序列,而 CNN 或其他 NN 需要一些工作。(在实践中——例如,如果你使用 tensorflow 作为底层引擎——你将无法使用 RNN 处理任何长度的序列,但原理就在那里。)