当前位置:   article > 正文

多元时间序列预测之(四)基于实例和图的多元时间序列预测框架(IGMTF)

igmtf

本文作为系列第四讲,介绍微软亚洲研究院Xu等人于2021年提出的IGMTF模型。该模型的pytorch代码依然继承于前文的MTGNN,因此本文将其作为一个系列来介绍。但是,本文虽然基于图结构,但和MTGNN中典型的图结构并不相同,下面将详细介绍。

论文:Instance-wise Graph-based Framework for Multivariate Time Series Forecasting 基于实例和图的多元时间序列预测框架(注:有的地方直接翻译为基于实例图的多元时间序列预测框架,但这种翻译并不准确,在该论文中“实例”是指时间序列实例,而不是实例图)

该论文指出,虽然以前的一些工作考虑了同一时间戳中不同变量之间的相互依赖关系,但现有的工作忽略了不同时间戳中不同变量之间的相互联系。
这个思路乍一听好像没啥毛病,但仔细一想又觉得怪怪的,我们之前考虑多元时间变量之间的关系是出于一个时间变量当前的信息会影响另一个时间变量未来的信息,但是不同变量在不同的时间下又有什么关系呢?这种关系又有什么作用呢?
作者给出了解答——由于时间序列的周期性或者相似的外部环境,一个变量或许具有与其他变量的历史序列相似的序列。举一个例子就是,几只不同的股票,在不同的时间段却具有相似的价格走势。这意味着不同的变量在不同的时间下,相互之间也会有相似关系。因此,历史时间序列和我们需要预测的当前时间序列之间的相互依赖关系是有价值的,我们可以利用不同变量间具有相似性的历史时间序列来改进多元时间序列预测方法。

注意,在我个人理解下,本文的研究思路与前文中的MTGNN有很大差别,本文的思想类似于“模式识别”,将当前时间序列与其他所有变量的历史序列进行对比、匹配,找出历史序列中最为有效的信息。这种方法针对股票价格数据这种不同变量的时间序列间具有很大相似性的数据集来说,效果会更好。

准备工作

关于多元时间序列预测的基本定义这里不再多说,我们来介绍本文所提出的一些独特概念:

1. 时间序列实例

一个序列实例 v i t v^t_i vit 是指第 i i i 个变量 v i v_i vi 在时间戳 t t t 时的观测序列,即 X i t = { x i t − d , x i t − d + 1 , . . . , x i t } X^t_i=\{x^{t-d}_i,x^{t-d+1}_i,...,x^{t}_i\} Xit={xitd,xitd+1,...,xit},其中 X i t ∈ R d X^{t}_i \in{R^d} XitRd d d d是可观测的历史时间长度。序列实例 v i t v^t_i vit 的预测标签是 x i t + h x^{t+h}_i xit+h,其中 h h h 是预测步数。

其实简单来说,每个时间序列实例就是一条单时间序列。类似于使用滚动预测的方法,在每个时间戳上,对于每个时间变量,我们都可以获得一条回看长度为 d d d 的时间序列实例。如果一个时间序列在100个时间戳处有30个变量,那么这个时间序列中的序列实例数为3000个(忽略前d个时间戳的时间序列实例长度不足的问题)。

2. 实例图

实例图是一个其节点是时间序列实例的图。图的边是不同序列实例之间的相似性。

模块框架

在这里插入图片描述
模块框架如上图所示,下面我们慢慢讲解。

1. 实例编码器

本节对应上图中的(a)和(b)。原文中将此模块分两节介绍,一节是“ Training Instances Encoder”,另一节是“Mini-batch Instances Encoder”,有些同学刚阅读的时候可能会疑惑,什么是Training?和Mini-batch又有什么关系?这里呢,我们可以先将其放在一起讲解,然后再介绍两者的区别。

首先,实例编码器就是对单个时间序列实例进行特征提取,模型中也给出的特征提取方法:GRU+MLP。这里很容易理解,就是两者相同的部分。

其次,Mini-batch指的就是在进行训练时,每个batch的输入数据。我们需要明确的是,对Mini-batch进行特征提取的GRU+MLP的参数在反向传播的过程中具有梯度,即每个batch下,该模型的参数都会进行调整,这也很容易理解。

再然后,Training指的就是训练集内的所有数据,也就是说,在每个batch的训练过程中,我们都使用与该batch相同参数的GRU+MLP对训练集内所有的时间序列实例进行特征提取。只不过,这一步使用的是模型的推断模式,并不会产生参数的梯度,不会参与参数的更新。

2. 训练集实例采样器

本节对应上图中的(c)。由于训练集实例的数量通常都很大,而且直接聚合从训练集实例到Mini-batch实例的信息需要巨大的计算成本,因此作者利用训练集实例采样器对训练集数据进行采样。这里,作者的采用对时间戳进行采样的方式。

