用于时间序列预测的 RNN——什么样的配置才有意义

数据挖掘 机器学习 神经网络 时间序列 rnn lstm
2021-09-21 16:59:51

我的问题主要是关于一般直觉逻辑:当使用 RNN (LSTM) 预测时间序列时,您的目标是,例如,预测100 steps ahead一系列one single feature什么样的配置对层有意义一个简单input | hidden | outputRNN 的大小和窗口大小(假设你想看不止一个点,所以你选择一个“窗口”/“间隔”?

更确切地说:

  • 只使用 1 个输入神经元,一次只看一个点,还是选择一个窗口/间隔?- 显然,仅查看 1 点,您就完全依靠网络的内存方面来检测有用的模式……这会是一件好事吗?
  • 使用窗口时,使用一组重叠窗口是否有意义,例如。一次滑动一个 10 点的窗口,还是不重叠的窗口?
  • 隐藏层中的单元数量是否应该大致等于您打算提前预测的步数?(另外,与窗口大小和提前预测的步骤之间的关系类似)

或者,如果回答这个问题太难或太费时间,从哪里可以得到回答这些问题的直觉?

(因为显然可能的配置空间是巨大的,除非你有大量的时间或资源,否则你需要一些直觉,这样你才能开始形成一个“大致有效”的配置......)

1个回答

隐藏层中的单元数量是否应该大致等于您打算提前预测的步数?(另外,与窗口大小和提前预测的步骤之间的关系类似)

不要忘记,随着时间的推移,单个神经元可能会饱和——它可以假设值越来越接近 -1 或 1。这意味着您可以在几个连续的时间步长上获得很好的灵活性。因此,您不需要与时间步数一样多的神经元数量。

您可以通过用笔和纸在方格纸上绘制简单 RNN 的单个神经元来验证它。对于每个正方形(时间步长),绘制神经元的激活和先前的激活。在某个特定时间步假设输入不再为 0(例如 -1)并观察函数如何从该时间步开始波动到波中。老实说,对于单个神经元来说非常灵活。更令人纠结的是我们绘制了 2 个神经元。只有少数神经元的波可以保存和编码大量信息(呈指数增长)

使用窗口时,使用一组重叠窗口是否有意义,例如。一次滑动一个 10 点的窗口,还是不重叠的窗口?这类似于另一个问题: 滑动窗口导致 LSTM 中的过度拟合?

总的来说,滑动窗口对于 LSTM 来说是一种不好的方法,会导致过度拟合。更好的方法是在输出答案之前前后扫描序列。这是双向 LSTM,甚至是关注注意力如果您需要依赖于神经元的每一帧输出一个答案,这是合理的——毕竟 LSTM 非常擅长记住事物,因为“累积”和允许振荡的纠缠(我在上面已经提到过)。

你需要一些直觉,这样你就可以开始形成一个“大致有效”的配置......)

引用一个非常传奇的帖子:

总而言之,对于大多数问题,通过仅使用两条规则设置隐藏层配置,可能可以获得不错的性能(即使没有第二个优化步骤):(i)隐藏层的数量等于 1;(ii)该层中神经元的数量是输入和输出层中神经元的平均值。

还有一个好处,如何查询 LSTM 可能对未来的思考有用 - LSTM 查询方法