Rethinking Deep Learning For Time Series Forecasting S
作者:禅与计算机程序设计艺术
1.简介
一、引言
伴随着互联网及移动互联网的发展势头迅猛,数据量及数据处理的需求不断扩展中,同时也带来了对时序数据分析建模、预测与分析等新挑战的关注与需求提升.近年来,基于深度学习的方法在时间序列分析领域取得了显著成果,例如长短期记忆网络(LSTM)与时间序列递归神经网络(TS-RNN)等模型展示了强大的预测能力.然而这些方法仍存在一些局限性,例如计算复杂度较高且难以解释以及难以实现端到端训练的过程.本文通过对综述文献中关于时序数据分析预测领域的最新研究内容,全面深入地剖析了深度学习在时序数据分析中的模型构建与优化问题,并提出了一种改进方案.
- 关键词检索:基于相关主题的关键词进行系统性地检索文献资料后,在深入分析各研究对象中总结出各模型的优势与局限性,并明确适用场景。
- 模型架构探讨:从各类架构特点出发全面阐述算法运行机理的同时提出具体的改进方案。
- 数学机制解析:针对新型算法的理论基础及其具体实现细节进行深入解析;而对于现有算法则需对其理论框架进行扩展与优化处理并建立新的数学表达形式。
- 实践环节:系统性地运用Python库完成全周期流程中的训练阶段设置科学合理的参数值;在验证阶段采用数据交叉检验的方法保证结果的有效性;最后对测试结果进行全面评估指标包括分类精度、训练速度以及计算复杂度等多维度量化分析。
二、时序预测
时序数据
在现代社会中,时序数据被称为随时间变化的数据,并如股票价格指数、宏观经济指标以及股票交易量等实例加以说明。这些数据表现出序列关联性以及间歇性波动的特点,并且由于分布失衡而导致动态变化的趋势。
时序数据可分为三种类型:
- 单变量时序数据: 即只有一个变量随时间变化,如股价,每天的股价是一个单变量数据,称为日内异常变量,可以直接用线性回归或其他简单线性模型进行预测;
- 多变量时序数据: 有多个变量随时间变化,如房地产市场中的销售数据,每天的销售量和房屋信息都是多变量数据,可使用联合回归或因子分析进行预测;
- 事件序列数据: 即由若干个离散事件发生的时间顺序构成的序列数据,如金融数据中某只股票的收盘价和开盘价等,可以使用 HMM 或 LSTM 等模型进行预测。
时序数据一般分为静态与动态两类。静态时序数据通常是定期收集并存储的类型资料库如国内外经济指标每周更新一次而动态时序资料则具备实时更新特性能够反映事物发展变化的过程如股票市值房地产价格公交乘车、交通流量等。
时序预测任务
研究重点在于主要关注建立能够捕捉时间依赖关系的模型,并通过识别出的关联模式对未来未知的数据做出推测。考虑到时序数据固有的时间序列特征,在建模过程中需特别注重构建具备敏感性的时间因素。常见的任务类型主要包括以下几种:
分别是趋势预测、相关性分析、异常值检测以及周期性特征提取四个主要方向。
- 单步预测(point forecast): 在给定时刻 t 时对目标变量 y_t 进行估计;
- 范围预测(range forecast): 推断时间段[t1, t2]内目标变量的变化范围;
- 分类预测(classification forecast): 在给定时刻 t 和时间区间[t1, t2]内对目标变量所属类别 C 进行判断;
- 回归预测(regression forecast): 对于给定时间范围内的自变量子集 X={x_1,...,x_n}进行函数关系建模 f: X→C
针对这四个核心任务,在这些领域中进行研究时序数据分析可通过其属性特征与数据量级进行分类。具体而言, 时间序列数据分析可通过其属性特征与数据量级进行分类. 可划分为若干个研究方向: 如序列分析. 集体建模. 频域分析以及因果推断等. 其中, 序列分析部分又可分为有监督学习与无监督学习两种主要类型.
三、深度学习模型概览
深度学习模型简介
深度学习是计算机视觉、自然语言处理、语音识别以及推荐系统等众多领域的核心技术。近几十年来,深度学习在图像处理、语音识别等技术领域展现出显著成效。该体系通常由多层次神经网络构成,在各层网络依次接收上一层输出信息作为输入数据后进行训练以获得模型参数,在此过程中生成预测结果并传递给下一层进行处理直至完成整个过程以实现最终目标。该方法主要将模型划分为三类:线性回归模型适用于解决回归任务而非线性回归模型则擅长解决分类问题而支持向量机则能够有效应对小样本分类问题并提供概率预测能力
- 深度学习领域中应用最为广泛的模型类别均建立在神经网络基础之上。
- 其中包括卷积神经网络、循环神经网络以及变分自动编码器等多种类型。
- 决策树、随机森林和梯度提升机等方法构成了机器学习中的主流分类策略。
- 传播网络被广泛应用于推荐系统领域。
时序预测深度学习模型分类
时序预测类型的深度学习模型主要基于不同的时间间隔、输入空间维数以及输出空间维数,并且受到数据规模的影响程度而呈现不同的特征类型。
- 时序逻辑回归模型:主要用于输入为时序数据的分类和回归问题,如股票市场价格预测、电影评分预测、疾病预测等。
- 基于卷积神经网络的模型:如 1D-CNN、2D-CNN、3D-CNN。主要用于处理时序数据在时间轴上的局部关联性,对每一个时间步的输入数据进行特征抽取,然后再在空间上进行特征整合。
- 基于循环神经网络的模型:如 LSTM、GRU。主要用于解决时序数据在时间轴上的非局部关联性,能够记录过去的历史信息,并且能够获得当前时刻的信息。
- 基于注意力机制的模型:如 Transformer。主要用于解决时序数据在时间轴上的长程关联性,通过注意力机制把长距离依赖关系映射到较短的距离依赖关系上。
- 时序集成学习模型:主要用于解决时序数据的多模态融合问题,如多种数据源的预测。
- 其他时序预测模型:如 Multi-Head Attention、Variational Autoencoders (VAEs)。
四、关键词搜索
在文献检索工作中进行关键词搜索以聚焦于与时间序列数据预测相关的领域研究,在当前科学研究中占据重要地位的学术方向通常可以通过分析高频次出现的关键技术来识别其主要关注点
五、模型结构介绍
深度学习时序预测模型可以分为两类:全局模型和局部模型。如下图所示:
全局模型(Global Model)
全局模型基于整体视角对整个时序数据进行建模。典型的全局模型涵盖简单平均法、滑动平均法、加权平均法以及ARIMA和ETS等方法。
局部模型(Local Model)
该局部模型通过运用局部视角对每一个时间点的样本进行推断,并将这些推断结果整合用于推断未来样本。常见的几种局部模型包括自回归移动平均(ARMA)模型、支持向量机(SVM)模型、深度信念网络(DBN)模型等。
(1)LSTM 算法详解
LSTM 为长短期记忆网络的缩写,在深度学习领域被广泛认可的一种独特的循环神经网络模型。该方法主要应用于时间序列预测任务中,并对其性能有较高的评价。其设计目标是同时保持时间序列动态信息并减少丢失的可能性,在数据处理上具有显著优势。该算法通过长短时记忆单元对输入数据进行分段存储以提取有用信息,并在实际应用中展现出良好的泛化能力。尽管其架构较为复杂,在实际应用中仍能实现较高的训练效率且能够显著提升预测效果
LSTM 模型由三个门结构组成,即输入门、遗忘门、输出门。它们的功能如下:
- 输入机制(Input gate):负责确定如何更新细胞状态。
- 遗忘机制(Forget gate):负责识别并排除无用的记忆内容。
- 输出机制(Output gate):负责调控信息传递方向。
LSTM 也还有一些重要的技术细节包括存储单元(memory cell)、状态模块(state module)、输入模块(input module)、输出模块(output module)、长期存储区域(memory pool)、短期抑制区域(forget gate)等。
1. 基本算法
基于长短期记忆(Long Short Term Memory, LSTM)网络模型设计的思想基础之上构建而成的LSTM算法其核心机制在于对输入序列进行离散化处理实现了信息的有效提取这一特点使得其具备了出色的时间序列建模能力通过动态调控 forget gate input gate 和 output gate等关键组件 LSTM系统能够实现对记忆单元状态的精准调控从而实现对长期依赖关系的有效捕捉
LSTM 的基本算法流程如下:
阐述 LSTM 网络的构成如下:该网络由多个组成部分组成,包括输入单元 Xₜ(Input gate)、输出单元 Hₜ(Output gate)、遗忘单元 Cₜ(Cell gate)以及三个门控机制:遗忘门 fₜ(Forget gate)、输入门 iₜ(Input gate)和输出门 oₜ(Output gate)。
设置初始记忆单元 C^{(-1)}=0 并同时输入 X^{(-1)}=[x_1,x_2,…,x_n] ,其中-1表示第零时刻。
- 对于每个时间步 t,通过以下公式计算门结构的激活值:
i^{(t)} = \sigma \bigl( \tilde{W}_i [ 前一个状态向量, 输入向量 ] + b_i \bigr), f^{(t)} = \sigma \bigl( \tilde{W}_f [ 前一个状态向量, 输入向量 ] + b_f \bigr), g^{(t)} = \tanh \bigl( \tilde{W}_g [ 前一个状态向量, 输入向量 ] + b_g \bigr) o^{(t)} = \sigma \bigl( \tilde{W}_o [ 前一个状态向量, 输入向量 ] + b_o \bigr)
其中,\sigma 为 sigmoid 激活函数,\left[\cdot,\cdot,\cdots,\cdot\right]^{\left(i,j\right)}\in R^{m\times n} 表示第 i 行 j 列的矩阵,\tilde{W}_i,\tilde{W}_f,\tilde{W}_g,\tilde{W}_o\in R^{h\times m+n} 为权重矩阵,\tilde{b}_i,\tilde{b}_f,\tilde{b}_g,\tilde{b}_o\in R^{h} 为偏置项。
- 使用遗忘门 f_{t} 和输入门 i_{t} 来更新记忆单元 C:
\widetilde{C}_{t}=f_{t} \odot c^{\left(-1\right)} + i_{t} \odot g_{t}\ C_{t}=o_{t} \odot \widetilde{C}_{t}
其中,\odot 表示对应元素相乘,c^{\left(-1\right)} 表示上一步的记忆单元 C。
-
更新输出 H:
-
将当前时刻的输出 h_{t} 作为下一个时刻的输入。
-
返回第 t 个时刻的输出 h_{t} 。
2. 损失函数
LSTM的主要任务是利用输入数据序列来预测未来的某个特定时间点的输出值。为了评估模型预测效果如何通常采用损失函数(loss function),用于衡量预测结果与真实值之间的差异程度。
基于模型对输入序列 X_{(1):t} 的估计结果 \hat{y}_t 和观测的真实值 y_t ,该损失函数可由下式计算得出:
L=\frac{1}{T} \sum_{t=1}^{T} l\left(y_{t}, \hat{y}_{t}\right)+R(p_{0})
其中l代表损失函数(loss function),其定义域被限定于非负实数范围;而h(t)则表示在时刻t处的时间步长(time step)。基于此定义域划分策略能够有效地提高算法的时间效率和空间效率。
3. 参数优化
将 LSTM 模型的参数优化任务转化为求解其参数极小值的过程,并可采用反向传播算法来实现这一目标
4. 数据准备
LSTM网络依赖长序列以提取丰富信息;时序数据预测任务中的输入数据通常经过预处理以形成固定长度的向量序列。
5. 模型效果评估
模型效果评估通常通过损失数值、预测准确度等具体指标来进行。其中预测准确度可以通过MSE、RMSE、MAE等具体标准来衡量。
(2)ARIMA 算法详解
ARIMA 即自回归移动平均模型(Autoregressive Moving Average model),其缩写形式为 ARIMA。这种统计模型主要用于分析和预测时间序列数据。其中参数 p 表示自相关性的数量,q 代表白噪声阶数,而 d 则用于差分处理以消除趋势性因素的影响。在构建 ARIMA 模型时,我们主要依据历史数据来推断未来走势;通过差分方法可以消除时间序列中的单位根影响,并提高模型拟合精度。
ARIMA 模型可以分为两个阶段:
在AR阶段中强调自回归特性,在这个过程中当前时刻的数据仅由其前k步的历史数据支撑,并且其中k为用户定义的一个参数。在AR阶段中使用的预测模型基于这样的假设:即AR系数反映了当前数据与其前k步数据之间的关联关系。
\hat{Y}_{t}=c+\phi_{1} Y_{t-1}+\phi_{2} Y_{t-2}+\cdots+\phi_{k} Y_{t-k}
- MA阶段:该阶段注重移动平均特性,在此过程中其当前数据点仅受随后l个数据点的影响程度进行刻画。其中参数l是用户自行设定的关键指标,在此过程中起着重要影响作用。MA阶段中的预测模型可表示为
\hat{Y}_{t}=\mu+\theta_{1}\epsilon_{t-1}+\theta_{2}\epsilon_{t-2}+\cdots+\theta_{l}\epsilon_{t-l}
其中,\epsilon_{t-i} 表示差分后的第 i 个数据。
1. 模型结构
ARIMA 模型的结构可以表述为:
2. 参数估计
ARIMA模型的估计过程涉及较为复杂的数学运算, 因为这些特性(即自回归和移动平均性质)都涉及到大量参数的计算, 因此通常采用特定的统计分析方法来完成这一过程.
3. 模型拟合
ARIMA 模型的拟合过程可以分为两步:
- 对 ARIMA 模型的 AR 和 MA 系数进行估计。
- 对 ARIMA 模型进行验证。
4. 模型评估
ARIMA 模型在实际应用中多采用 AIC 和 BIC 作为评价标准来衡量其预测能力。这些信息指标中的 AIC 和 BIC 值数值越低,则表明相应的 ARIMA 模型对时间序列数据具有更好的拟合效果。
5. 数据准备
ARIMA 模型一般需要其输入的数据序列长度是训练数据序列的两倍,在预测未来趋势方面起着关键作用。当设定训练时间序列为 T 时,则该模型所需的历史时间序列长度可表示为 (T - k) - (T - l) + 1
六、深度学习时序预测模型改进
(1)网络层次结构的改进
目前普遍使用的时序预测模型大多普遍使用了单一层次的神经网络架构。然而,在深度学习的思想下,并非仅仅依靠单一层次就能达到最佳效果。因此,在构建深度学习时序预测模型时应当合理设计多层神经网络架构以增强其表达能力。
1. ResNet 网络
ResNet 网络是 Deep residual network 的简写形式,在深度学习领域具有重要地位。该架构由多个层次模块构成,在提升模型性能方面表现出显著优势。ResNet 通过提出了一种 named residual blocks 架构,在处理图像数据时实现了对中间层特征的深度重构。这种设计使得 ResNet 在图像分类等任务中展现出卓越的效果和广泛的适用性
由两个分支构成,其中一条分支负责信息传递功能,另一条分支则用于学习新的特征。这种架构设计使得残差块能够被视为两个相同结构的神经网络模块,并且它们之间的连接是共享的。这种设计选择不仅有助于模型能够更快地完成训练任务,并且在适当的位置引入跳跃连接(skip connections)的作用,则能够进一步优化网络性能。
ResNet 的结构如图所示:
2. DenseNet 网络
DenseNet 网络是密集连接网络(Densely connected network)的全称,在基于残差块的基础上增添了通道连接模块;该方法采用了多层次结构设计,并增强了深度神经网络的表现力;这不仅有助于减少梯度消失问题,并且提升了模型的整体计算效率。
连接模块的主要功能是提升模型的感受野大小,并以此实现对全局上下文信息的有效学习。DenseNet 的结构如图所示:
(2)模型架构的改进
1. 模型连接方式的改变
就目前而言,在深度学习领域中用于时序预测的大多数模型都倾向于通过堆叠的方式进行网络层之间的连接。然而这种方式可能导致网络拥有过多的参数,并因而限制了模型在表达能力方面的提升。鉴于此,在构建深度学习时序预测模型时建议采用跳跃连接(skip connection)来进行各层之间的连接。
2. 门控机制的引入
当前,在大多数深度学习时序预测模型中,并未部署门控机制。这便制约了这些方法的表现质量。鉴于此,在提升深度学习时序预测模型的学习效能方面,建议优先考虑引入门控机制作为优化方向。
门控机制涉及在模型内部部分神经元参与计算过程而其余神经元则保持静止状态。该机制有助于增强信息处理能力的同时还能改善系统稳定性并有效防止过度拟合风险。
3. 数据扩充的引入
当下基于深度学习的时序预测模型通常会采用相同数量的训练数据集进行训练;然而这可能会导致过拟合问题出现。为了缓解这一问题 建议采用数据增强技术来解决
数据扩充的方法可以分为两种:
- 数据对应:即指利用现有不同尺寸的数据集来扩展训练数据集。这种做法有助于提升模型的鲁棒性。
- 数据创建:即指通过生成模型生成新增的数据以补充训练集。这种方式能够降低标注成本。
(3)损失函数的选择
当前情况下,在深度学习领域中进行时间序列预测时序模型时普遍应用的损失函数是均方误差(MSE)。然而,在这种情况下下,均方误差损失函数却无法准确反映模型对数据的拟合效果与预测能力之间的关系。基于此考虑,在设计时间序列预测任务中的深度学习模型时应优先选择能够更好地适应序列特性的损失函数。
1. 半监督学习的引入
半监督学习是一种在无标注数据资源丰富的情况下运用标签信息辅助训练的方法,在提升模型性能方面展现出显著成效。就目前情况来看,在深度学习驱动下的时间序列预测模型通常仅依赖于单一的数据源。基于此观察,在促进时间序列预测性能方面存在潜力的深度学习方法应当考虑采用半监督学习策略。
半监督学习方法可以分为两种:
- 弱监督学习:基于未标记数据进行模型训练,并且弥补了完全无监督学习的一些缺陷。
- 强监督学习:基于有标记数据进行训练,并且从而显著提升了模型预测的准确性。
2. 注意力机制的引入
注意方法是指在模型中每一层都运用注意机制以识别重要的特征。该注意机制不仅能够增强模型的通用性、还能提升其稳定性,并能有效降低过拟合的可能性。
(4)模型预测策略的调整
现有深度学习时序预测模型普遍采用常规预测策略,在这种情况下可能会存在预测结果出现错误的问题。因此建议现有深度学习时序预测模型应采用更适合时序预测的特定策略。
1. 模型持久化
我们称模型持久化为保存模型参数的过程,在后续预测阶段能够持续使用这些参数以提高预测精度。当前普遍的做法是将深度学习时序预测模型主要基于单一参数的设计理念,在这种情况下难以充分释放其潜力。由此可知,在优化深度学习时序预测模型方面应当优先考虑应用持续化的技术方案。
2. 预测窗口的缩短
预测窗口的缩短意味着每隔一段时间执行一次模型预测操作(而非按每个时间步),这一策略能够在保证模型性能的同时显著减少计算负担。具体而言,在提升模型识别精度的同时能够有效减少内存占用和运算资源消耗。
七、代码实例和解释说明
(1)LSTM 算法实现
下面以 LSTM 算法为例,对 LSTM 模型的实现进行说明。
import tensorflow as tf
from tensorflow import keras
import numpy as np
np.random.seed(0)
# 创建训练数据
train_size = 10000
timestep = 10
input_dim = 1
batch_size = 32
num_units = 16
train_inputs = np.random.uniform(size=(train_size, timestep, input_dim))
train_outputs = np.sin(train_inputs[:, :, 0]) * 10 + np.random.normal(scale=0.01, size=train_inputs.shape[:2])
model = keras.Sequential([
keras.layers.InputLayer(input_shape=[None, input_dim]),
keras.layers.LSTM(num_units),
keras.layers.Dense(input_dim, activation='linear')
], name="lstm")
adam = keras.optimizers.Adam(lr=0.01)
model.compile(optimizer=adam, loss='mse', metrics=['mae'])
# train the model
history = model.fit(train_inputs, train_outputs, epochs=200, batch_size=batch_size, validation_split=0.1)
# test the model on new data
test_size = 100
test_inputs = np.random.uniform(size=(test_size, timestep, input_dim))
test_outputs = np.sin(test_inputs[:, :, 0]) * 10 + np.random.normal(scale=0.01, size=test_inputs.shape[:2])
predictions = model.predict(test_inputs)
print("MSE:", np.mean((predictions - test_outputs)**2))
print("MAE:", np.mean(np.abs(predictions - test_outputs)))
代码解读
上述代码搭建了一个包含16个单元的LSTM网络结构,并用于学习 sin 函数的基本特性;随后对模型进行了系统性训练,并评估了其预测能力。
(2)ARIMA 算法实现
下面以 ARIMA 模型为例,对 ARIMA 模型的实现进行说明。
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA
def generate_data():
# 生成时间序列数据
trend = pd.Series(np.array([x / 100 for x in range(200)]).reshape((-1)),
index=pd.date_range('2018-01-01', periods=200, freq='D'))
seasonality = pd.Series(np.arange(200) % 7,
index=pd.date_range('2018-01-01', periods=200, freq='D'))
noise = pd.Series(np.random.randn(200),
index=pd.date_range('2018-01-01', periods=200, freq='D')).rolling(window=7).mean()
data = trend + seasonality + noise
return data
if __name__ == '__main__':
# 生成时间序列数据
data = generate_data()
# 用 ARIMA 拟合时间序列数据
model = ARIMA(data, order=(2, 1, 1))
results = model.fit()
print(results.summary())
# 绘制拟合曲线
fitted = results.fittedvalues
fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(data, label='Original Data')
ax.plot(fitted, color='#FFA500', lw=2., label='Fitted Values')
plt.show()
代码解读
上述代码创建了一个涵盖季节性、趋势性和随机噪声的时序数据,并通过ARIMA模型对时序数据进行了建模和预测。
八、未来发展趋势与挑战
深度学习在时序预测模型的研究中始终处于快速发展阶段。近年来基于深度学习的时序预测技术已经展现出卓越的效果,并且其应用范围也在不断扩大。包括 LSTM、ARIMA 和 TCN 等模型在内的一系列方法正在逐步完善这一领域的发展框架。值得注意的是,在这一技术体系中,LSTM 和 TCN 模型在技术上取得了显著的进步。然而,尽管这一领域的研究已经取得了不少成果,但仍面临着三个主要问题:一是计算复杂度高;二是预测延迟较长;三是容易遭受攻击。因此,未来研究应着重关注以下几点:
-
基于不同数据特征的设计灵活高效的方法
-
提升算法鲁棒性以应对数据异常情况
-
优化资源利用率以降低运行成本
-
模型结构的优化:就目前而言,深度学习驱动的时序预测大多采用较为简洁且高效的架构设计。这种设计虽然有效但在一定程度上限制了其在复杂场景下的表现。
-
模型超参数调优:基于当前的研究进展,在深度学习驱动的时序预测领域中尚缺乏系统化的超参数自动优化方法。
-
安全性考量:就当前情况来看,在生产环境中的部署往往伴随着复杂的安全挑战。
-
结果校准问题:就现有的研究而言,在深度学习驱动的时序预测领域仍存在结果校准问题。
九、参考文献
- ., & . (2019). 对卷积神经网络在序列分类任务中的应用进行了一次全面的回顾。arXiv预印本:1906.10388.
- ., 等人(2017)。“所有注意力都来自于此。” 人工智能与人工智慧进展.
- LeCun, Yann, 等人(1998)。“基于梯度的学习方法应用于文档识别。” 《IEEEProceedings》.
- Kim, Jeongwon 等人(2019)。“利用带有瓶颈层的自编码器检测多元时间序列中的异常现象——一种深度学习方法.” arXiv预印本:1905.12560.
