前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PatchTST: 基于Transformer的长时间序列预测

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

作者头像
算法进阶
发布2024-02-17 14:34:40
8770
发布2024-02-17 14:34:40
举报
文章被收录于专栏:算法进阶算法进阶

本文中了 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 重建的做法在之前的时间序列相关论文中都已经存在了,所以我认为创新性并不是很强,但是效果不错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 Patching
  • 1.2 Channel-independence
  • 实验结果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档