《A DECODER-ONLY FOUNDATION MODEL FOR TIME-SERIES FORECASTING》阅读总结

ops/2024/10/18 6:13:25/

介绍了一个名为TimeFM的新型时间序列预测基础模型,该模型受启发于自然语言处理领域的大语言模型,通过再大规模真实世界和合成时间序列数据集上的预训练,能够在多种不同的公共数据集上实现接近最先进监督模型的零样本预测性能。

该模型使用真实世界和合成数据集构建的大型时间序列语料库进行预训练,并展示了在不同领域、预测范围和时间粒度的未见数据集上的准确零样本预测能力。

1、引言

时间序列在零售、金融、制造业、医疗保健和自然科学等各个领域无处不在。近年来,深度学习模型已成为预测丰富多元时间序列的流行方法。

深度学习模型: 

1、David Salinas, V alentin Flunkert, Jan Gasthaus, and Tim Januschowski. Deepar: Probabilistic forecasting with autoregressive recurrent networks. International Journal of F orecasting, 36(3):1181–1191, 2020.

2、Boris N Oreshkin, Dmitri Carpov, Nicolas Chapados, and Y oshua Bengio. N-beats: Neural basis expansion analysis for interpretable time series forecasting. In International Conference on Learning Representations, 2019.

3、Rajat Sen, Hsiang-Fu Y u, and Inderjit S Dhillon. Think globally, act locally: A deep neural network approach to high-dimensional time series forecasting. Advances in neural information processing systems, 32, 2019.

4、Tian Zhou, Ziqing Ma, Qingsong Wen, Xue Wang, Liang Sun, and Rong Jin. Fedformer: Frequency enhanced decomposed transformer for long-term series forecasting. In International Conference on Machine Learning, pages 27268–27286. PMLR, 2022.

5、Si-An Chen, Chun-Liang Li, Nate Y oder, Sercan O Arik, and Tomas Pfister. Tsmixer: An all-mlp architecture for time series forecasting. arXiv preprint arXiv:2303.06053, 2023.

旨在设计一个通用的时间序列基础模型,以获得良好的开箱即用的零样本预测性能,在大量时间序列数据上训练的大型预训练模型学习时间模式,从而对以前未见过的数据集进行时间序列预测。

TimeFM是一个用于时间序列预测的单一基础模型,当用于不同领域的各种以前未见过的预测数据集时,可以获得接近最先进的零样本精度(与这些数据集单独训练的最佳监督模型相比),该模型可以很好的跨越不同的预测历史长度、预测长度和推断时间粒度。

基础模型的两个关键元素:①使用现实世界数据和合成数据构建的大规模时间序列语料库;②采用带有输入补丁的解码器风格注意力架构(输入补丁:将输入数据分割成小块或补丁,并将这些补丁作为模型的输入)

2、最近工作

预测模型可分为以下几类

1、局部单变量模型:分别针对数据集中的每个时间序列进行训练,以便预测相应的时间序列的未来。

2、全局单变量模型:在许多时间序列上进行全局训练,但在推理过程中,将时间序列的未来作为其自身过去和其他相关协变量的函数来预测。

3、全局多变量模型:采用数据集中所有时间序列的过去来预测所有时间序列的未来。

3、问题定义

建立一个通用的零样本预测器,接受时间序列的过去C个时间点作为上下文,并预测未来的H个时间点。定义预测的准性可以通过均方误差(MAE)等指标来衡量。

4、模型架构

本文提出:允许模型的预测输出patch的长度大于输入patch的长度,假设输入patch_len为32,输出patch_len为128

patch掩蔽:如果只使用patch,模型可能只学会预测上下文长度是输入patch长度的倍数。因此在训练中应小心使用掩蔽,patch的部分以及上下文窗口开始的整个补丁都可以在数据批处理中被屏蔽(随机屏蔽策略)。

输入层:将时间序列预处理成变换器层的输入token。首先,输入被分解成连续的非重叠的patches,然后,每个patch通过残差块(residual block)处理成模型维度大小的向量。同时,还提供了一个二进制填充掩码(padding mask),用于指示哪些输入应该被忽略,残差块本质上是一个多层感知器(MLP)块,带有一个隐藏层和跳跃连接。

堆叠变换器(stacked transformer):模型的大部分参数位于堆叠的变换器层中,每层都有标准的多头自注意力机制(multi-head self-attention, SA)后跟一个前馈网络(Feedforward Network,FFN)。使用因果注意力(causal attention),即每个输出token只能关注序列中它之前的输入token(包括相应的输入令牌),这种设计允许模型并行处理整个上下文窗口,并在看到不同数量的输入patches后自动预测未来的时间点。

