华为最近发布了一篇最新的多元时间序列预测文章,借鉴了NLP中前一阵比较热的Mixer模型,取代了attention结构,不仅实现了效果上的提升,也大大简化了模型结构。

1

Transformer的探讨

Transformer在时间序列预测中的作用最近得到比较多的探讨。在Are transformers effective for time series forecasting?(2022)这篇文章中,就利用简单的模型对Transformer提出了挑战。下图为一个典型的Transformer时间序列预测模型图。

时间序列预测模型 Java 实现预测 时间序列预测结果_transformer

Transformer做时间序列预测有以下几个问题。首先,temporal dependency的提取是时序预测的关键,而attention机制如何实现这种信息提取还没有被合理得到解释。其次,Transformer对时间特征、position embedding有很强的依赖性,这些信息会和序列一起进入attention模块,影响了temporal dependency的学习。最后,Transformer模型本身的计算量很大,虽然一些工作提出了attention的高效计算方法,但是除了attention外,模型中还有很多其他组件计算量也很大。

文中对比了Transformer模型和其他结构的效果差异。如果将attention换成更简单的傅里叶变换,效果是提升的。而去掉encoder和decoder之间的attention,效果反而提升非常大。这不禁让人们怀疑attention机制在多大程度上帮助了时间序列预测任务。

时间序列预测模型 Java 实现预测 时间序列预测结果_时间序列预测模型 Java 实现预测_02

2

多元时间序列的冗余性

多元时间序列无论是在temporal维度还是channel维度,都存在比较强的冗余性。如下图,在时间维度上,对一个序列进行下采样,生成的新序列和原始序列保持着相似的趋势性、季节性。

时间序列预测模型 Java 实现预测 时间序列预测结果_人工智能_03

而在channel维度上,多元序列中不同的子序列也展示出相似的pattern。这些冗余性都表明,大多数多元时间序列都存在低秩性,即只用一小部分数据就可以表示出近似完整的原始矩阵。利用这个性质,可以简化多多元时间序列的建模。

时间序列预测模型 Java 实现预测 时间序列预测结果_深度学习_04

3

MTS-Mixer模型

MTS-Mixer的模型结构如下,第二列是一个抽象结构,后面3列是具体的实现方法。

时间序列预测模型 Java 实现预测 时间序列预测结果_transformer_05

这三种实现方式的整体计算逻辑可以表示为如下形式,时间维度信息提取+空间维度信息提取+信息融合和输出映射

时间序列预测模型 Java 实现预测 时间序列预测结果_深度学习_06

第一种结构方法是基于self-attention,这个版本基本类似Transformer,区别在于将Transformer的decoder部分去掉了,直接改成全连接的映射。因为从之前的实验能够看到,去掉encoder和decoder之间的attention效果反而是提升的。

时间序列预测模型 Java 实现预测 时间序列预测结果_时间序列预测模型 Java 实现预测_07

第二种结构使用的是随机初始化的矩阵。其计算公式如下,主要是将时间维度、channel维度使用两个矩阵进行mixup,再加上一个输出映射矩阵。这三个矩阵都是随机初始化的。

时间序列预测模型 Java 实现预测 时间序列预测结果_深度学习_08

第三种结构采用了因子分解的思路。由于上面分析的多元时间序列矩阵存在低秩性,因此文中设计了一种基于因子分解的时间维度和channel维度的mixup。对于时间维度的冗余性,将源时间序列拆分成多个子序列,每段子序列分别进行temporal信息的学习,然后再按原来的顺序拼接傲一起。对于channel维度的冗余性,使用SVD分解。整个计算逻辑如下,主要就是利用全连接做时间维度和channel维度的mixup:

时间序列预测模型 Java 实现预测 时间序列预测结果_transformer_09

时间序列预测模型 Java 实现预测 时间序列预测结果_时间序列预测模型 Java 实现预测_10

4

实验结果

文中在多个数据集上对比了MTS-Mixer和众多Transformer模型的效果,发现即使不加attention结构,采用文中提出的简单架构,就能取得超过Transformer的效果。

时间序列预测模型 Java 实现预测 时间序列预测结果_transformer_11