对每个Mini-batch,使用余弦相似度(下文会再介绍)找出与其最相关的训练集中的样本,以时间戳为采样单位,共在总训练集中,采样出k个时间戳的样本,假设有n个时间变量,则共采样出n×k个实例。

3. 图聚合模块

本节对应上图中的(d)。图聚合模块用来捕获采样的训练集实例和Mini-batch实例之间的相互依赖关系。

我们先将采样的训练集实例与Mini-batch实例作为节点构建实例图。在实例图中,每个采样训练集实例和Mini-batch实例都与一条边连接。注意,这里的图结构是有点类似于注意力机制的二部图,采样训练集实例内部、Mini-batch实例内部并无边连接,这和MTGNN中我们常规意识中的图结构并不太一样。

给定 m m m 个采样训练集实例的embedding: E s = { e v 1 t 1 , e v 2 t 2 , . . . , e v m t m } E_s=\{e^{t_1}_{v_1},e^{t_2}_{v_2},...,e^{t_m}_{v_m}\} Es={ev1t1,ev2t2,...,evmtm} n n n 个Mini-batch实例的embedding: H t = { h 1 t , h 2 t , . . . , h n t } H^t=\{h^t_1,h^t_2,...,h^t_n \} Ht={h1t,h2t,...,hnt} 。我们将实例图中采样训练集实例的信息聚合到Mini-batch实例上。
由于实例图不是预定义的,并且我们不知道采样训练集实例和Mini-batch实例之间边的权重,因此我们使用采样训练集实例embedding和Mini-batch实例embedding之间的余弦相似度作为边的权重,第 i i i 个Mini-batch实例和第 j j j 个采样训练集实例之间的权重计算如下:
A i j = C o s i n e ( W h h i t , W e e v j t j ) = W h h i t ⋅ W e e v j t j ∥ W h h i t ∥ ⋅ ∥ W e e v j t j ∥ A_{ij}=Cosine(W_hh^t_i, W_ee^{t_j}_{v_j})=\frac{W_hh^t_i \cdot W_ee^{t_j}_{v_j}}{\left\|W_hh^t_i\right\| \cdot \left\| W_ee^{t_j}_{v_j}\right\|} Aij=Cosine(Whhit,Weevjtj)=Whhit Weevjtj WhhitWeevjtj
其中, W W W是参数矩阵,用作空间映射。至于这个矩阵的是否有提升效果的作用,作者后文实验部分也有说明。虽然是大概率是拍脑袋想出来的,但是我们要学习这种实验精神,每个模块、每个参数都要通过实验来验证其有效性。

矩阵 A A A 就是我们构建的实例图的邻接矩阵。当前的邻接矩阵 A A A 表示一个全连通图,因为我们将计算每个采样训练集实例与每个Mini-batch实例的之间的相似度。但文章又指出,更深层次的图神经网络(GNN)会导致过平滑的问题,即重复的消息传播使不同类中的节点具有难以区分的表示。同样,全连通图上的GNN也会引起过度平滑的问题。

因此,作者又在邻接矩阵 A A A 引入top N mask机制,简单点说就是再在采样训练集实例中进行一次权重采样,对每个Mini-batch实例,只保留与他最相关的前N个采样训练集实例的权重,剩下的权重置为0。最后,利用masked 邻接矩阵 A ^ \hat{A} A^ 来聚合信息:
h ^ i t = 1 N i ∑ j ∈ N i A ^ i j W e e v j t j \hat{h}^t_i=\frac{1}{N_i}\sum_{j \in N_i}\hat{A}_{ij}W_ee^{t_j}_{v_j} h^it=Ni1jNiA^ijWeevjtj

其中, N i N_i Ni是第 i i i 个Mini-batch实例的前N个最接近的训练集实例的集合。 h ^ i t \hat{h}^t_i h^it i i i 个Mini-batch实例的信息聚合后的特征矩阵。

4. 预测模块

最后,将聚合信息和Mini-batch实例embedding相结合,联合预测未来的时间序列。 h i t h_i^t hit t t t 时刻的时间序列变量 i i i 通过GRU+MPL后得出的 a 1 a_1 a1 个特征, h ^ i t \hat{h}_i^t h^it 是在训练集样本中找到的前N个最相关的实例聚合后的 a 2 a_2 a2 个特征。最后根据这 a 1 + a 2 a_1 + a_2 a1+a2 个特征的组合,通过线性回归(单层MLP),计算出预测结果:
p i t = L i n e a r ( C o n c a t ( h ^ i t , h i t ) ) p^t_i=Linear(Concat(\hat{h}_i^t, h_i^t)) pit=Linear(Concat(h^it,hit))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/109376
推荐阅读
相关标签
  

闽ICP备14008679号