预测界变天!亚马逊Chronos-2携“多变量协同”登场,与谷歌刚正面

时间序列预测大模型最近可热闹了,谷歌国庆期间发布的TimesFM2.5皇位还没坐热。没曾想,不到一个月,亚马逊又针锋相对,出了Chronos-2,新王登基,把谷歌拉下马。Chronos-2这次可是祭出了王炸,解决了时间序列预测一个最大的痛点: 多变量协同。今天奇哥就带大家来深度解析一下Chronos-2.

Chronos-2的Github链接和论文链接如下:

Github:https://github.com/amazon-science/chronos-forecasting/blob/main/notebooks/chronos-2-quickstart.ipynb

论文:https://www.arxiv.org/pdf/2510.15821

1. 单变量vs多变量
解析TimesFM2.5这篇文章第一章中,奇哥时间序列预测进行了科普,感兴趣的小伙伴可以看一下。奇哥也回顾一下。请看到下面3个问题:
问题1:小明最近三次数学考试的得分是依次是70分,80分,90分,请问下一次他数学考试是多少分?
问题2:小明最近三次数学考试的得分依次是70分,80分,90分;而且最近三次语文考试的得分也依次是70分,80分,90分。请问他下次数学考试是多少分?
问题3:在问题2的基础上,小明下一次考试的语文成绩已经出来了,是0分。请问他的数学是多少分?
如下图所示:

问题1就是经典单变量时间序列预测。只有一根线,然后往后预测。
问题2和问题3都是多变量协同预测,这里有两根线,两根线通常有相关性。比如一个人成绩好,那语文数学都会好。
这里又分两种情况:问题2的情况是两根线长度相等,预测其中一根线,这种也不是很好预测;问题3的情况就是其中一根线更长,预测短的那一根。这种情况就会容易一点,因为已经泄露了先导信息。按照这里的例子,语文考试是0分,小明很可能状态不好或者题目很难,此时数学分数很可能也不太高。
这里我们用Chronos-2跑一下刚刚说的3个例子,给大家一个直观的感受。结果如下图所示:

这里的预测结果有两部分,一个是点预测,就是给一个确定的数值。还有一个区间概率预测,就是这个预测值可能的范围。
可以看到前两个问题的结果是一样的:问题2对比与问题1虽然提供了额外的语文成绩的信息,但是没有提供未来的信息。问题3直接提供了第四次的语文成绩,这时候就有了可以利用的先导信息,可以看到结果发生了变化:问题3的情况下预测的数学成绩从问题2的92.78下降到了84.75.这说明,多变量协同如果提供了先导信息,是可以对预测结果做出调整的。
细心的读者还可以观察到一个点:问题3的预测结果里面,可能的范围变大了不少,这说明了,一次“黑天鹅事件”(语文考0分),会极大程度的提高系统的不确定性,导致预测的把握大幅下降,未来的变数也会增加。

2. Chronos-2江湖地位如何?


这里还是用GIFT-Eval这个评估排行榜来看下,如下图所示:
榜单链接: https://huggingface.co/spaces/Salesforce/GIFT-Eval

可以看到,Chronos-2排名总榜第四,开源榜第一,力压半个月前谷歌出的TimesFM2.5。排在前面的几个都是闭源模型,收费的,这里就不讨论了。

3. Chronos-2模型深度解析

这一章节涉及到较深的技术背景,不感兴趣的小伙伴可以跳过。首先看到这个Chronos-2支持哪些类型的时间序列预测以及和其他模型的对比。如下图所示,可以看Chronos几乎全是勾勾,其他模型全是叉叉。

这张图奇哥详细分析一下,这些列分别对比了是否支持单变量预测(问题1类型);是否支持多变量预测(问题2问题3);是否协变量只有过去的(问题2);是否协变量支持泄露未来的(问题3);是否支持类别变量(比如添加周末或者节假日信息);是否支持交叉学习(上传的多个变量之间是否相互学习从而获取更多信息);最后是推理阶段显存占用和变量总数的关系,可以看到Chronos-2是线性关系,底下有两个模型是平方关系。

这些其实都是时间序列预测一些很明显的痛点,Chronos-2基本上都解决了。

3.1 整体架构

Chronos-2的架构图如下图所示:

