时间序列基础模型Moirai 2.0
时间序列基础模型是过去两年最热的方向之一:Google 的 TimesFM、亚马逊的 Chronos、Datadog 的 TOTO 先后登场,都想做一个模型预测所有领域。2025 年 8 月,Salesforce 发布的 Moirai 2.0 给出了一个反直觉的答案——把架构做得更简单,模型做得更小,反而更强,论文标题直接就叫《When Less Is More》(少即是多)。

Moirai 2.0 是一个纯解码器(decoder-only)时间序列基础模型,在 3600 万条序列、约 2950 亿观测值的语料上预训练,直接输出 9 个分位数(0.1~0.9)的概率预测。它的 Small 版本只有 11.4M 参数,却比上一代 311M 参数的 Moirai 1.0-Large 更准,推理快约 2 倍、体积小约 30 倍。
为什么需要 Moirai 2.0?
先给结论:Moirai 2.0 的诞生,是对时序基础模型就该又大又复杂这一假设的系统性纠偏——它砍掉了前代三个最复杂的组件,换来更准、更快、更小。
时间序列本身很难:非平稳、多尺度、采样不规则、观测有缺失,跨领域泛化极难。传统做法是每个场景训一个专用模型(ETS、ARIMA,或 PatchTST、N-BEATS 这类深度模型),维护成本高。基础模型的思路是像 GPT 之于文本一样,用海量跨域数据预训练一个通用模型,新场景零样本直接用。Moirai 1.0(2024 年,ICML Oral)正是这条路线最早的践行者之一:基于 LOTSA 数据集(27B 观测、9 大领域)预训练,曾登顶 GIFT-Eval 排行榜。
但 1.0 的成功也暴露了三个结构性短板:
- 数据利用率低:掩码编码器架构下,每条训练样本只产生一个损失,全序列仅约 15% 的 token 真正参与了损失计算,大部分训练信号被浪费。
- 多补丁设计过重:为适配不同时间频率引入了多补丁输入,反而限制了跨频率学习,还增加了计算开销。
- 混合分布输出难优化:用混合分布(mixture of distributions)做概率预测,理论上灵活,实践中梯度不稳定、优化复杂,收益却不明显。
Moirai 2.0 的回应是三个砍:掩码编码器 → 纯解码器;多补丁 → 单补丁;混合分布 → 分位数。结果是一条样本产生 T−1 个训练损失、训练和推理都大幅简化、概率输出天然可用——用论文里的原话,这套改动让它比自己家族里更大的模型表现更好。
这条演进路线的时间线如下:
| 时间 | 事件 | 意义 |
| 2024.02 | Moirai 1.0 论文发布(arXiv:2402.02592) | 最早的大规模通用时序基础模型之一 |
| 2024.03 | Uni2TS 框架与 LOTSA 数据开源 | 代码、数据、权重全部开放 |
| 2024.05 | 论文被 ICML 2024 接收(Oral) | 学术界的标志性认可 |
| 2024.06 | Moirai 1.1 发布 | 低频数据(年度/季度)NMAE 提升约 20% |
| 2024.10 | Moirai-MoE 发布 | 混合专家架构版本 |
| 2024.11 | GIFT-Eval 基准发布 | 时序基础模型的公共评测场,Moirai-Large 曾登顶 |
| 2025.08 | Moirai 2.0 发布(Salesforce 官方博客) | 架构全面转向 decoder-only,非数据泄露模型中 MASE 第一 |
| 2025.11 | Moirai 2.0 论文发表(arXiv:2511.11698) | 完整公开架构、数据与消融实验 |
五大核心设计:Less 究竟砍掉了什么
先给结论:Moirai 2.0 的少,落在架构、输出、解码、训练四个层面,每一刀都精准对准 1.0 的一个痛点。下图是它的端到端流水线。

