NanoForecast v0.5: Competitive Time Series Forecasting Through Training Pipeline Optimization
Gautam Kishore
cs.LG
2026-09-16
同一6.5M架构修好三条训练管线后,MASE从3.030降到1.704,六项里四项超过200M的TimesFM。
TimesFM 用 2 亿参数、大约 1000 亿个时间点做预训练。Chronos 把 T5 接到量化序列上,最大 7.1 亿参数。PatchTST 官方配置也在 1500 万以上。精度上去了,训练和推理都要认真的 GPU,没有这块基础设施就部署不出去。
NanoForecast 盯更窄的目标:训练能在消费级硬件上跑完,推理能在 CPU 上跑,公开基准上还站得住。已发布的 v0.3 就是这套 650 万参数骨架,标准协议下整体 MASE 3.030,离能用还差一截。这篇不换架构,只修训练管线里三处会悄悄伤精度的漏洞:损失计算范围、张量形状对齐、数据增强覆盖。同一语料、同一算力再训,得到 v0.5。贡献是经验性的,动的是梯度怎么算对、窗口怎么看够。
骨架来自 Reverso 一族:覆盖整段 token 的深度长卷积、按 delta rule 更新矩阵状态的线性 RNN(DeltaNet)、门控 MLP。可学习路由器按窗口给出一组权重,三者加权相加。8 层,隐藏维 96,patch 大小 8,上下文 512,地平线 H=48,总参数 650 万。窗口先用中位数和四分位距做稳健归一化,再切成不重叠 patch,并拼上采样频率的可学习 embedding。
DeltaNet 每层保持矩阵状态,新观测只做一次前向,不必重塞整段历史,所以能流式推理。输出包括点预测和由中位数加非负 softplus 偏移保证单调的分位数。对外点预测取 pinball 训出的中位数 p50,和以绝对误差为基础的 MASE 对齐。
三处管线漏洞如下。
损失范围:数据管线无条件往 batch 里塞 horizon 键。multihorizon 关掉时,点预测损失仍回传到整段上下文输出。模型在给已见过的历史打梯度,真正要预报的 H 步被稀释。曲线照样收敛,精度就是掉。修法是算损失前把预测和目标截到 H。
张量形状对齐:分位数损失在截断前就算,头内部还带着上下文长度的激活,却拿 (B, H) 目标去比,梯度走错维。不确定性和点精度一起掉。修法是点和分位数都先截断,再进所有损失项。
增强覆盖:v0.3 只有缩放、平移和 jitter,固定语料上多样性不够。v0.5 在循环里随机叠加 jitter、缩放、平移、mask 和时间反转。
三处一起修,没有单独消融。v0.3 与 v0.5 两个发布权重夹住的是联合效应。
统一协议:上下文 512、H=48、测试窗不重叠,MASE 分母为各序列训练集上季节朴素的 MAE(小时滞后 24,15 分钟滞后 96,日滞后 7)。ETT 按时间 70/20/10,其余 70/10/20。TimesFM 用公开 2 亿参数权重;PatchTST 按官方超参逐数据集聚训 40 epoch。Chronos-T5-large 在大集合上推理跑不动,未列入。
| 数据集 | v0.5 (6.5M) | TimesFM (200M) | PatchTST (15M+) |
| ETTh1 | 0.676 | 0.705 | 0.781 |
| ETTh2 | 1.110 | 1.360 | 1.467 |
| ETTm1 | 0.287 | 0.545 | 0.488 |
| Exchange | 4.317 | 4.383 | 3.861 |
| Electricity | 2.029 | 0.923 | 1.347 |
| Traffic | 1.805 | 0.765 | 1.379 |
| 整体 | 1.704 | 1.447 | 1.554 |
相对 v0.3,整体 MASE 从 3.030 降到 1.704,降幅 43.8%。降幅几乎全压在汇率:Exchange 11.758 到 4.317(-63.3%),ETTh2 降 16.4%,电力 8.3%,交通 5.7%,ETTh1 / ETTm1 只动 0.7% / 0.2%,实务上算平手。
对 TimesFM,三个 ETT 加汇率数字更低,参数少 31 倍。真正拉开的是 ETTm1(0.287 对 0.545)和 ETTh2(1.110 对 1.360);ETTh1 0.676 对 0.705、汇率 4.317 对 4.383 很薄,更接近打平。电力 2.029 对 0.923、交通 1.805 对 0.765,TimesFM 仍明显更好。对 PatchTST,三个 ETT 全赢,汇率、电力、交通全输。整体 1.704 仍落后 TimesFM 1.447 和 PatchTST 1.554。
效率比定义为 MASE 倒数除以百万参数:v0.5 为 0.090,PatchTST 0.043,TimesFM 0.0035。分位数走反了:名义 80% 区间在 v0.3 覆盖 90.3%,v0.5 只覆盖 51.3%。点预测不受影响,区间只能当相对不确定度。
Apple M4、batch 1:PyTorch FP32 19.5 ms,ONNX FP32 10.7 ms,流式一步 19.1 ms;INT8 动态量化反而 33.3 ms。一张 T4 约 12 小时,验证最优从 v0.3 的 epoch 147 提前到 v0.5 的 epoch 51。ONNX 为 FP32 27.9 MB、INT8 9.2 MB。
损失有没有截到地平线、分位数分支形状齐不齐、增强是否只有三种变换,训练曲线可以完全正常,却能吃掉四成以上 MASE。怪架构之前,先把这几类排除掉。
650 万参数、CPU 上十到二十毫秒、ONNX 不到 30 MB,边缘盒子和实时分析用得上。三个 ETT 上可以顶 2 亿参数 TimesFM;321 路电力、862 路交通上顶不住,预训练广度在那儿仍然值钱。汇率对 TimesFM 的「赢」只有 0.066 MASE,当卖点偏满。
这不是架构突破,是把训练管线修干净的实证。整体仍落后两个更大基线,赢面集中在中小规模、单变量、ETT 这类集合。
论文自列:整体 MASE 仍落后;上下文锁死 512;通道独立、不建模跨变量;分位数偏窄;只评 6 个公开集;训练仍要 GPU 12 小时;每配置单 seed,无种子方差。权重只训了 H=48。
三处漏洞没有单独消融,43.8% 是打包数字,汇率贡献了绝大部分。TimesFM 是约 1000 亿时间点预训练的公开权重,这边是小语料上 12 小时重训,评测窗口对齐,训练体制没有对齐。INT8 在这颗 M4 上更慢,树莓派一类数字只写在未来工作里,部署叙事目前停在笔记本 CPU。Chronos、Moirai、Lag-Llama 缺席,「小模型对基础模型」只对上了 TimesFM 和 PatchTST。