一文梳理Transformer在时间序列预测中的发展历程代表工作
Transformer的序列建模能力,让其天然就比较适合时间序列这种也是序列类型的数据结构。但是,时间序列相比文本序列也有很多特点,例如时间序列具有自相关性或周期性、时间序列的预测经常涉及到周期非常长的序列预测任务等。这些都给Transformer在时间序列预测场景中的应用带来了新的挑战,也使业内出现了一批针对时间序列任务的Transformer改造。下面给大家介绍Transformer在时间序列预测中的应用,基本上按照时间顺序,到2023年近期的Transformer典型代表工作,共10篇顶会相关论文汇总。
1.Transformer-based Model
论文题目:Deep Transformer Models for Time Series Forecasting: The Influenza Prevalence Case
下载地址:https://arxiv.org/pdf/2001.08317.pdf
在我印象里,这篇文章应该是第一篇正式发表的在时间序列预测中使用Transformer结构的文章。其整体结构就是直接将Transformer的Encoder-Decoder搬过来,没做什么特别的升级,并且应用层面也是一个个性化场景。但是从此打开了Transformer在时间序列预测中应用的大门。
2.TFT
论文题目:Temporal fusion transformers for interpretable multi-horizon time series forecasting(2019)
下载地址:https://arxiv.org/pdf/1912.09363.pdf
这篇文章中则采用了LSTM+Transformer的方式。时间序列首先输入到LSTM中,这里的LSTM既可以起到类似于CNN提取每个点上下文信息的作用,也可以起到Position Encoding的作用,利用LSTM的顺序建模能力,替代原来Transformer中随模型训练的Position Embedding。对于特征的输入,TFT也进行了详细设计,在每个时间步的输入特征上,都会使用一个特征选择模块(一个attention)给当前时间步每个特征计算重要性。这个重要性后面也被用于对时间序列预测结果进行可视化分析,看每个时刻各个特征对于预测的重要性狂。
3.Log-Sparse Transformer
论文题目:Enhancing the locality and breaking the memory bottleneck of transformer on time series forecasting(2019)
下载地址:https://arxiv.org/pdf/1907.00235.pdf
Transformer的Attention操作是点对点的,而时间序列上上下文信息非常重要。例如下图中,左侧虽然两个点时间序列值相同,但是由于周边序列形状差异很大,因此这两个点之间不具有参考价值。而右侧图中,虽然两个区域的时间序列值差别很大,但是整体形状是非常相似的,因此这两个部分具有较大参考价值,应该增加attention权重。从这个例子可以看出,在时间序列问题中,不能只用类似NLP中的两点之间的注意力机制,而应该考虑点周围的上下文信息。
本文采用卷积+Transformer的方式,时间序列会首先输入到一个一维卷积中,利用卷积提取每个节点周围的信息,然后再使用多头注意力机制学习节点之间的关系。这样就能让attention不仅考虑每个点的值,也能考虑每个点的上下文信息,将具有相似形状的区域建立起联系。
4.Informer
论文题目: Informer: Beyond efficient transformer for long sequence timeseries forecasting(AAAI 2021)
下载地址:https://arxiv.org/pdf/2012.07436.pdf
Informer针对长周期时间序列预测,主要从效率角度对Transformer进行了优化,这篇工作也是AAAI 2021的best paper。对于长周期时间序列,输入的维度很高,而Transformer的时间复杂度随着输入序列长度增加指数增长。为了提升Transformer在长序列上的运行效率,通过让key只和关键query形成稀疏的attention减少大量运算量。作者通过实验方法,attention score具有非常明显的长尾性,少数的score比较大,大多数score很小,因此只要重点建模那些重要的关系即可。如果一个query和其他key的attention score接近均匀分布,那么这个query就是简单的把其他value加和求平均,意义不大。因此Informer中提出计算每个query的attention score打分分布和均匀分布的KL散度,对于重要性不大的query,key就不和这些query计算attention,形成了sparse attention的结构,带来计算效率的大幅提升。
此外,针对时间序列任务,Informer还引入了self-attention distillation,在每两层Transformer之间增加一个卷积,将序列长度缩减一半,进一步减少了训练开销。在Decoder阶段,则采用了一次性预测多个时间步结果的方法,相比传统GPT等autoregressive的方法缓解了累计误差问题。
5.Autoformer
论文题目:Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting(NIPS 2021)
下载地址:https://arxiv.org/pdf/2106.13008.pdf
Autoformer是Transformer的升级版本,针对时间序列问题的特性对原始Transformer进行了一系列优化。模型的整体结构如下图,核心是Series Decomposition Block模块和对多头注意力机制的升级Auto-Correlation Mechanism。这里推荐想详细了解Autoformer细节的同学参考杰少的这篇文章:,整理的非常全面深入。下面给大家简单介绍一下Auroformer的各个模块。
第一个模块是Series Decomposition Block,这个模块主要目的是将时间序列分解成趋势项和季节项。在最基础的时间序列分析领域,一个时间序列可以被视为趋势项、季节项、周期项和噪声。对于这4个因素的拆借,有加法模型、乘法模型等,其中加法模型认为这4个因素相加构成了当前时间序列。本文采用了加法模型,认为时间序列由趋势项+季节项构成。为了提取出季节项,本文采用了滑动平均法,通过在原始输入时间序列上每个窗口计算平均值,得到每个窗口的趋势项,进而得到整个序列的趋势项。同时,根据加法模型,将原始输入序列减去趋势项,即可得到季节项。整个Series Decomposition Block的公式可以表示为:
模型的输入结合Series Decomposition Block模块。Encoder部分输入历史时间序列,Decoder部分的输入包括趋势项和季节项两个部分。趋势项由两部分组成,一部分是历史序列经过Series Decomposition Block分解出的趋势项的后半部分,相当于用历史序列近期的趋势项作为Decoder的初始化;趋势项的另一部分是0填充的,即目前尚不知道的未来序列的趋势项,用0进行填充。季节项和趋势项类似,也是由两部分组成,第一部分为Encoder分解出的近期季节项,用于初始化;第二部分为Encoder序列均值作为填充,公式如下。
Encoder部分的主要目的是对复杂的季节项进行建模。通过多层的Series Decomposition Block,不断从原始序列中提取季节项。这个季节项会作为指导Decoder在预测未来时季节项的信息。Encoder部分的公式如下,Auto-correlation代表Auto-Correlation Mechanism,我们在下面再进行介绍。
Decoder部分也是类似的结构,利用Encoder信息和Decoder输入进行预测,公式如下:
第二个模块是Auto-Correlation Mechanism,是对传统Transformer在时间序列预测场景的升级。Auto-Correlation Mechanism的核心思路是利用时间序列的自相关系数,寻找时间序列最相关的片段。时间序列的自相关系数计算时间序列和其滑动一个步长后的时间序列的相关系数。举例来说,如果一个时间序列是以年为周期,那么序列平移365天后,原序列和平移后的序列相关系数是很高的。AutoFormer利用了这个性质,计算各个滑动步长的自相关系数,并选择相关系数top k的滑动步长。
在具体实现上,Auto-Correlation Mechanism替代了Transformer中的self-attention结构,其公式如下。首先,将输入的时间序列通过全连接映射成Q、K、V,这和multi-head attention相同。接下来,计算Q和K之间各个周期的相关系数,选择相关系数最高的top k,这k个周期代表着Q和K的高相关性周期。这个过程可以理解为计算attention,与以往attention不同的是,这里计算的是片段的相似关系而非点的相似关系。最后,利用softmax得到每个周期归一化的权重,对V的对应周期平移结果进行加权求和。
文中使用快速傅里叶变换(FFT)计算自相关系数。下图分别展示了Auto-Correlation Mechanism,以及这种自相关机制相比Transformer中的自注意力机智的区别。自相关机制利用时间序列的平移寻找相似的片段,而自注意力机制关注点之间的关系。
6.Pyraformer
论文题目: Pyraformer: Low-complexity pyramidal attention for long-range time series modeling and forecasting(ICLR 2022)
下载地址:https://openreview.net/pdf?id=0EXmFzUn5I
在长周期的时间序列预测问题中,如何平衡运算复杂度以及缩短两个时间点之间的交互距离一直是研究的焦点(如下表为各个模型的运算复杂度及两点最长路径)。RNN、CNN这种模型对于输入长度为L的序列,两个时间点的最长路径为L,在长周期中节点之间信息交互比较困难。而Transformer引入了Attention机制,让两两节点之间可以直接交互,但是提升了时间复杂度。
本文提出了一种树形结构的Transformer,用于解决长周期时间序列预测问题。从下到上,时间序列的粒度逐渐变粗。最底层为原始输入的时间序列,上层为使用卷积聚合得到的粗粒度序列。每个节点和3种节点做attention:该节点的子节点、该节点的相邻邻居节点、该节点的父节点。通过这种方式,任何两个节点之间都可以直接交互,并且时间复杂度大幅降低。
在预测时,一种是把经过上述编码得到的表示直接接全连接映射到预测空间。另一种方法是使用一个额外的Decoder,采用类似Transformer中的方式进行解码。
7.FEDformer
论文题目:FEDformer: Frequency enhanced decomposed transformer for long-term series forecasting(2022)
下载地址:https://arxiv.org/pdf/2201.12740.pdf
FEDformer的主要思路也是将Transformemr和 seasonal-trend decomposition结合起来。使用普通的Transformer进行时间序列预测时,经常会出现预测的数据分布和真实分布存在比较大的gap。这主要是由于Transformer在进行预测每个时间点是独立的利用attention预测的,这个过程中可能会忽略时间序列整体的属性。为了解决这个问题,本文采用了两种方法,一种是在基础的Transformer中引入 seasonal-trend decomposition,另一种是引入傅里叶变换,在频域使用Transformer,帮助Transformer更好的学习全局信息。
FEDformer的核心模块是傅里叶变换模块和时序分解模块。傅里叶变换模块将输入的时间序列从时域转换到频域,然后将Transformer中的Q、K、V替换成傅里叶变换后的频域信息,在频域中进行Transformer操作。
8.Non-stationary Transformer
论文标题:Non-stationary Transformers: Rethinking the Stationarity in Time Series Forecasting(NIPS 2022)
下载地址:https://arxiv.org/pdf/2205.14415.pdf
时间序列的不平稳性(non-stationarity)是一个比较难处理,且真实世界中很常见的问题。业内解决这种统计量随时间变化的不平稳问题主要方法是,对时间序列数据做一些诸如归一化等平稳化处理。例如对每个序列样本使用z-normalization处理成0均值1方差的,这样就可以解决不同时间步的样本统计量不一致的问题。但是这种解决方法会对Transformer模型带来一个负面影响:平稳化后的序列虽然统计量一致了,但是这个过程中也让数据损失了一些个性化的信息,导致不同序列的Transformer中的attention矩阵趋同。文中将这个现象叫作over-stationarization。
这篇文章提出了一种新的Transformer结构Non-stationary Transformers,核心包括两个部分:一个是对输入序列的归平稳化处理的预测结果反平稳化处理方法;另一个是让Transformer能够处理平稳化序列的同时,学习不平稳化数据中的attention规律。
为了让Transformer能够直接从平稳化前的时间序列中学习attention pattern,本文提出了De-stationary Attention。对于每个Attention层,由于输入的是平稳化后的序列,其和平稳化前序列的关系可以表达成如下公式:
并可以进一步转换为如下表达式:
因此,想要使用平稳化前的序列计算attention,核心就是去计算3项:平稳化的方差、Q在时间维度上的均值、平稳化前的序列得的K。文中采用原始序列和一个MLP网络来学习这两个部分:
通过这种方式,既能让模型在平稳化后的序列上学习,又能让模型根据非平稳化前完整的序列信息学习Transforomer的attention pattern。模型的整体结构如下图所示。
9.PatchTST
论文标题:A TIME SERIES IS WORTH 64 WORDS: LONG-TERM FORECASTING WITH TRANSFORMERS(ICLR 2023)
下载地址:https://arxiv.org/pdf/2211.14730.pdf
这篇文章提出了基于Transformer时序预测和时序表示学习新方法,将时间序列数据转换成类似Vision Transformer中的patch形式,取得非常显著的效果。
本文提出的Transformer多元时间序列预测模型,核心思路为以下2点:
- Patching:原来的时间序列预测方法都是每个time step输入到模型中,这种方式一方面在历史序列比较长的时候运行效率太低,导致无法引入更长的历史序列信息;另一方面每个time step包含的信息量很少,不像NLP中一个token那样有明确意义。因此文中借鉴了Vision Transformer的思路(如下图),也将时间序列分成patch的形式进行建模。
- Channel-independence:原来的多元时间序列建模方法中,将多个变量融合到一个embedding建模。而本文采用了channel-independence的方法,即每个变量的序列单独映射到独立的embedding进行建模。
10.CrossFormer
之前用Transformer解决时间序列问题的工作,大多集中在如何更合理的进行时间维度的关系建模上。利用时间维度的自注意力机制,建立不同时间步之间的关系。
而在多元时间序列预测中,各个变量之间的关系也很重要。之前的解法,主要是将每个时间步的多元变量压缩成一个embedding(如下图中的b),再进行时间维度的attention。这种方法的问题是缺少对不同变量之间关系的建模。因为时间序列不同变量的含义是不同的,每个变量应该在哪个时间片段进行对齐无法提前预知,直接每个时间步融合的方式显然太粗糙了。
基于以上考虑,本文对Transformer在多元时间序列预测的应用中进行了改造,将多元时间序列转换成patch,增加了变量维度之间的attention(如上图中的c),并考虑到效率问题,提出了基于路由的变量间attention机制。
模型整体包含3个主要模块:
- Dimension-Segment-Wise Embedding:这个模块的主要目标是将时间序列分成patch形式,得到patch embedding,作为后续模型的输入,类似于之前文章介绍的方法,将每个变量的时间序列按照一定的窗口与划分成多个区块,每个区块通过全连接进行映射,本文不再详细介绍;
- Two-Stage Attention Layer:两阶段的attention,第一阶段在时间维度进行attention,第二阶段在多变量之间进行attention;
- Hierarchical Encoder-Decoder:采用不同的patch尺寸和划分方式,形成层次的编码和解码结构。