❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
- 功能强大:支持长达2048个时间点的单变量时间序列预测,适用于多种应用场景。
- 技术先进:采用纯解码器架构,结合输入修补和修补掩码技术,提升训练和推理效率。
- 灵活应用:支持零样本学习,能够处理不同长度和频率的时间序列输入。
正文(附运行示例)
TimesFM 2.0 是什么
TimesFM 2.0 是谷歌研究团队推出的开源时间序列预测模型。该模型具备强大的预测能力,能够处理长达2048个时间点的单变量时间序列,并支持任意预测时间跨度。TimesFM 2.0 采用纯解码器架构,结合输入修补和修补掩码技术,实现了高效的训练与推理,同时支持零样本预测。
TimesFM 2.0 的预训练数据集涵盖了多个领域,包括住宅用电负荷、太阳能发电、交通流量等,使模型具有良好的泛化能力。该模型可广泛应用于零售销量预测、金融市场走势分析、网站流量预测、环境监测和智能交通等领域,为各行业提供有力的决策支持。
TimesFM 2.0 的主要功能
- 强大的预测能力:支持长达2048个时间点的单变量时间序列预测,适用于多种应用场景。
- 灵活的预测频率选择:用户可以根据不同的时间序列特征,自由选择预测频率,增强了预测的灵活性。
- 实验性分位头预测:模型主要进行点预测,同时实验性地提供了10个分位头,用于生成预测的不确定性估计。
- 零样本学习能力:尽管模型的最大训练上下文长度为2048,但在实际应用中可以处理更长的上下文,展现出优秀的零样本学习能力。
TimesFM 2.0 的技术原理
- 纯解码器架构:TimesFM 2.0 采用纯解码器架构,能够更有效地捕捉长距离的时间依赖关系,提升计算效率。
- 时间序列分块和位置编码:模型对时间序列进行分块处理,并注入位置编码,通过堆叠的Transformer层提炼出数据中的时间顺序信息。
- 输入修补和修补掩码:通过输入修补和修补掩码技术,模型实现了高效训练和推理过程,支持零样本预测。
- 预训练过程:模型在包含1000亿个真实世界时间点的大规模时间序列语料库上进行预训练,采用自监督学习方法预测序列中的下一个时间点。
如何运行 TimesFM 2.0
1. 安装依赖
首先,确保你已经安装了 pyenv
和 poetry
。然后,根据你的需求选择安装 PAX 或 PyTorch 版本。
# 安装 PAX 版本
pyenv local 3.10.15
poetry env use 3.10.15
poetry lock
poetry install -E pax
# 安装 PyTorch 版本
pyenv local 3.11.10
poetry env use 3.11.10
poetry lock
poetry install -E torch
2. 初始化模型并加载检查点
你可以通过以下代码初始化 TimesFM 2.0 模型并加载检查点。
import timesfm
# 加载 TimesFM 2.0 检查点(PAX 版本)
tfm = timesfm.TimesFm(
hparams=timesfm.TimesFmHparams(
backend="gpu",
per_core_batch_size=32,
horizon_len=128,
num_layers=50,
context_len=2048,
use_positional_embedding=False,
),
checkpoint=timesfm.TimesFmCheckpoint(
huggingface_repo_id="google/timesfm-2.0-500m-jax"),
)
# 加载 TimesFM 2.0 检查点(PyTorch 版本)
tfm = timesfm.TimesFm(
hparams=timesfm.TimesFmHparams(
backend="gpu",
per_core_batch_size=32,
horizon_len=128,
num_layers=50,
use_positional_embedding=False,
context_len=2048,
),
checkpoint=timesfm.TimesFmCheckpoint(
huggingface_repo_id="google/timesfm-2.0-500m-pytorch"),
)
3. 进行预测
你可以使用以下代码进行时间序列预测。
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,
)
资源
- 项目官网:https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/
- GitHub 仓库:https://github.com/google-research/timesfm
- HuggingFace 仓库:https://huggingface.co/google/timesfm-2.0
- arXiv 技术论文:https://arxiv.org/pdf/2310.10688
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