循环神经网络 (neural network) (RNN),特别是LSTM和GRU,非常适合时间序列预测,因为它们能够捕捉数据内部的时间依赖关系。与静态回归模型不同,RNN逐步处理序列,并保持一个包含过去观测信息的内部状态(记忆)。构建一个有效的预测模型,需要根据具体的预测任务选择合适的输入-输出结构。
在将数据输入RNN之前,时间序列数据通常需要预处理,包括归一化 (normalization)(将值缩放到特定范围,如[0, 1],或标准化为零均值和单位方差)和窗口化。窗口化将连续时间序列转换为适合监督学习 (supervised learning)的输入-输出对。一个输入窗口包含固定数量的过去时间步(回溯期),而对应的输出是我们希望预测的值。
RNN的输入窗口化
假设一个时间序列x1,x2,x3,…,xT。为了训练RNN,我们创建重叠的窗口。如果选择回溯窗口大小为W,第一个输入序列可能是(x1,x2,…,xW),第二个是(x2,x3,…,xW+1),依此类推。每个输入序列的目标取决于预测任务。
从时间序列创建输入窗口(大小 W=3)和对应的单步目标。
在大多数框架中,RNN层的输入形状是(batch_size, time_steps, features)。对于单变量时间序列(每个时间步一个值),features为1。time_steps维度对应于窗口大小W。
多对一架构
这是预测单个未来值最常见的设置。RNN(例如LSTM或GRU)处理长度为W的输入序列。我们通常只需要RNN 最后时间步的输出或隐藏状态,因为此状态概括了整个输入窗口的信息。随后在这个最终RNN输出之上添加一个全连接层来生成单个预测值。
- 输入: 长度为W的序列,例如(xt,xt+1,…,xt+W−1)。
- 目标: 下一个时间步的单个值,例如xt+W。
- RNN配置: RNN层(LSTM/GRU)应设置
return_sequences=False(在Keras/TensorFlow中)或只使用最终隐藏状态(在PyTorch中)。这确保只有最后时间步的输出被传递下去。
- 输出层: 一个具有一个单元的全连接层(通常用于回归问题的线性激活函数 (activation function))。
用于单步时间序列预测的多对一架构。RNN处理输入窗口,并且只有最终隐藏状态被全连接层用来预测下一个值。
多对多架构
有时,我们需要预测多个未来时间步。假设我们想预测接下来的H步(预测范围)。
- 输入: 长度为W的序列,例如(xt,xt+1,…,xt+W−1)。
- 目标: 长度为H的序列,例如(xt+W,xt+W+1,…,xt+W+H−1)。
有几种方式来构建这类模型:
-
向量 (vector)输出 / 单次预测:
- 类似于多对一,RNN处理整个长度为W的输入序列。
- 只使用最后时间步的最终隐藏状态(或输出)。
- 最终的全连接层具有H个输出单元,同时预测所有H个未来步骤。
- RNN配置:
return_sequences=False(Keras/TF)或只使用最终隐藏状态(PyTorch)。
- 输出层:
Dense(H)。
多对多(向量输出 / 单次预测)架构。最终的RNN状态输入到一个全连接层,该层一次性输出整个预测范围H。
-
序列输出 / 自回归 (autoregressive)预测:
- 这种方法通常涉及一个多对一模型,该模型训练用于预测 仅仅 提前一步(H=1)。
- 为了预测多个步骤,它迭代地进行:
- 使用(xt,…,xt+W−1)预测xt+W。
- 将预测的x^t+W用作下一步的输入。使用(xt+1,…,xt+W−1,x^t+W)预测xt+W+1。
- 将此过程重复H次,将先前的预测反馈回输入窗口。
- 优点: 只需要一个单步预测模型。
- 缺点: 误差可能在预测范围内累积,因为预测是基于先前的预测。
-
序列到序列(编码器-解码器):
- 使用两个RNN:一个 编码器 处理输入序列(xt,…,xt+W−1)并将其总结为一个上下文 (context)向量(通常是最终隐藏状态)。一个 解码器 RNN接收此上下文向量并逐步生成输出序列(x^t+W,…,x^t+W+H−1)。
- 这是一种更高级的架构,通常用于输入和输出序列具有复杂关系或不同长度的情况。它将在序列到序列模型的背景下后续介绍。对于标准预测,前两种方法是更常用的起始点。
选择合适的架构
- 单步提前预测(H=1): 使用多对一架构。它更简单,并直接为此任务优化。
- 多步预测(H>1):
- **向量 (vector)输出(单次预测)**方法通常更容易实现和初步训练。它直接优化以预测整个范围。
- 自回归 (autoregressive)方法有时表现良好,特别是如果单步动态被很好地捕捉,但要留意误差累积。它可能需要仔细调整。
- 对于更复杂的多步预测问题,可以考虑序列到序列模型,特别是如果需要长预测范围或在每个预测步骤中涉及辅助输入特征。
无论何种架构,请记住输入数据需要适当地进行窗口化和归一化 (normalization)。回溯窗口W和预测范围H的选择是能影响性能的超参数 (parameter) (hyperparameter),应根据问题选择,并可能使用验证数据进行调整。