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

2024-06-21 08:20

本文主要是介绍《A DECODER-ONLY FOUNDATION MODEL FOR TIME-SERIES FORECASTING》阅读总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍了一个名为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粒度的气象数据集。

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

这篇关于《A DECODER-ONLY FOUNDATION MODEL FOR TIME-SERIES FORECASTING》阅读总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080694

相关文章

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.