前言:
Transformer如何应用于时间序列预测一直是近期探讨的一个核心问题,包括多变量建模的处理方式、Transformer的结构等。
在DLinear中,提出了用线性模型打败Transformer模型;在后来的PatchTST等工作中,又验证了Transformer的有效性。那么,到底如何使用Transformer进行时间序列预测效果最好呢?
这里给出另外两篇工作的Github链接,大家可以阅读代码学习建模思路:
DLinear:https://github.com/honeywell21/DLinear
PatchTST: https://github.com/PatchTST/PatchTST
PETformer:
文章主要从两个角度探索了Transformer如何应用于时间序列预测,一方面是Transformer的结构上,提出了Placeholder-enhanced结构;另一方面是多变量关系建模上,探索了最有效的建模方式。
论文标题:PETformer: Long-term Time Series Forecasting via Placeholder-enhanced Transformer
下载地址:https://arxiv.org/pdf/2308.04791v1.pdf
·输入数据构建:
时序和NLP存在差异——时序每个节点并没有明确含义,需要结合上下文信息才能体现出来;而NLP每个token就会有明确的语义含义。因此,文章中仍然沿用了PatchTST的方式,将时间序列分成多个patch,每个patch分别生成embedding。
与PatchTST的差别是,文中使用了更大的子序列长度,这样一方面可以提升运算效率,另一方面也让每个patch的语义信息更加明确。(读者可以考虑下为什么之前的工作的实验部分没用到更大的子序列)
同时,文中也使用RevIN的方式,对输入序列进行了归一化处理。
·Transformer结构
原本:在Transformer结构上,本文提出了placeholder-enhanced的方式。在原来的Encoder-Decoder结构中,预测序列和历史序列被分割成两个部分分别由Encoder和Decoder建模,再通过cross-attention建立联系。这个过程会使历史序列的信息出现损失,无法完美应用到Decoder中。
为了解决这个问题,文中采用了placeholder-enhanced的方式,在Decoder部分使用几个可学习的向量作为输入,不再区分Encoder和Decoder,而是拼接到历史序列的token上,一起输入到统一Transformer,让待预测部分可以更自然的获取历史序列信息。
·在attention的计算方式上,文中尝试了如下4种attention计算方式:
1.Full attention:每个节点做双向attention;
2.No inter-future attention:未来序列部分内部不做attention;
3.No inter-history attention:历史序列部分不做attention,相当于未来序列和历史序列每个token独立进行attention;
4.Only future focuses on history:只有未来序列和历史序列做attention,未来序列和历史序列内部都不做attention。
·多变量建模方法
上述的过程中,每个变量是独立建模的,建模过程中没有考虑到各个变量之间的关系,和PatcchTST类似。但是,各变量的关系是有额外信息增益的,因此本文增加了一个Inter-channel Interaction模块,在每个变量独立进行时间维度建模后,再进行一次多变量间关系建模。
具体的建模方式,文中也尝试了4种类型:
1.No channel interaction:每个变量独立,不建模变量间关系;
2.Self-attention:变量间使用self-attention建模;
3.Channel identifier:每个channel用一个可学习的向量,和token计算关系;
4.Cross-attention:结合每个channel的token和identifier进行attention。
·实验结果
1.在模型结构方面,整体结果如下表,使用PET的方式比Encoder-Decoder等结构效果要好,同时full attention的方式要优于其他attention方式。

2. 对于patch内子序列长度的选择,可以看出子序列长度越大,整体效果越好:

3.多变量关系建模方面:
直接将channel融合到一起输入Transformer的效果最差,而其他的各种将channel间信息交互与时序建模分开的方式效果基本不相上下。但是整体来看仍然是不用channel间交互的方式效果会稍好一些。文中认为channel间关系难以建模是导致引入channel间关系建模效果效果提升不明显的原因。
提示:未来工作的motivation,可以思考channel间的关系,用怎样的结构学习比较合适呢?!