这里奇哥从上到下,从左到右详细分析一下:

  1. 看到左上角的输入部分:这里蓝色和红色分别代表不同的预测任务,也就是说这个模型一次可以处理多个预测任务。比如奇哥上面提到的3个问题,都可以一把喂给模型预测,3个问题之间不会互相干扰,不用分3次调用;然后这里可以看到一个Future, 就是说有些协变量是可以把未来泄露出来辅助预测的,也即蓝色和红色的第三根线;这里目标是同时预测两根线,也即上面的两根都要预测。
  2. 预处理阶段阶段。这里又分了四个步骤,奇哥来一个个详细介绍一下:首先是Robust Scaling,翻译成人话就是归一化,有些数据可能特别大,几百亿,有些可能都是负数,这里通过归一化算法,把这些奇形怪状的数据范围都变成正态分布,方便后面的模型处理。
  3. 然后是Meta Features,可以看到下面的最左边的图。这里所谓元特征,翻译成人话就是除了原本的时间序列以外,还额外加了两个序列,一个是显式的定义了时间索引,比如给每个时间序列加一个类似123456往后的序号;还有一个就是Mask掩码,这里主要是区分时间序列是否有未来的值。如果是待预测的序列,未来是没有的,都是填充的0,那这里的掩码就必须设置给它盖住,防止后面算注意力机制的时候影响。如果是泄露了未来数据的协变量,那这里的掩码就可以放出来,方便后面计算。
  4. 然后是Patching,这里没啥好说的,现在所有时间序列预测的大模型都是这个套路。就是把很长的时间序列分成一个个块,每块的长度是16或者32个时间点。具体看模型参数如何设置,Chronos-2这里设置的是16。这里提一嘴,隔壁谷歌TimesFM2.5设置的是32,怪不得Chrobos-2最大预测长度是8192,而TimesFM2.5是16384.
  5. 然后是Patch Embedding,这里是把时间序列和加上去的两个元特征,时间索引和padding都输入一个残差网络结构,然后变成embedding,方便输入后面的Transformer,这里的的残差网络结构也是和TimesFM2.5差不多的。
  6. 然后就是Transformer层这个是整篇论文最核心的部分:这里提到一个TimeAttention,还有一个GroupAttention,啥意思呢。Time Attention就是在单根时间序列的前后尺度上做注意力机制计算,比如前面奇哥提到的例子,70,80,90预测下一个,时间前后尺度上,就是这3个之间互相做自注意力机制计算;Group Attention呢,就是不同时间序列的同一个时间节点上相互做自注意力机制计算。还是拿奇哥上面文章开头那个问题3举例:待预测变量是70,80,90,?, 协变量是70,80,90,0. 比如在第二个时间节点上,两个80之间就会互相求自注意力机制。
  7. 最后就是回归头Unscaling. 回归头一共20个维度,分别是预测结果的0.01, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99分位数;这里的Unscaling实际上就是前面的Robust Scaling的反操作,把归一化成正态分布的数据重新变回去。

讲到这里,这个模型架构应该很清晰了吧,论文作者的这个架构图还是非常良心的。

3.2 奇哥发现了一些盲点

(1)为啥模型还越做越小了:

Chronos-2的模型大小是120M,对比之前的版本,最早的Chronos-t5-large有710M参数,然后升级的版本是Chronos-bolt-base是205M。无独有偶,谷歌那边的TimesFM2.5也从2.0版本的500M变成了200M.

为什么亚马逊和谷歌都不约而同的把模型反而做小了呢,语言大模型做的越来越大,反而时序大模型越做越小?

奇哥觉得有两个点,一个是平衡,更小的模型性价比更好,模型不用做那么大;然后就是数据,数据量还是不够大,没有那么多数据给你炼丹,拟合一些复杂的关系。当然了,未来做大肯定是趋势,如果有更多的数据,更复杂的机制,我相信把模型做大还是有可能的。

(2)为啥没有斜向注意力机制:

作者提到了时间维度上的时间注意力机制(横向),还有不同序列同一个时刻点之间的组注意力机制(纵向)。那为什么没有斜向的注意力机制,也即时间序列A当前时刻和时间序列B过去时间所有点之间的注意力机制呢?

这里可能也是平衡,这样做时间和空间上复杂度都太高,计算量就爆了。如果后续可以继续研究的话,可能会有一些trick来解决这些问题。

(3)怎么又变成encoder-only的架构了:

Chronos-t5的版本还是encoder-decoder的架构,结果到Chronos-2咋又退化了,变成了bert的那种encoder-only的架构。无趣无趣,着实无趣。隔壁TimesFM2.5可是decoder-only的架构喔。这个就见仁见智了,有时候效果决定一切,如果目标是刷榜,复杂结构并不能给你加分。

对于上述3个点,其实作者在文章中提到了一个minimal modifications(最小化修改)的概念。核心就是尽可能简化。但奇哥觉得这个可能是事后找补,先打了枪然后画靶子,可能就是简单的模型跑出来效果好,然后就冠以minimal modifications的哲学思想。

3.3 训练用数据

Chronos-2的训练数据分为两大部分,一个是单变量数据,另外就是多变量合成数据。单变量数据没什么好说的,有一些开源的数据集,也有一些合成数据。这里重点讲一下多变量合成数据是怎么生成的。大概分三步,奇哥这里用人话讲解一下:

  1. 生成单变量序列:这里用一些前人论文的方法和一些经典的方法生成带周期性的时间序列单变量。
  2. 生成共时多变量序列:在多个生成的单变量基础上进行线性变换: 比如把两个单变量时间序列相加,或者乘以一个数。这样就会有一定的相关性。
  3. 生成顺序多变量序列:这里就是说引入一些前后依赖关系,比如一个时间序列是另一个时间序列的先导,A先变化,然后B跟着变化。这种数据也可以通过前人的论文造出来。

4. 奇哥说

Chronos-2对比于前段时间刚出的TimesFM2.5,最大的特点是支持了多变量。但是也有很多架构上的退化,从大小和结构上基本就是一个Bert了,这一点还是让人很难过的。没有Decoder only,就没有Scaling low,也没有模型做超大,也没有涌现。

当然了,时间序列最大的特点就是不可预测性,很多时候是随机的,所以现在这个结果也是正常的。在时间序列预测的发展史上,每过一段时间,就会有一个结构极其简单的模型横空出世,吊打那些复杂模型。