纯解码器架构:让每个 token 都「练到」
如果说掩码编码器像老师拿着全文让学生做一道阅读理解题,那么纯解码器就像顺着文章往下读,每读一个词都预测下一个词——每个位置都参与训练,预测永远只依赖当前及之前的内容(因果性)。
这一改动带来了三方面收益。其一,训练信号量级提升:一条长度为 T 的序列,decoder-only 能产生 T−1 个损失,而掩码编码器只有 1 个,数据利用率从约 15% 的 token 参与损失提升到全部 token。其二,推理天然自回归:预测未来就是接着往下写,与模型的训练目标完全一致。其三,可复用 KV 缓存:重复/扩展预测时,已算过的键值对直接缓存复用,论文报告迭代式扩展预测最多可提速 17 倍。
架构上它与现代 LLM 同构:输入补丁经残差块(SiLU 激活)投影为 token,送入多层因果多头自注意力 + 前馈网络的堆叠,最后输出投影把每个 token 映射为多令牌、多分位数预测。small / base / large 三个变体分别是 12 / 24 / 48 层。
分位数预测与 Pinball 损失:原生概率输出
先给结论:Moirai 2.0 不预测未来是多少,而是预测未来有 90% 概率落在哪个区间,这个区间由 9 个分位数(q=0.1, 0.2, …, 0.9)直接给出,无需事后拟合分布。
分位数是什么?把历史数据按大小排序,第 q 分位数就是有 q 比例的数据不超过它的那个值。预测时,模型对每个未来时间步直接输出 9 个分位数值:q=0.1 和 q=0.9 之间的区间就是 80% 置信带,q=0.5(中位数)则天然可作为点预测。如下图所示。

训练时用分位数损失(又称 Pinball 损失)直接优化这 9 个分位数。对时间步 t 的真实值 $y_t$ 与预测分位数值 $\hat{y}_t^{(q)}$:
$$\ell_q(y_t, \hat{y}_t^{(q)}) = \begin{cases} q\,(y_t – \hat{y}_t^{(q)}) & \text{if } y_t \ge \hat{y}_t^{(q)} \\ (1-q)\,(\hat{y}_t^{(q)} – y_t) & \text{if } y_t < \hat{y}_t^{(q)} \end{cases}$$
逐项拆解这个公式:当真实值高于预测值($y_t \ge \hat{y}_t^{(q)}$,低估了),惩罚是 $q \times$ 偏差;当真实值低于预测值(高估了),惩罚是 $(1-q) \times$ 偏差。系数 q 的作用是不对称:对高分位数(如 q=0.9),低估(真实值比预测高)会吃到 0.9 倍偏差的惩罚,比高估(0.1 倍)重得多——这迫使模型把 q=0.9 这条线抬高,保证90% 的值都不超过它,从而形成正确的分位数排序与间距。总损失是所有分位数、所有时间步的平均:
$$\mathcal{L}_Q = \frac{1}{H|Q|} \sum_{t=1}^{H} \sum_{q \in Q} \ell_q\big(y_t, \hat{y}_t^{(q)}\big), \quad Q = \{0.1, 0.2, \dots, 0.9\}$$
为什么直接回归分位数比混合分布更好?因为分位数损失是概率预测评估指标 CRPS 的离散近似——训练目标和评测指标对齐了,且逐点损失对异常值稳健、梯度稳定,没有混合分布那样的模式坍缩与优化困难。消融实验显示,仅这一项改动就把 MASE 从 0.850 拉到 0.744,是整个模型中收益最大的一刀。
这套设计的局限与应对:默认 9 个分位数等权,对重尾分布表达有限;但损失函数支持对不同分位数加权(如容量规划强调 q=0.9 的高分位),可按业务定制。最佳场景是金融风控(要上下界)、运维容量规划(要 P95/P99)、任何预测错了要付出不对称代价的场景。
多令牌预测:一次吐出一串未来
如果说单令牌预测是一个词一个词往外蹦,那么多令牌预测就是一次说出一句完整的话。Moirai 2.0 的每个输出 token 同时预测 $n_{token}$ 个未来补丁(patch),输出投影从 $\mathbb{R}^d$ 映射到 $\mathbb{R}^{n_{token} \times n_q \times p}$,一次前向就覆盖一段更长的预测范围。
这么做的直接收益是效率与稳定性:自回归迭代次数成倍减少,长预测范围下的误差累积也随之降低——论文的消融实验证实,多令牌预测在最终版本中贡献了约 0.011 的 MASE 改善(0.739 → 0.728 的路径上)。
自回归多分位数解码:先展开、再折叠
这里有个必须解决的矛盾:每一步输出 9 个分位数,自回归时该把哪一个当作输入传给下一步?取中位数会丢掉全部不确定性信息;直接传 9 个又维度不匹配。Moirai 2.0 的解法是一个深度为 2 的扩展—折叠(expand-then-fold)束搜索:

