论文地址:https://arxiv.org/pdf/2211.14730.pdf
代码地址:https://github.com/yuqinie98/patchtt
创新点
PatchTST模型有两方便的创新:1)Patch 操作, 将输入分成一定数量的patch,然后一个patch类似于之前一个时间点数据输入到模型中,这么做的原因在于让模型能看到更长的的数据,同时也减少了attention的计算; 2)采用channel-independent 的方。多变量的时间序列预测也就对应着多个通道, 所谓的通道独立指的是将多个变量的数据拆解成多个单独序列, 然后送入到模型中, 作者认为, 变量之间的相互关系是通过模型的参数共享实现的
模型结构
数据到模型
数据进入到模型的时候,会拆分成多个独立的序列分别送入到模型中,最后拼接得到最终的输出结果
训练任务
论文中提供两类型的任务:一类为监督学习; 另一类为自监督学习。以下分别做简单的介绍
监督学习
在监督学习的任务中, 目标是预测下个时间步的value。以下为模型的架构图, 从图中可以看到,PatchTST模型采用的Transformer的encoder部分对时间序列建模。从图中也可以看到,在数据输入的时候采用Patch操作以便能够建模更长的时间序列。
自监督学习
自监督学习的模型架构图如下, 其模仿的时bert mlm 任务, 随机mask掉一部分patch, 尝试让模型能够重构出被mask掉的部分, 作者认为,单个时间步的mask 任务相对简单, 原因在于可以通过该时间点的上下时间点位置能够推断出当前被mask掉的部分, 如果被mask 掉的时patch 则模型需要恢复的内容比较多,任务难度加大有助于模型不断去学习更好的知识,模型的建模能力更强。
关于代码中pred_len, seq_len以及label_len
pre_len如蓝色部分所示
label_len如橙色部分所示
seq_len如黄色部分所示
这里边pre_len就是需要预测的序列的部分, seq_len就是需要用前边多长数据进行预测。比较难理解的时label_len, label_len这块其实继承自patchTST前几篇文章(informer), 主要是在decoder部分给其一定的提示信息。
但是我们知道,patchTST没有用到decoder, 但依旧沿用了pred_len, 输入为seq_len, 让模型预测的是pred_len _+ label_len部分, 但是损失函数计算并没有计算label_len
有关于pred_len有没有用?本人在自己的数据中做了尝试,我的结论是,对我的数据没有用。