书接上回,我们在之前的文章已经分析了直接把transformer应用到时间序列预测问题的不足,其中我们总结了4个不足:分别是:
其中Informer对第一点做了较大的改进;Non-stationary Transformers围绕第四点做了较多改进。那么2023年ICLR的文章Patch TST,对第一、二、三点,特别是第二点做了极大的改进。Patch TST发表后,现在已经有大量的Patch相关的时序论文发表,如下是一些patch相关的时序论文,Patch俨然成为最新的时序热点趋势。
香港科技大学:A Multi-Scale Decomposition MLP-Mixer for Time Series Analysis
华为:Multi-resolution Time-Series Transformer for Long-term Forecasting
我相信即便是非CV领域的同学,也一定听说过VIT(Vision Transformer)模型。这个VIT模型是Google在2020年提出的将Transformer应用在图像分类的模型。论文题目:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale。你可以发现Patch TST和VIT在题目上的相似性。
在VIT中,"patch" 是指将输入图像分割成均匀大小的小区域。这些小区域通常是正方形或矩形,并且被视为模型的基本单位。并且在输入到Transformer模型之前,通常会进行一些变换(如嵌入层),以便将它们转换为Transformer可接受的格式。每个图像块都被视为一个“标记”(token),它们被重新排列并输入到Transformer的注意力机制中进行处理,以捕获图像内部和区域之间的关系。
在Patch TST中,“patch”则是将输入时间序列按照一定大小的窗口和步长分割。并以分割形成的“时序块”作为输入,传输到Transformer进行建模的方式。
Patch TST作者在论文中,首先进行了一个case study来验证时间序列Patch的好处。结果如下,其中L是look-back window的长度,N是input tokens的长度。右表说明进行patch后,运行时间大幅缩短约至L/N。左表说明两件事:首先,对比前两行说明L越大,提供的时序信息越多,预测误差越小(但L越大计算复杂度越高);其次,Patch之后进行self- supervised进一步降低了预测误差。
不拘泥于时序数据,我们将patch的好处总结如下:
模型对每个输入的单变量时间序列进行分割,形成patch,注意这些patch可以是重叠的或非重叠的。Patch长度为 P,步长为 S(两个连续patch之间的不重叠区域),那么,patch的数量可以表示为N = [(L−P) /s] + 2。通过patch,输入的数量可以从 L 减少到大约 L/S。而注意力机制的内存使用和计算复杂度是成平方减少的。
图(b)和图(c)在结构上的区别在于图(b)最后进行了Flatten,然后进行预测。在训练方法上的主要区别在于,图(c)通过随机赋值为0的方式遮盖了部分patch,然后通过self-supervised重建被遮盖的数据。通过这种自监督学习的方式,模型可以更好地捕捉时间序列中的模式和特征。
我们自下而上逐层过一遍模型结构:
两个矩阵在这个过程中起到了不同的作用:
主要作用是特征映射或转换,将patch数据转换为更适合Transformer处理的表示形式; 是一个可学习的位置编码矩阵,用于捕获patch之间的时间顺序信息。
可以发现,如果没有self-supervised,本文其实就是把时序数据切块,然后把切块数据做了一个线性映射,作为transformer输入,最后进行预测。看起来无比简单,但是据作者进行的实验,效果和计算效率提升还是巨大的。这就是patch带来的好处。
自监督表示学习已成为从未标记数据中提取高层抽象表示的热门方法。在PatchTST中,作者也是故意随机移除输入序列的一部分内容,并训练模型恢复缺失的内容。然而,不同于文本,如果我们不进行patch,直接把时序数据输入则会存在两个潜在问题:
但是进行Patch后可以自然地克服前面提到的问题。按照我自己的理解,我们现在遮住的是“数据块”,而非“数据点”。预测的也是一个patch块,自然也就不存在插值的问题。
未来把Patch作为一个基础模块,围绕Patch进行改进,一定会出很多时序论文,不过Patch是CV2020的产物,时序研究落后有点严重啊
如有问题,请大家指正