具体到每一步:第一步直接用上下文预测出 9 个分位数;展开阶段,把上一步的每个分位数值当作输入分别解码,得到 $9 \times 9 = 81$ 个候选;折叠阶段,对这 81 个候选在每一步取对应分位数($\hat{y}_{t+1}^{(q)} \leftarrow \text{Quantile}_q(\text{candidates})$),聚合回 9 个标准分位数;如此循环直到预测范围结束。这相当于在保留全概率信息的同时,把多值自回归变成了可行计算。
训练三件套:防泄漏、抗缺失、滤噪声
除了架构,训练策略还有三个看似细节、实则关键的机制:
- 防泄漏归一化:decoder-only 模型若对整个序列做全局实例归一化,归一化统计量会偷看未来的 70% 数据。因此只用序列前 30% 计算均值和方差,后 70% 用于因果预训练,杜绝未来信息泄露。
- Patch 级随机掩码:训练时随机掩掉 50% 的输入补丁,让模型学会从残缺输入中预测,增强对真实场景缺失值的鲁棒性。消融实验表明它单独使用反而降精度,但与其他策略组合时有正向贡献。
- 数据过滤:既然归一化只看前 30%,后 70% 段可能发生分布偏移。用 Z-score 异常检测对比两段统计量,把不可预测的低质量序列从预训练语料中滤掉,稳定收敛。
预训练数据:3600 万条序列从哪来
先给结论:Moirai 2.0 在 3600 万条序列、约 2950 亿观测值的混合语料上预训练,真实数据与合成数据并重,覆盖运维、能源、医疗、经济、交通、电商等主要领域——这是它零样本跨域能力的根基。
| 数据来源 | 序列数 | 观测数 | 说明 |
| GIFT-Eval Pretrain(无泄露版) | 约 325 万 | 约 2300 亿 | LOTSA 的子集,精心挑选避免与评测任务重叠 |
| GIFT-Eval TrainTest 训练集 | 约 14.4 万 | — | 评测集训练部分,用于增强 |
| Chronos-Mixup(合成) | 3000 万 | 约 630 亿 | 基于 TSMixup 生成,仅用 Chronos 非泄露子集 |
| KernelSynth(合成) | 100 万 | 约 10.2 亿 | 高斯过程合成:趋势、局部变化、季节核随机组合 |
| Salesforce 内部遥测(匿名) | 约 215 万 | 约 14.8 亿 | 日粒度云监控数据,覆盖约一年(自 2024 年 1 月起) |
| 合计 | 3600 万 | 约 2950 亿 | 真实 + 合成混合,8 大领域 |
值得注意两点。第一,合成数据占比很高(Chronos-Mixup 3000 万条占了近九成),说明在真实高质量时序数据稀缺的情况下,合成数据是扩大覆盖面的有效手段——这一点与 Chronos 论文的做法一脉相承。第二,语料的领域分布并不均衡:自然/环境类序列偏少,这直接导致了后面实验里Natural 领域表现偏弱的结果。
实验结果:小模型如何打赢大模型
先给结论:在 GIFT-Eval 基准(55 个数据集、97 种任务配置、37 个模型参赛)上,参数最少的 Moirai 2.0-Small(11.4M)反而在所有尺寸中表现最好,并在非数据泄露模型中拿到 MASE 第一。这是一份缩小模型反而变强的实证。
缩放实验:参数不是越多越好
| 模型 | 参数(M) | MASE ↓ | CRPS ↓ |
| Moirai 2.0 Small | 11.4 | 0.728 | 0.516 |
| Moirai 2.0 Base | 87.1 | 0.732 | 0.525 |
| Moirai 2.0 Large | 305 | 0.743 | 0.530 |
从 11.4M 扩到 305M,性能不升反降。论文给出的解释是:当前预训练数据的规模与多样性和模型容量不匹配,仅堆参数无效——这打破了参数量 = 精度的直觉,也把未来方向指向了数据扩展而非模型扩展。
消融实验:哪一刀收益最大
| 变体 | 预训练数据 | 损失 | 架构 | 投影 | 多令牌 | 递归解码 | 随机掩码 | MASE ↓ | CRPS ↓ |
| Moirai 1.0 small | GIFT-Eval Pretrain | 分布 | enc-only | 线性 | — | — | — | 0.946 | 0.650 |
| v0 | GIFT-Eval Pretrain | 分布 | dec-only | 线性 | — | — | — | 0.929 | 0.647 |
| v1 | 新语料 | 分布 | dec-only | 线性 | — | — | — | 0.850 | 0.580 |
| v2 | 新语料 | 分位数 | dec-only | 线性 | — | — | — | 0.744 | 0.553 |
| v3 | 新语料 | 分位数 | dec-only | 线性 | — | ✓ | — | 0.736 | 0.533 |
| v4 | 新语料 | 分位数 | dec-only | 线性 | — | ✓ | ✓ | 0.772 | 0.560 |
| v5 | 新语料 | 分位数 | dec-only | 线性 | ✓ | ✓ | ✓ | 0.739 | 0.527 |
| Moirai 2.0 | 新语料 | 分位数 | dec-only | 残差块 | ✓ | ✓ | ✓ | 0.728 | 0.516 |
这条消融链清晰展示了每个决策的贡献:decoder-only 骨架带来小幅提升(0.946 → 0.929);新语料是第二大步(0.929 → 0.850);分位数损失是单项收益最大的一刀(0.850 → 0.744);递归分位数解码(v3)与多令牌预测(v5)各添一分;随机掩码单独用反而降(v4 的 0.772 高于 v3),但在完整组合里有利;最后把线性投影换成残差块,凑出最终成绩。
与前代的全面对比
| 对比维度 | Moirai 1.0 | Moirai 2.0 |
| 架构 | 掩码编码器 | 纯解码器 |
| 输入补丁 | 多补丁(多频率) | 单补丁 |
| 概率输出 | 混合分布 + 采样 | 9 个分位数直接输出 |
| 损失 | 分布 NLL | 分位数(Pinball)损失 |
| 训练数据利用率 | 约 15% token 参与损失 | 全部 token,T−1 个损失/样本 |
| KV 缓存推理 | 不支持 | 支持,重复预测最多提速 17 倍 |
| 模型规模(最优款) | Large 约 311M | Small 仅 11.4M(小约 30 倍) |
| 推理速度 | 基准 | 快约 2 倍 |
| 精度 | 基准 | MASE +16%、CRPS +13% |
领域层面的结论也值得关注:Moirai 2.0 在 Web/CloudOps、金融等领域表现突出(与其内部云监控数据有关),在自然/环境序列上明显偏弱(预训练语料该类数据太少),交通领域则略逊于 Moirai 1.0。按预测长度分组,短序列排名第 4、中期第 6、长期第 8——优势随预测范围拉长而收窄。
效率上它处于最优性价比区间:同批竞品中,Kairos-50M 更快但精度明显落后(参数还是它的近 5 倍),Granite-FlowState-R1 精度略高但推理慢约 3 倍。Moirai 2.0 在精度、速度、体积三者的权衡上最均衡。
快速上手:五分钟跑通 Moirai 2.0
先给结论:装一个 uni2ts 库,加载 Hugging Face 上的预训练权重,三行代码就能做零样本概率预测,Small 模型在普通 GPU 上即可跑。
安装(官方推荐的 PyPI 方式,框架基于 PyTorch,推理依赖 GluonTS):
pip install uni2ts
零样本预测完整示例——从 pandas 宽表出发,预测并可视化:
import pandas as pd
import matplotlib.pyplot as plt
from gluonts.dataset.pandas import PandasDataset
from gluonts.dataset.split import split
from uni2ts.eval_util.plot import plot_single
from uni2ts.model.moirai2 import Moirai2Forecast, Moirai2Module
# 1) 读入宽表:行 = 时间,列 = 各条序列
df = pd.read_csv(ts_wide.csv, index_col=0, parse_dates=True)
# 2) 转为 GluonTS 数据集并做滚动切分
ds = PandasDataset(dict(df))
train, test_template = split(ds, offset=-100) # 末 100 步作为测试
test_data = test_template.generate_instances(
prediction_length=100, # 预测长度
windows=1, # 滚动窗口数
distance=100, # 窗口间隔
)
# 3) 加载预训练权重(Moirai 2.0 Small,仅 11.4M 参数)
model = Moirai2Forecast(
module=Moirai2Module.from_pretrained(Salesforce/moirai-2.0-R-small),
prediction_length=100,
context_length=1680,
target_dim=1,
feat_dynamic_real_dim=0,
past_feat_dynamic_real_dim=0,
)
# 4) 零样本预测 + 可视化
predictor = model.create_predictor(batch_size=32)
forecasts = predictor.predict(test_data.input)
inp = next(iter(test_data.input))
label = next(iter(test_data.label))
forecast = next(iter(forecasts))
plot_single(inp, label, forecast, context_length=200, name=pred, show_label=True)
plt.show()
关键参数速查:
| 参数 | 含义 | 建议 |
| MODEL = moirai2 | 选择模型家族 | 可选 moirai(1.x)/ moirai-moe / moirai2 |
| SIZE = small | 模型尺寸 | small / base / large;论文结论 small 已最优 |
| prediction_length | 预测长度(步数) | 任意正整数,按业务设定 |
| context_length | 输入上下文长度 | 建议 1000+(论文示例用 1680) |
| batch_size | 推理批大小 | 按显存调整,small 模型 32 起步 |
| target_dim | 目标变量维度 | 单变量为 1;多变量按列数设为 N |
两个落地提示:一是多变量数据会被拆成多条独立单变量序列分别预测(模型本身不支持跨变量联合建模);二是上下文给足、预测长度别一口气拉太长,长 horizon 的精度衰减是它的已知短板。
应用场景与落地建议
先给结论:Moirai 2.0 最适合多领域、多频率、需要概率边界、算力预算有限的预测任务;它是零样本快速起步的最佳选择之一,也是中小规模部署里性价比最高的时序基础模型。
- IT 运维容量规划:对 CPU、内存、流量等云监控指标做多步预测。为什么适配——预训练语料里就有大量 Salesforce 内部云监控数据,Web/CloudOps 是它最强的领域;分位数输出直接给出 P90/P99 上界,正好服务按峰值扩容的决策;KV 缓存 + 11.4M 参数让它能在边缘节点低延迟运行。
- 金融风控与财务预测:预测波动率、交易量、营收指标并给出置信区间。为什么适配——分位数损失对齐 CRPS、对异常值稳健,天然适配尾部风险分析;金融领域的跨域表现位居前列。
- 零售与供应链需求预测:零样本预测新品或冷启动品类的销量。为什么适配——跨域泛化能力强,无需为每个 SKU 单独训练;合成数据训练的多样性让它对没见过的销售形态也有一定鲁棒性。
- 在线/边缘实时预测:小模型 + KV 缓存意味着毫秒级推理,适合设备端或网关侧的流式预测。为什么适配——模型体积小(Small 约 45MB 权重),可在资源受限环境部署。
与同赛道模型的定位对比(帮你选型):
| 模型 | 架构 | 输出 | 模型规模 | 特点 |
| Moirai 2.0 | decoder-only | 9 个分位数 | 11.4M / 87M / 305M | 效率与精度最均衡,概率输出开箱即用 |
| TimesFM 系列 | decoder-only | 点预测为主 | 200M 级 | Google 出品,生态成熟,点预测基线强 |
| Chronos / Chronos-Bolt | 编码器-解码器 | 采样分布 | 20M~710M | Amazon 出品,Bolt 推理极快 |
| Moirai 1.x / Moirai-MoE | 掩码编码器 / MoE | 混合分布 | 14M~311M | 前代家族,MoE 版本追求更大容量 |
落地时注意三点反模式:一是别把预测长度设成上下文的好几倍,长 horizon 衰减明显;二是需要协变量(天气、节假日)强介入的场景,先考虑微调或传统模型,它目前不消费外部特征;三是追求多变量联合概率(如多仓库存联动)的场景它做不到,只能逐条预测。需要针对性微调时,Uni2TS 自带 CLI:
python cli/train.py data=etth1 model=moirai_1.1_R_base trainer.max_epochs=50
局限与破局:四条边界与各自的解法
先给结论:Moirai 2.0 的边界清晰且诚实——它把能做和暂时不能做分得很开,每条局限也都有明确的破局路径。
- 只做单变量:多变量被拆成多条独立序列,丢失了变量间的联合依赖(如多条指标的相关性)。破局方向:论文明确把多变量联合概率预测列为后续工作,或先用合成数据训练多变量分支;短期可自行用多变量模型(如 DeepAR)做对照。
- 不消费外部协变量:天气、节假日、促销等外生特征无法输入,限制了强外部驱动场景(如零售大促)。破局方向:对协变量敏感的任务用传统统计模型或微调接入;社区也在探索把协变量编码进补丁嵌入的扩展。
- 长 horizon 精度衰减:短序列排名第 4、长期降到第 8,多令牌 + 迭代解码只是缓解而非根治。破局方向:论文建议长程建模专项研究 + 数据扩展;实践上分段滚动预测(每次预测一段,回填再推)比一口气预测到底更稳。
- 参数扩展收益为负:4M → 305M 性能反降,说明瓶颈在数据而非模型。破局方向:先扩大预训练语料规模与多样性(论文的明确未来工作),再谈增大模型;应用侧直接用 Small 即可,不必盲目上 Large。
展望未来,论文给出的方向包括结合 LLM 推理能力的时序分析、文本/图像/时序的多模态基础模型,以及数据扩展与长程建模。对一个少即是多的模型来说,下一步的想象力在于:当数据这块短板补上之后,更小的架构还能撬动多大的性能天花板。