当前位置: 首页 > 后端技术 > Python

时间序列预测——DA-RNN模型

时间:2023-03-26 15:07:25 Python

时间序列预测——DA-RNN模型作者:梅浩明1.背景传统的时间序列预测非线性自回归模型(NRAX)难以捕获数据之间的时间相关性。更长的时间段并选择相应的驾驶数据进行预测。本文将介绍一种基于Seq2Seq模型(Encoder-Decoder模型)结合Attention机制的时间序列预测方法。作者提出了一种两阶段注意力机制循环神经网络模型(DA-RNN),可以很好地解决以上两个问题。在模型的第一部分,我们引入了输入注意机制来在每个时间步选择相应的输入特征。在模型的第二部分,我们使用时间注意机制在整个时间步长中选择相应的隐藏层状态。通过这种两阶段注意机制,我们能够有效地解决一些时间预测问题。我们将这两种注意机制模型集成到基于LSTM的递归神经网络中,该网络使用标准反向传播进行联合训练。2.DA-RNN模型2.1输入输出输入:给定n个驱动序列(输入特征),$X=(x^1,x^2,...,x^n)^T=(x_1,x_2,...,x_T)\inR^{n\timesT}$,$T$表示时间步长,$n$表示输入特征的维度。输出:$\hat{y}_{T}=F(y_1,...,y_{T-1},x_1,...,x_T)$。$(y_1,...,y_{T-1})$表示预测目标的过去值,其中$y_t\inR$;$(x_1,...,x_T)$是$n在时间$T$$维度内的外生驱动输入序列,$x_t\inR^n$;$F(\cdot)$是模型需要学习的非线性映射函数。2.2模型结构DA-RNN模型是一种基于注意力机制的Encoder-Decoder模型。在编码器部分,我们引入输入注意机制来选择相应的驱动序列;在解码器部分,我们使用时间注意机制在整个小时间步长中选择相应的隐藏层状态。通过这两种注意力机制,DA-RNN模型可以选择最相关的输入特征,并捕获长时间内时间序列之间的依赖关系,如图1所示。图1:DA-RNN模型结构2.3Encoder编码器本质上是一个RNN模型,将输入序列转换为特征表示,我们称之为隐藏层状态。对于时间序列预测问题,给定输入$X=(x_1,x_2,...,x_T)\inR^{n\timesT},x_t\inR^n$,在时间$t$,encoderMap$x_t$to$h_t$:$h_t=f_1(h_{t-1},x_t)$,$h_t\inR^m$表示编码器隐藏层在时间$t$,$m的状态$表示隐藏层的维度,$f_$是一个非线性激活函数,本文我们使用LSTM。在本文中,我们提出了一种输入注意编码器。它能够正确选择相应的驾驶序列,这对于时间序列预测至关重要。我们通过确定性注意模型构建输入注意层。它需要使用前一个隐藏层状态$h_{t-1}$和LSTM单元的单元状态$s_{t-1}$作为本层的输入:$$e^k_t=v^T_etanh(W_e[h_{t-1};s_{t-1}]+U_ex^k)$$,其中$v_e\inR^T,W_e\inR^{T\times2m},U_e\inR^{T\timesT}$是一个需要学习的参数。输入注意力层的输出$(e^1_t,e^2_t,...,e^n_t)$输入到softmax层得到$\alpha_t^k$保证所有注意力权重之和为1、$\alpha_t^k$表示第$k$个输入特征在时间$t$的重要性。得到attention权重后,我们就可以自适应地提取驱动序列$\tildex_t=(\alpha^1_tx^1_t,\alpha^2_tx^2_t,...,\alpha^n_tx^n_t)$,此时我们更新隐藏层的状态为$h_t=f_1(h_{t-1},\tildex_t)$。2.4解码器为了预测输出$\haty_T$,我们使用另一个LSTM网络层来解码编码器信息,即隐藏层状态$h_$。当输入序列过长时,传统Encoder-Decoder模型的效果会迅速恶化。因此,在解码器部分,我们引入了一种时间注意机制来选择相应的隐藏层状态。与encoder中的attentionlayer类似,decoder中的attentionlayer也需要使用之前的隐层状态$d_{t-1}$和LSTM单元的cellstate$s'_{t-1}$作为层的输入得到本层的输出:$l^i_t=v^T_dtanh(W_d[d_{t-1};s'_{t-1}]+U_dh_i)$,其中$v_d\inR^m,W_d\inR^{m\times2p},U_e\inR^{m\timesm}$是需要学习的参数。通过softmax层,我们可以得到第$i$个编码器隐藏状态$h_i$的重要性$\beta^i_t$用于最终预测。解码器根据权重对编码器的所有隐藏状态求和得到文本向量$c_t=\sum_{i=1}^T\beta_t^ih_i$,注意$c_t$在不同的时间步是不同的。得到文本向量后,我们将其与目标序列结合得到$\tildey_{t-1}=\tildew^T[y_{t-1};c_{t-1}]+\tildeb$.使用新计算的$\tildey_{t-1}$,我们更新解码器隐藏状态$d_t=f_2(d_{t-1},\tildey_{t-1})$,我们使用LSTM作为激活函数$f_2$。通过DA-RNN模型,我们预测$\haty_T=F(y_1,...,y_{T-1},x_1,...,x_T)=v_y^T(W_y[d_T;c_T]+b_w)+b_v$。2.5训练过程在这个模型中,作者使用平均方差作为目标函数,使用最小批量为128的Adam优化器进行参数优化。目标函数:$$O(y_T,\tildey_T)=\frac{1}{N}\sum_{i=1}^N(\haty^i_T-y_T^i)^2$$3。实验3.1数据集本文作者使用了两个不同的数据集来测试验证DA-RNN模型的效果。这里我们只介绍纳斯达克100股票数据集。根据纳斯达克100股票,作者收集了81家主要公司的股价作为驱动时间序列,纳斯达克100股票指数作为目标序列。数据采集??频率为每分钟一次。该数据集包含2016年7月26日至2016年12月22日共105天的数据。在这个实验中,作者使用了35100条数据作为训练集,2730条数据作为验证集,最后2730条数据作为测试集。3.2参数设置及评价指标时间窗口$T\in\{3,5,10,15,25\}$的大小。实验表明:当T=10时,模型在验证集上效果最好。编码器和解码器隐藏层大小$m,p\in\{16,32,64,128,256\}$。当$m=p=64,128$时实验效果最佳。为了评估模型的性能,我们考虑了三种不同的评估指标:RSME、MAE、MAPE。3.3模型预测为了论证DA-RNN模型的效果,作者对比了该模型与其他模型在两个不同数据集上的预测效果,如表1所示。从表1可以看出,DA-RNN模型比其他模型有更小的误差。DA-RNN模型在时间序列预测方面有很好的表现。表1:SML2010数据集和纳斯达克100股票数据集的时间序列预测结果为了更好的视觉对比,我们将Encoder-Decoder模型、AttentionRNN和DA-RNN模型在纳斯达克100股票数据集上的预测结果展示在图2。不难看出,DA-RNN模型更能反映真实情况。图3:三个模型对纳斯达克100股票数据集的预测结果4.总结在本文中,我们介绍了一种基于注意力机制的两阶段递归神经网络模型。该模型由两部分组成:编码器和解码器。在encoder部分,我们引入了inputattention机制来提取输入特征,对相关性较高的特征变量赋予较高的权重;在decoder部分,我们利用timeattention机制对不同时间$t$的隐藏状态赋予不同的权重,不断更新文本向量,找到时间相关性最大的隐藏层状态。Encoder和Decode中的attention层分别从空间和时间上寻找特征表示与目标序列的相关性,对不同的特征变量赋予不同的权重,从而更准确地预测目标序列。项目源地址:https://momodel.cn/workspace/5da8cc2ccfbef78329c117ed?type=app5。参考论文:ADual-StageAttention-BasedRecurrentNeuralNetworkforTimeSeriesPrediction注意力机制详解:https://blog.csdn.net/BVL10101111/article/details/78470716项目源码:https://github.com/chensvm/A-Dual-Stage-Attention-Based-Recurrent-Neural-Network-for-Time-Series-Prediction数据集:https://cseweb.ucsd.edu/~yaq007/NASDAQ100_stock_data.html