自然语言处理:第三十八章: 开箱即用的SOTA时间序列大模型 -Timsfm

自然语言处理:第三十八章: 开箱即用的SOTA时间序列大模型 -Timsfm

文章链接:[2310.10688] A decoder-only foundation model for time-series forecasting (arxiv.org)

项目链接: google-research/timesfm: TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting. (github.com)



摘要

本文介绍了由谷歌研究团队成员共同设计的一种专为时间序列预测设计的解码器通用大基础模型。该模型通过预训练一个采用输入分块技术的解码器风格注意力模型,并结合输入补全(input patching)技术,在包含真实世界和合成数据的大量时间序列语料上实现。其零样本(zero-shot)性能在多种公开数据集上接近于针对每个数据集的最先进监督预测模型的准确性。研究显示,这一模型能够跨越不同领域、预测时段及时间粒度,生成精确的零样本预测。



背景介绍

时间序列数据在零售、金融、制造业、医疗健康和自然科学等多个领域中都扮演着至关重要的角色。在这些领域中,时间序列预测是一项核心任务,对于零售供应链优化、能源和交通预测以及天气预报等科学和工业应用都至关重要。传统的预测方法,如ARIMA或GARCH等统计模型,虽然有其优点,但在处理复杂、多变的时间序列数据时往往力不从心。近年来,深度学习模型,尤其是循环神经网络(RNN)、长短时记忆网络(LSTM)和Transformer等模型,在时间序列预测领域取得了显著的成功,并在多个预测竞赛中表现出色。

然而,这些深度学习模型通常需要大量的有监督数据进行训练,并且在面对新的、未见过的数据集时,其泛化能力往往受到限制。因此,开发一种能够在不同领域、不同预测范围和时间粒度上产生准确预测,并且无需大量有监督数据的模型,具有重要的理论意义和实际应用价值。



核心算法

在这里插入图片描述

TimesFM模型是一种解码器仅基础模型(decoder-only foundation model),它采用了输入分块(input patching)技术,并通过大规模时序语料库进行预训练。该模型的特点包括:

  1. 解码器风格注意力模型

    • TimesFM采用了一种解码器风格的注意力机制,这意味着它专注于预测序列中的下一个时间点,而不是像编码器-解码器模型那样同时处理整个序列。
    • 这种设计允许模型在给定输入序列后并行生成预测,提高了预测效率。
  2. 输入分块(Input Patching)

    • 借鉴了长期预测工作中的分块技术,TimesFM将时间序列分解为固定大小的块(patches),类似于语言模型中的词元(tokens)。
    • 分块不仅有助于提高训练和推理速度,而且可以通过减少输入序列的长度来提高模型的泛化能力。
  3. 长输出分块

    • TimesFM允许输出分块的长度大于输入分块的长度,这意味着模型可以一次性预测更多的未来时间点,而不需要逐步自回归生成。
    • 这种设计在长序列预测中特别有效,因为它减少了生成预测所需的步骤数。
  4. 分块掩码(Patch Masking)

    • 为了确保模型能够处理不同长度的上下文,TimesFM在训练时使用了一种随机掩码策略。
    • 这种方法通过在数据批次中掩码掉部分块或整个块,使得模型能够学习到从1到最大上下文长度的所有可能的上下文长度。
  5. 大规模时序语料库

    • TimesFM的预训练基于一个包含大量时间序列数据的语料库,这些数据既包括真实世界的数据,如Google Trends和Wiki Pageview统计,也包括合成数据。
    • 这种大规模和多样化的数据源为模型提供了丰富的学习材料,有助于捕捉各种时序模式。


其核心思想是将时间序列预测问题转化为一种类似于自然语言处理中的序列生成问题。具体来说,该模型采用了一种解码器风格的注意力机制,通过自注意力(self-attention)和跨注意力(cross-attention)来捕捉时间序列数据中的长期依赖关系和复杂模式。

此外,该模型还使用了大量的时间序列数据进行预训练。这些数据集既包括现实世界中的数据集(如股票价格、销售数据等),也包括合成数据集(如通过模拟生成的数据集)。通过在这些数据集上进行预训练,模型能够学习到各种时间序列数据的共同特征和规律,从而进一步提高其预测性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了增强模型的泛化能力和适应性,研究人员在训练过程中采用了mask技术。具体来说,他们在每个时间步(time step)中随机地隐藏一部分输入数据,然后要求模型根据剩余的输入数据来预测被隐藏的部分。通过这种方式,模型被迫学习从有限的、不完整的信息中生成准确的预测,从而提高了其在新数据集上的泛化能力。

实验结果与结论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者再一个ETT风电数据上做了一个验证,取了不同的horizon水平,也对比很多横向当时不错的模型(上面的index越小越好)可以看到这里的timesFM 可以达到SOTA 0.36的性能。并且它还支持在咱们自己的数据上通用。


使用说明

这个模型截至到笔者写这一篇文章已经2.9K的star了。

在这里插入图片描述

安装

Google推荐至少16GB RAM 来使用TimesFM。

