跳转到内容

Chronos — 把时间序列当语言来训练大模型

是什么

Chronos 是 Amazon 把时间序列数值变成 token,然后照搬语言模型套路训出来的”时序基础模型”。

日常类比:教外语的老师。他不直接背”3 月销量 1024、4 月销量 1187”,而是把每个数字翻译成一个”词”——比如”1024” 变成 token #815,“1187” 变成 token #872。然后让模型像读句子一样读”#815 #872 #903 …”,让它预测下一个词是什么。下一个词翻译回数字,就是预测出的下个月销量。

具体到 Chronos:

  • 输入:一段历史观测(最长 512 步)
  • 三步处理:标准化(scaling)、离散化成 4096 个 bin(quantization)、变成一串 token
  • 套用 T5(Encoder-Decoder Transformer)做自回归预测下一 token
  • 解码:采样多次得到未来路径的概率分布,不只是一个点

预训练完,任何新数据集拿来就能预测,不用再调参。这就是”零样本”。

为什么重要

时序预测领域过去 30 年的主旋律是:每个数据集训一个专门模型。电力负荷、零售销量、传感器读数——每换一个场景,从头训一遍。

Chronos 第一次证明:

  • 一个通用模型可以在 42 个完全没见过的数据集上零样本达到或超过专门训练的 SOTA
  • 用的还是和 NLP 一样的架构(T5),不是为时序新设计的特殊网络
  • 关键创新只有一处:把数值离散化成 token

这相当于把”foundation model”范式从 NLP/CV 推到了时序。在它之前,N-BEATS / DeepAR / PatchTST 这些都是任务特化的;在它之后,TimesFM、Moirai、Lag-Llama 全部跟进。

更现实一点:业务里 80% 的预测需求都不值得为它单独训一个模型。Chronos 直接把这 80% 包了。

核心要点

Chronos 能成立,靠三件事拼起来:

  1. Tokenization 三步走:把连续数值变成离散 token。先按上下文均值绝对值做 scaling 让数值落到 [-15, 15];再切成 4096 个等宽 bin;每个 bin 是一个 token id。这一步把”回归问题”变成了”分类问题”。

  2. 拿 T5 直接训:词表大小 = 4096 + 几个特殊 token。剩下的全是标准语言模型训练——cross-entropy loss、teacher forcing、AdamW。模型尺寸从 8M(Tiny)到 710M(Large)共 5 档。

  3. 大规模预训练数据:约 840 亿真实时序观测点(来自 zero-shot benchmark 之外的公开数据集)+ 合成数据 KernelSynth(用高斯过程混合不同核函数生成各种”形状”的时序,弥补真实数据不够多样)。

记住一个关键约束:上下文最长 512 步、不支持外生变量、不支持非常长视野。这些在 2024 年版本里是硬限制。

实践案例

案例 1:零样本就直接预测,5 行代码

from chronos import ChronosPipeline
import torch
pipeline = ChronosPipeline.from_pretrained(
"amazon/chronos-t5-small",
device_map="cuda",
torch_dtype=torch.bfloat16,
)
forecast = pipeline.predict(context=history_tensor, prediction_length=24)

history_tensor 是过去 100 步的销量。forecast 直接给出未来 24 步的预测分布。没有 fit、没有训练循环

案例 2:概率预测怎么出来的

LLM 输出的是 token 概率分布。Chronos 直接利用这一点:

  • 第 t+1 步:从 4096 个 token 的概率分布里采样一个,转回数值
  • 用这个采样值续上 context,预测 t+2 步
  • 重复整段未来;再把整个流程跑 20 次,得到 20 条候选路径
  • 每个时刻取这 20 个值的 10/50/90 分位数 → 置信带

案例 3:跑 benchmark 时的真实表现