输出层:任务是将输出token映射成预测。模型以解码器仅模型(decoder-only mode)训练,即每个输出token应该能够预测紧随其后输入patch的部分时间序列,与输入patch长度不同,输出patch长度可以更长,这意味着可以根据迄今为止看到的输入patch编号的信息预测更大的时间序列块。

损失函数:专注于点预测,因此使用了均方误差作为训练期间的损失函数。损失函数是在所有训练小批量上的预测误差的平均值。

训练:模型使用标准的微批量梯度下降进行解码器仅模式的训练,通过时间序列的所有窗口进行迭代。训练中唯一的非标准部分是训练期间掩码的采样方式。

        对于批次中的每个时间序列,对0—p-1之间的随机数r进行采样,然后设置1—r为1,其余为0,由此屏蔽输入patch的一小部分。

推理:训练好的网络可以使用自回归解码(类似于大语言模型)为任何预测范围生成预测。给定输入时间序列,模型首先预测下一个时间步的未来,然后使用生成的输出作为输入来生成下一个输出patch的预测,依此类推。

5、预训练细节

预训练语料库包含大量代表各种领域、趋势和季节性模式以及时间粒度的时间数据,从三个主要来源获取用于训练模型的大量数据来解决这个问题。主要数据来源是:

1、Google trends:该数据集捕获了从2007年到2022年数百万查询的搜索兴趣,作者选择了约22000个主要查询,并下载了这些查询在小时、日、周和月粒度上的搜索兴趣数据。

2、wiki pageviews:该数据集捕获了从2012年1月到2023年11月所有wikimdedia页面的小时级浏览量。作者清晰并聚合了这些数据,并过滤掉包含多零值的页面浏览时间序列。

3、合成数据:创建了合成时间序列生成器,包括ARMA过程、季节性模式(不同频率的正弦波和余弦波混合)、趋势(线性、指数带有一些变化点)和阶跃函数。合成时间序列可以是一个或多个这些过程的加性组合。

4、其他真实世界数据源:添加其他公开的数据集,包括M4数据集的所有粒度、小时和15min的电力数据集、小时交通数据集,以及用于评估的10min粒度的气象数据集。

未完成,待续......


http://www.ppmy.cn/ops/52314.html

相关文章

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写…

linux常用API接口

linux常用API接口 文章目录 linux常用API接口1.应用层内存映射mmap取消内存映射munmap终端打印可用方式1.puts 函数2.文件操作函数 fprintf3.字符输出函数 putchar4.fwrite 函数 2.内核层 1.应用层 内存映射mmap mmap 是一个用于内存映射的系统调用,它可以将一个文…

C语言 -- 宏的变长参数定义

C语言宏定义中的可变参数处理 在C语言的宏定义中,我们可以使用可变参数来创建更加灵活和通用的宏。C99标准引入了__VA_ARGS__,而GNU编译器扩展了...args。这两者在处理可变参数时有所不同。本文将介绍它们的区别、使用场景以及相关示例。 背景介绍 __…

java实现持续集成

要使用Java实现Jenkins持续集成,你可以使用Jenkins的Java客户端库来执行一些常见的操作,例如创建任务,触发构建等。下面是一个简单的示例代码,展示了如何使用Java实现Jenkins持续集成: java import com.offbytwo.jenk…

C# 中不同类型的构造函数

介绍 在本文中,我们将学习 C# 中的构造函数和构造函数类型。C# 中有五种不同类型的构造函数。构造函数用于创建类的对象。以下是 C# 中的构造函数列表。 默认构造函数参数化构造函数复制构造函数静态构造函数私有构造函数 什么是构造函数? 构造函数是…

(转)请介绍一下Redis的数据淘汰策略

1. **NoEviction(不淘汰)**:当内存不足时,直接返回错误,不淘汰任何数据。该策略适用于禁止数据淘汰的场景,但需要保证内存足够。 2. **AllKeysLFU(最少使用次数淘汰)**:…

如何关闭软件开机自启,提升电脑开机速度?

如何关闭软件开机自启,提升电脑开机速度?大家知道,很多软件在安装时默认都会设置为开机自动启动。但是,有很多软件在我们开机之后并不是马上需要用到的,开机启动的软件过多会导致电脑开机变慢。那么,如何关…

【计算机网络篇】数据链路层(13)共享式以太网与交换式以太网的对比

文章目录 🍔共享式以太网与交换式以太网的对比🔎主机发送单播帧的情况🔎主机发送广播帧的情况🔎多对主机同时通信 🛸使用集线器和交换机扩展共享式以太网的区别 🍔共享式以太网与交换式以太网的对比 下图是…