PatchTST: 基于Transformer的长时间序列预测

算法进阶

共 2537字,需浏览 6分钟

 ·

2024-04-10 18:51

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

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

6a04a2770842e2cd706010d75b24d5d5.webp

论文标题:

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),得到预测的单变量输出序列。
bbe05bfdac73909ed0106611e7985765.webp
分 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 中也采用了这种方式。
9bbe09841f18d57a0f43f4ea3538f122.webp

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

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


实验结果


9077b98bd7b25efd52c30aec8132c9c7.webp

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



总结


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

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报