在 Benchmark II(27 个 zero-shot 数据集)上:

  • Chronos-Large 的概率预测打分(WQL)好过专门训练的 N-BEATS / DeepAR / PatchTST
  • 点预测打分(MASE)与最强监督模型持平
  • 推理速度最大模型 ~700ms/样本(A100),Bolt 优化版降到 ~3ms

意思是:你不必再为某个新数据集等 GPU 训 6 小时,下载权重直接跑就能拿到能用的结果。

踩过的坑

  1. 离散化天花板:4096 个 bin 决定了预测精度。极端尖刺(黑天鹅)会被截断到 ±15σ;分位数过细的数据(金融 tick)会被压扁。不适合高频金融

  2. 零样本不等于不调参:温度(采样多样性)、采样次数、context 长度都影响结果。默认设置在论文 benchmark 上好,业务数据未必。

  3. 没有外生变量:不能告诉它”明天有促销""下周是节假日”。这是和 DeepAR / TFT 比最大的功能缺口。

  4. 看似零样本,但 benchmark 里有数据泄漏争议:训练数据用了大量公开时序,部分 zero-shot 数据集的近邻可能进过训练集。社区后续做了更严的 leakage check。

  5. 长视野失真:超过 64 步的预测会指数累积误差。需要预测一年用日数据,不要直接 365 步,应该 resample 到周。

适用 vs 不适用场景

适用

  • 业务时序预测的”第一版基线”:销量、流量、容量规划、库存预测
  • 数据量小、训不起专门模型的场景(< 10000 样本时反而比从头训好)
  • 需要概率预测但又不想搭 DeepAR / GluonTS pipeline 的快速原型
  • 中等频率(小时/天/周)、中等视野(< 64 步)

不适用

  • 高频金融 tick 数据(精度被 4096 bin 限制)
  • 必须用外生变量的场景(节假日、价格、天气作为输入)
  • 长视野(年级别、上千步)预测
  • 多变量协同预测(Chronos 是单变量模型,每个序列独立跑)
  • 实时低延迟要求(710M Large 在 CPU 上跑不动;可换 Bolt 或 Tiny)

历史小故事(可跳过)

  • 2017 年:Transformer 出,NLP 革命
  • 2020 年:N-BEATS / Informer 等”为时序设计的特殊架构”还在内卷
  • 2022 年:PatchTST 把图像 ViT 思路搬到时序——但仍是”每个数据集单独训”
  • 2023 年:TimesNet / TimeGPT 开始尝试”通用时序模型”,但效果争议
  • 2024 年 3 月:Chronos 论文挂 arXiv,直接复用 T5 不改架构——业界惊讶”原来这么简单也能 work”
  • 2024 年下半年:Google TimesFM、Salesforce Moirai、Lag-Llama 跟进,时序基础模型赛道正式开打
  • 2025 年:Chronos-Bolt 发布,速度快 250 倍

学到什么

  1. Tokenization 是范式迁移的杠杆:把新模态变成 token,立刻能套用 LLM 全部基础设施(架构、优化器、scaling law、加速框架)。这是 Chronos 成功的核心。

  2. “专门设计 vs 通用复用”的天平在倾斜:30 年来时序模型一直追求”为时序专门设计”,Chronos 反其道——通用 + 大数据预训练就够了。这和 BERT/GPT 推翻 NLP 任务专属模型是同一逻辑。

  3. 零样本范式的代价是丢功能:通用模型零样本好用,但牺牲了外生变量、长视野、多变量协同。业务里要看场景对不对路

  4. 合成数据可以补真实数据多样性:KernelSynth 高斯过程合成证明了”假数据 + 设计良好的先验”能让模型看到更广的世界。

延伸阅读

关联

  • nbeats-2020 — 时序任务特化模型,Chronos 试图取代这类需求
  • tabpfn-2023 — 同样的”foundation model 范式迁移”思路,用在表格

反向链接

  • nbeats-2020 —— N-BEATS — 纯前馈网络在时序预测上打败统计派
  • tabpfn-2023 —— TabPFN — 一秒解决小表格分类的 Transformer