首先需要把repo下载到工作目录下:

git clone https://github.com/google-research/timesfm.git

如果你是GPU用户:

conda env create --file=environment.yml

如果你是CPU用户,

conda env create --file=environment_cpu.yml

然后在运行

conda activate tfm_env

pip install -e .



加载模型

可以用下面代码初始化模型

import timesfmtfm = timesfm.TimesFm(context_len=<context>,horizon_len=<horizon>,input_patch_len=32,output_patch_len=128,num_layers=20,model_dims=1280,backend=<backend>,
)
tfm.load_from_checkpoint(repo_id="google/timesfm-1.0-200m")

其中重要的四个参数:

input_patch_len=32,
output_patch_len=128,
num_layers=20,
model_dims=1280,
  • context_len: 这里的 context_len可以被设置为模型的最大上下文长度。它必须是 input_patch_len的倍数,也就是32的倍数。你可以向 tfm.forecast()函数提供一个较短的序列,模型会对其进行处理。目前,模型处理的最大上下文长度为512,但在后续版本中这个长度可能会增加。输入时间序列可以有任何上下文长度。如果需要,填充/截断将由推理代码处理。
  • backend: cpu/gpu/tpu
  • horizon_len: 对于你的任务来说越大越好,通常不大于context length



推理

可以从API的array 或者是支持 pandas 的dataframe 类进行推理,详情可以参考 tfm.forecast()tfm.forecast_on_df()的说明文档

下面举一个官网给的简单的例子:

import numpy as np
forecast_input = [np.sin(np.linspace(0, 20, 100)),np.sin(np.linspace(0, 20, 200)),np.sin(np.linspace(0, 20, 400)),
]
frequency_input = [0, 1, 2]point_forecast, experimental_quantile_forecast = tfm.forecast(forecast_input,freq=frequency_input,
)

pandas dataframe,频率设置为每月“M”。

