点关注,不迷路,用心整理每一篇算法干货~
今天给大家介绍一篇中科大和清华在KDD 2024中联合发表的时间序列预测模型文章。这篇文章致力于训练一个类似于NLP、CV等领域的统一时间序列大模型,构建了一个比较新颖的时间序列预测模型结构,实现了在多种类型数据上统一训练、任意长度的结果预测,显著提升了时间序列预测模型的通用性。
论文标题:Generative Pretrained Hierarchical Transformer for Time Series Forecasting
下载地址:https://arxiv.org/pdf/2402.16516
随着预训练技术在NLP、CV中的发展,很多工作都希望将在时间序列领域也应用预训练的思想,预训练一个的时间序列模型,能够提升下游任务的效果。然而现有的时间序列预训练建模方法存在2个核心问题。
第一个问题是数据类型较少。很多预训练工作只在一个数据集上预训练,然后在这个数据集上评测效果,然而单个数据集的数据量较少,限制了时间序列模型预训练的能力。
第二个问题是,目前大部分的建模方法在预测阶段,都采用一步预测的方法,例如通过一个MLP网络,直接一步预测出未来多个时间步的值。这种方式存在2个弊端。首先是无法实现任意时间步的预测,模型训练好之后,就只能满足这个时间步数量的预测,扩展性差。其次是这种建模方法,完全忽略了预测各个时间步之间的关系。
为了解决上述问题,本文提出了一种新的基于Transformer的时间序列预训练模型,实现多源数据联合训练和任意时间步的预测。
模型的整体结构如下图所示,核心主要包括数据处理、层次Transformer、推断过程三个部分。
在数据处理方面,文中基于channel-Independent的假设,采用混合数据集的方式进行训练。对于不同数据集,无论是单变量时间序列还是多变量时间序列,都当成单变量序列,输入到模型中,实现多类型数据集的兼容。每个时间序列使用ReVIN的方式进行归一化,缓解distribution shift的影响。对于每个序列,使用Patch的方式进行序列分段和patch Embedding的生成,作为后续模型的输入。
在模型结构方面,本文采用了层次Transformer的建模方法。层次Transformer在很多场景都有应用,主要是通过不同粒度的Transformer实现不同粒度周期性信息的提取。在具体实现上,每一层的Transformer输出结果,都会使用max-pooling进行一次下采样,将粒度由细变粗,再输入到下一层Transformer。通过多层的由细到粗的Transformer模型,实现对时间序列不同粒度信息的提取。
在预测时,也会充分利用这种多粒度的信息。这里利用了类似于Nbeats中残差网络的形式,每一层的输入是上一层的输入减去这一层的输出,让每一层Transformer注重去学上一层没有学习到的部分。最终预测结果也使用每一层的预测结果之和生成。
在模型的训练方式上,文中采用了类似语言模型的优化方法,预测下一步的时间序列值。通过这种方式,将时间序列建模成生成式的,在推断阶段,预测结果可以进一步加入到模型中预测下一个时间步的值,建立了预测结果之间的关系。也可以更灵活的实现任意长度的时间序列预测。
文中对比了和自监督、有监督等各类SOTA时间序列预测方法的效果,本文提出的方法取得了显著提升。同时,文中也对比了是否进行模型finetune的效果差异(带星号的为不finetune的模型),在目标数据集上进行finetune可以进一步提升模型的效果。
投稿&加交流群请加微信,备注机构+方向拉群~