PatchTST:提升长时间序列预测的新方案

PatchTST提出了通过Patching和自监督学习提升长时间序列预测的方法,展现了良好的性能。

原文标题:PatchTST: 基于Transformer的长时间序列预测

原文作者:数据派THU

冷月清谈:

本文介绍了PatchTST,这是一种基于Transformer的长时间序列预测模型,作者逐步证明了在DLinear中提出的Transformer可能不适用于序列预测的观点是值得商榷的。PatchTST的核心思想是Patching,它将时间序列分成若干个时间段(每个时间段称为一个patch),而非直接将每一个时间点视为一个token。这种处理方法有效降低了Attention计算的复杂度,并保持时间序列的局部性。相比于传统的多个通道混合方式,PatchTST采用Channel-independence原则,仅处理单一通道的信息,同时共享权重,显著提升了预测的效果。实验结果显示,PatchTST在性能上超过DLinear及其他Transformer系列模型,尽管文章认为其创新性并不强。

怜星夜思:

1、PatchTST与DLinear相比,在哪些方面具体优越?
2、自监督学习对时间序列预测的影响有哪些?
3、分 patch 的方法是否可以应用于其他类型的数据?

原文内容

图片
来源:算法进阶

本文约1200字,建议阅读5分钟

本文证明了 DLinear 中 Transformer可能不适合于序列预测任务的声明是值得商榷的。


本文中了 2023 ICLR。PatchTST 作为 Transformer-based 预测模型,它是和计算机视觉中的 ViT 最相似的一篇论文(文章标题也很像)。


它成功超过了 DLinear,也证明了 DLinear 中 Transformer可能不适合于序列预测任务的声明是值得商榷的。


论文标题:
A Time Series is Worth 64 Words: Long-term Forecasting with Transformers
论文链接:
https://arxiv.org/pdf/2211.14730.pdf
代码链接:
https://github.com/yuqinie98/patchtst


建议先看一下下面关于 DLinear 的回答和 DLinear 论文:

https://www.zhihu.com/question/493821601/answer/2506641761

https://arxiv.org/pdf/2205.13504.pdf


核心思路


1.1 Patching


本文的核心思想就是 Patching,这和 Preformer 中的核心思想很相似,只不过效果要比 Preformer 好不少。具体来说,它们都是将时间序列分成若干个时间段(Preformer 里用的术语是 segment,本文用的是 patch,实际上是差不多的),每一个时间段视为一个 token(这不同于很多 Transformer-based 模型将每一个时间点视为一个token)。


Preformer 的论文和详细解析如下:

https://arxiv.org/pdf/2202.11356.pdf

https://zhuanlan.zhihu.com/p/536398013


分 patch 的结构如下图所示。对于一个单变量序列(为什么是单变量,可以看下一小节 Channel-independence 中的介绍),将其划分为   个 patch(可以是有重叠的,也可以是无重叠的,无重叠的情况就相当于 Preformer 中的均匀分段),每个 patch 的长度为 


然后将每个 patch 视为一个 token,进行 embedding 以及加上位置编码,即可直接输入到普通的 Transformer 中(图中的 Transformer Encoder)。最后将向量展平之后输入到一个预测头(Linear Head),得到预测的单变量输出序列。



分 patch(时间段)的好处主要有四点:


1. 降低复杂度,因为 Attention 的复杂度是和 token 数量成二次方关系。如果每一个 patch 代表一个 token,而不是每一个时间点代表一个 token,这显然降低了 token 的数量。


2. 保持时间序列的局部性,因为时间序列具有很强的局部性,相邻的时刻值很接近,以一个 patch 为 Attention 计算的最小单位显然更合理。


3. 方便之后的自监督表示学习,即 Mask 随机 patch 后重建。


4. 分 patch 还可以减小预测头(Linear Head)的参数量。如果不分 patch 的话,Linear Head 的大小会是   是输入序列长度,  是序列个数,  是预测序列长度;如果分 patch 的话,Linear Head 的大小是   是 patch 个数要远小于  。因此,分 patch 之后,Linear Head 参数量大大减小,可以防止过拟合。


1.2 Channel-independence


很多 Transformer-based 模型采用了 channel-mixing 的方式,指的是,对于多元时间序列(相当于多通道信号,直接将时间序列的所有维度形成的向量投影到嵌入空间以混合多个通道的信息。Channel-independence 意味着每个输入 token 只包含来自单个通道的信息。本文就采用了 Channel-independence,DLinear 中也采用了这种方式。



如上图,本文将多元时间序列(维度为  )中每一维单独进行处理,即将每一维分别输入到 Transformer Backbone 中,将所得预测结果再沿维度方向拼接起来。这相当于将不同维度视为独立的,但 embedding 和 Transformer 的权重在各个维度是共享的。这样的话,每个 Transformer Backbone 只需要处理单变量序列。


1.3 自监督表示学习



这就很直观了,直接 mask 掉一些 patch 然后进行重建即可。对于每一个 token(patch),它通过 Transformer Encoder 后输出维度是  ,由于该 patch 本身的长度是  ,因此要重建它的话,再加上一个   的 Linear 层即可。作者还说明了分 patch 对 mask 重建来进行自监督学习的好处:mask 一个时间点的话,直接根据相邻点插值就可以重建,这就完全没必要学习了,而 mask 一个 patch 来重建的话则更有意义更有难度。


先进行自监督训练再微调下游预测任务,效果会比直接训练下游预测任务要好。


实验结果



可以看到 PatchTST 的效果超过了 DLinear 以及其它的 Transformer-based 模型。


总结


论文最核心的两点,分 patch、通道独立、以及自监督 mask 重建的做法在之前的时间序列相关论文中都已经存在了,所以我认为创新性并不是很强,但是效果不错。


编辑:于腾凯

校对:林亦霖

自监督学习通过遮盖部分patch进行重建,可以引导模型更好地学习时间序列的特征。这种方式比简单插值来得更有意义,更能提高模型的泛化能力。

是个好主意!不过,学习的任务性质不同,可能需要调整模型。比如NLP中的句子结构和上下文关系可能会影响patch的设计。

以前我认为自监督学习只是个噱头,但看了PatchTST的解释,我才明白它不仅能让模型自我改进,也能促进有效的特征学习,为后续的预测任务铺平了道路。

自监督学习在时间序列中的应用确实可以启发更多的模型设计。比如,是否能用不同的mask策略进一步优化效果呢?

我觉得PatchTST的实验结果很有意思。虽然DLinear在之前的应用中表现突出,但PatchTST在效果上强于它,或许是由于它更好地适应了时间序列的特性吧!

我觉得分 patch的方法可以扩展到其他领域,比如图像处理或者自然语言处理。将大数据分段处理可以减少计算复杂度,提高模型的效率。

确实有可能!例如在图像上,一个patch可以对应一个区域,通过集中局部的信息图像特征的提取应该会更有效。

PatchTST在处理复杂度上具有优势,分 patch 后大大降低了token数量,从而减少了计算负担。此外,它更能抓住时间序列的局部性,预测准确率得以提升。

从我的理解来看,PatchTST采用的Channel-independence方式,使得每个通道的信息处理变得更为独立,避免了混合带来的困难,也简化了模型结构。