import pandas as pd# e.g. input_df is
#       unique_id  ds          y
# 0     T1         1975-12-31  697458.0
# 1     T1         1976-01-31  1187650.0
# 2     T1         1976-02-29  1069690.0
# 3     T1         1976-03-31  1078430.0
# 4     T1         1976-04-30  1059910.0
# ...   ...        ...         ...
# 8175  T99        1986-01-31  602.0
# 8176  T99        1986-02-28  684.0
# 8177  T99        1986-03-31  818.0
# 8178  T99        1986-04-30  836.0
# 8179  T99        1986-05-31  878.0forecast_df = tfm.forecast_on_df(inputs=input_df,freq="M",  # monthlyvalue_name="y",num_jobs=-1,
)```

总结与展望

本文介绍了一种基于仅解码器基础模型的时间序列预测方法,该方法通过预训练一个解码器风格的注意力模型,并结合输入补全技术,能够在不同领域、不同预测范围和时间粒度上产生准确的零次学习预测。实验结果表明,该模型在多个未见过的预测数据集上都表现出了优秀的性能,其性能接近甚至达到了最先进的有监督预测模型的准确度。

该模型的成功不仅证明了深度学习在时间序列预测领域的巨大潜力,也为未来的时间序列预测研究提供了新的思路和方法。具体来说,未来的研究可以进一步探索如何将该模型与其他技术(如强化学习、生成对抗网络等)相结合,其零样本性能接近于在多样化时间序列数据上最先进的全监督预测模型。该模型在包含约1000亿个时间点的真实世界和合成数据集上进行了预训练。以进一步提高其预测性能和泛化能力。同时,也可以将该模型应用于更多的实际场景中,如金融风险管理、气候预测和公共卫生监测等,以发挥其在实际应用中的价值。

对于AI领域的资深从业人员来说,本文的研究成果也提供了一些有益的启示。首先,该模型的成功证明了深度学习在解决复杂、多变问题时的优越性。因此,在未来的研究中,可以更多地关注深度学习技术在其他领域的应用。其次,该模型的仅解码器结构和输入补全技术也为其他领域的研究提供了新的范式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364948.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext&#xff08;avformat_alloc_context&#xff09;1.2 格式猜测&#xff08;av_guess_format&#xff09;1.2.1 遍历可用的fmt&#xff08;av_muxer_iterate&#xff0…

C : 线性规划例题求解

Submit Page TestData Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 93 Solved: 49 Description 求解下述线性规划模型的最优值min &#xfffd;1&#xfffd;1&#xfffd;2&#xfffd;2&#xfffd;3&#xfffd;3&#xfffd;.&#xfffd;. &…

【SkiaSharp绘图13】SKCanvas方法详解(二)填充颜色、封装对象、高性能绘制、点(集)(多段)线、圆角矩形、Surface、沿路径绘制文字

文章目录 SKCanvas方法DrawColor 填充颜色DrawDrawable 绘制封装对象DrawImage 高性能绘制图像SKBitmap与SKImage对比DrawPicture 绘制图像SKPicture DrawPoint / DrawPoints 绘制点DrawRoundRect/DrawRoundRectDifference绘制圆角矩形DrawSurface 绘制SurfaceDrawTextOnPath沿…

Android - 利用 jitpack 免费发布闭源 aar

一、简述 目前(Android/java) library 的主要发布仓库有 MavenCentral 和 jitpack,我之前也对这两种仓库的发布流程做了详细介绍: 发布至 MavenCentral: https://juejin.cn/post/6953598441817636900发布至 jitpack: https://juejin.cn/post/7040733114506674183#heading-…

C# 入门—实现 Hello, World!

目录 一、.net 平台与.NET Framework框架 .NET Framework的构成 CLR&#xff1a;公共语言运行库 FCL&#xff1a;框架类库 WinForms ASP.NET ADO.NET WPF WCF WF LINQ Entity Framework Parallel LINQ 二、.net 能干什么 .net 两种交互模式 .net 能干什么 .net …

优化模型验证30:多车场车辆路径问题模型及Gurobipy验证

目录 1 数学模型 1.1 用到的符号集合 1.2 模型公式 2 模型验证代码 2.1 Gurobipy代码 2.2 结果可视化 多车场车辆路径问题的定义:大型的物流公司拥有多个车场,而每个车场都有若干车辆用于配送,决策者需要根据客户的所在位置,将客户分配到合适的车场和车辆中。 1 数学模…

c++静态成员变量和静态成员函数

1&#xff09;C入门级小知识&#xff0c;分享给将要学习或者正在学习C开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成…

华为云鲲鹏架构docker部署2048小游戏

华为云鲲鹏架构docker部署2048小游戏 1. 鲲鹏架构ESC2. 配置docker3. 上传2048镜像4. 删除容器,镜像 1. 鲲鹏架构ESC 2. 配置docker 安装dockeryum -y install docker开机启动 systemctl enable docker启动docker服务 systemctl start docker查询docker的运行版本 docker -v3…

注意力机制之ECA-Net:Efficient Channel Attention for Deep Convolutional Neural Network

论文link&#xff1a;link code&#xff1a;code 1.摘要 近年来&#xff0c;通道注意机制被证明在改善深层卷积神经网络&#xff08;CNN&#xff09;的性能方面提供了巨大的潜力。然而现有的大多数方法都致力于开发更复杂的注意模块以获得更好的性能&#xff0c;这不可避免地增…

1.linux操作系统CPU负载

目录 概述CPU平均负载查看平均负载结束 概述 CPU 使用率 和CPU 平均使用率。 CPU平均负载 单位时间内系统处于 [可运行状态] 和 [不可中断状态] 的平均进程数&#xff0c;就是平均活跃进程数&#xff0c;和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正等待CPU的进…

从头开始构建一个小规模的文生视频模型

OpenAI 的 Sora、Stability AI 的 Stable Video Diffusion 以及许多其他已经发布或未来将出现的文本生成视频模型&#xff0c;是继大语言模型 (LLM) 之后 2024 年最流行的 AI 趋势之一。 在这篇博客中&#xff0c;作者将展示如何将从头开始构建一个小规模的文本生成视频模型&a…

C# 实现websocket双向通信

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C# &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff…

AWT的菜单组件

AWT的菜单组件 前言一、菜单组件的介绍常见的菜单相关组件常见菜单相关组件集成体系图菜单相关组件使用小要点 二、AWT菜单组件的代码示例示例一示例二实现思路 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&…

如何使用sr2t将你的安全扫描报告转换为表格格式

关于sr2t sr2t是一款针对安全扫描报告的格式转换工具&#xff0c;全称为“Scanning reports to tabular”&#xff0c;该工具可以获取扫描工具的输出文件&#xff0c;并将文件数据转换为表格格式&#xff0c;例如CSV、XLSX或文本表格等&#xff0c;能够为广大研究人员提供一个…

MySQL详细介绍:开源关系数据库管理系统的魅力

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

理解GPT2:无监督学习的多任务语言模型

目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据&#xff0c;更大的模型 2、大数据量&#xff0c;大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时&#xff0c;一台主机上可能会运行几百个容器&#xff0c;这些容器虽然互相隔离&#xff0c;但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制&#xff0c;那么容器之间会互相影响&#xff0c;小的来说…

【Spring】DAO 和 Repository 的区别

DAO 和 Repository 的区别 1.概述2.DAO 模式2.1 User2.2 UserDao2.3 UserDaoImpl 3.Repository 模式3.1 UserRepository3.2 UserRepositoryImpl 4.具有多个 DAO 的 Repository 模式4.1 Tweet4.2 TweetDao 和 TweetDaoImpl4.3 增强 User 域4.4 UserRepositoryImpl 5.比较两种模式…

【机器学习】机器学习的重要技术——生成对抗网络:理论、算法与实践

引言 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;由Ian Goodfellow等人在2014年提出&#xff0c;通过生成器和判别器两个神经网络的对抗训练&#xff0c;成功实现了高质量数据的生成。GANs在图像生成、数据增强、风格迁移等领域取得了显著成果…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…