Cadence:给有损压缩装个基础模型,只在电力地铁数据赢,科学数据亏
一、时序归档的直觉:预测越准,文件越小?
2026 年 9 月,一篇 10 页的论文摆出两个来自同一个 3 亿参数时间序列基础模型的数字。作者把它接进无损压缩器,在一打真实序列上跑,压缩后的文件只比传统方法小了 0.03%。测试里特意放了一段纯随机噪声当对照,压缩结果是 12.003 比特每值,而它的真实熵是 12.000。两个数字几乎重合,说明测试工具没坏,是模型确实一点便宜都没占到。
可同一个模型,改成允许每个重构点与原值有固定误差的有损压缩,在电力负荷和地铁客流这两类数据上,中位增益分别约 13.3% 与 28.3%。把两类语料合起来算,压缩率提升 21.4%,297 个"序列×容差"组合一个都没输。Cadence
同一个模型,两条路线,一边几乎归零,一边是两位数。为什么会出现这个反差? 这是 Cadence 这篇论文要回答的唯一问题。下面三段背景不是三个独立的话题,而是回答这一个问号所缺的三块拼图。
第一块拼图,是模型被要求去解决什么。电力公司、地铁运营方这类机构会长期归档逐小时或半小时的读数,一存就是五年十年。这些数据不需要逐位复现,但监管、事故取证、异常检测又要求:屏幕上看到的每个点,与真实记录之间的偏差不能超过某个上限。这就是误差有界有损压缩。它的定义很干脆,对每个点 $t$,重构值 $\hat{x}_t$ 满足
$$|\hat{x}_t - x_t| \le \tau, \qquad \tau = \rho \cdot \sigma(x)$$
容差 $\tau$ 按序列自身的波动尺度取,$\rho$ 在实验里分 0.01、0.05、0.2 三档。翻译成大白话:允许你丢精度,但每个点都得待在容差带里,拿这个换更小的文件。这条容差带恰恰就是"近零"与"两位数"分岔的起点:无损路线不承认任何误差额度,有损路线却把这份额度直接交到压缩器手里。
第二块拼图,是这个模型被塞进流水线的哪一格。误差有界压缩早有一条成熟套路,看一眼 SZ3 就够了:先把序列切成小块,用前几个点预测下一个点,只记预测值和真实值之间的残差,再对残差量化、编码、压缩。SZ3 把这套流程抽象成可组合的五个模块,同一组零件能拼出好几种压缩器。要回答反差从何而来,就得盯住这条流水线里的 Predictor 那一格,因为 Cadence 后面要做的,正是把它整个换掉。SZ3

图注:左半部是五个科学数据集在 0 到 50 延迟下的自相关系数折线。右半部是 SZ3 的流水线结构,Preprocessing、Predictor、Quantizer、Encoder、Lossless Compressor 五个阶段横向排列,五条算法线 FPZIP、SZ1.4、SZ2、SZ-Pastri、cpSZ 纵向穿过各自使用的模块实例,底部由 Original Data 流向 Compressed Data 串起整条流水线。SZ3
第三块拼图,是圈定问题问的是哪一族压缩器。误差有界压缩还有一条正交的路线 ZFP,它不做逐点预测,而是把浮点小块做正交变换后按位面嵌入编码,天生支持固定比特率和随机访问。ZFP ZFP 这一族不在这篇论文的问题里。Cadence 只盯着预测-残差这条路线:既然预测器只是流水线里一个标准零件,那把它换成今天最强的时序基础模型,前面那个从 0.03% 到 21.4% 的反差到底从哪来,又能不能被拿到?
二、把最强的预测器装进无损路线,为什么只省下 3%?
直觉会给你一个线性答案。预测更准,残差就更小,残差越小就该越省比特,模型强几倍,文件就该小几倍。Cadence 作者把这个直觉写成了一条公式,然后亲手把它推翻:
$$\Delta \text{bits} = \log_2!\left(\frac{\text{MAE}{\text{old}}}{\text{MAE}{\text{new}}}\right)$$
省下来的比特数,是预测精度优势的对数,不是线性。这个差距有多大,代入真实数字就明白了。在 wikihr_en 这条序列上,TimesFM-3 的 MAE 是 113,608,32 抽头 LPC 预测器是 171,507,比值 1.51 倍。听起来不错,可按上式只换回 0.597 比特,而这条序列每值有 20.28 比特的预算,算下来节省 2.9%。想让一个 20 比特每值的文件直接减半,你需要一个精度好 1024 倍的预测器。

图注:白底双对数散点图,横轴是预测器精度比 MAE_classical / MAE_model,从 1.0 到 $10^3$,纵轴是每值节省的比特数,范围 0 到 10。蓝线是参考直线,浅红色阴影带标注 observed regime (TimesFM vs. LPC-32) 内含三个橙色实测点。一条灰色箭头指向约 10 比特处,批注写着"10 bits = halve a 20 bpv file → needs 1024×"。右下角 inset 标题为 "zoom: 0.41-0.60 bits saved / 3 real series"。Cadence
这条对数定律不是纸上推演,作者在 12 条序列上做了实测:用同一个自适应编码器,把 TimesFM-3 和经典预测器家族里最好的一个对比,中位增益 +0.03%。前面提到的纯噪声对照正是为了自证工具正确,同时也再次确认了模型在这里毫无空间。
你可能会反问:不是说大语言模型都能把 Wikipedia 压得比 gzip 还狠吗?确实如此。Chinchilla 这样的语言模型在长序列上把文本、图像、音频都压到了通用压缩器之下。Language Modeling Is Compression

图注:三联子图横排,分别对应 enwik9、ImageNet、LibriSpeech。三者共享相同的坐标轴,横轴是子序列长度,最长 2048 bytes,纵轴是压缩率百分比,取对数刻度。每个子图里对比 gzip、Chinchilla 1B 以及一个在 enwik8 上预训练的 Transformer:曲线随序列变长快速下降,Chinchilla 1B 在长序列时明显低于 gzip。Language Modeling Is Compression
谜底就在这条公式里。语言模型之所以能碾压 gzip,是因为它对文本的预测精度比传统压缩器高出好几个数量级。而 TimesFM-3 相对一个线性滤波器只有 1.5 倍优势,代进对数公式就只剩 0.6 比特。两者差的是量级,不是技巧。所以"基础模型能压一切"这句话,在 1-D 工业遥测上没有兑现。
不过作者在这堵墙上找到了裂缝。回到容差带的定义:如果预测值恰好落在真实值的容差带内,量化后的残差就是 0,这个样本几乎不要任何比特。这就像仓库盘点时约定了一个允许误差,只要账面和实测差得不多,就记一个"零",不需要写任何数字。这是一个不连续跳变,它不服从对数,也不受预测精度比值的限制。它就是下一章唯一的出口。
三、误差界怎么保证?让预测器只吃自己的重构值
误差有界是这套方法的卖点,所以它不能靠"测完发现误差没超标"来证明,必须按构造成立。Cadence 的做法是闭环量化:预测器不看原始值,只看它自己此前重建出来的值。用三行式子就能说完:
$$p_t = P(\hat{x}_{t-c:t-1}), \qquad k_t = \left\lceil \frac{x_t - p_t}{D} \right\rfloor, \qquad \hat{x}_t = p_t + k_t \cdot D$$
$P$ 是预测器,$D = 2\tau$ 是量化步长,$k_t$ 是整数索引。关键在第一步:预测器吃的是 $\hat{x}$,也就是重构序列,不是真实序列 $x$。
为什么必须这样?想象两个人隔着墙各自誊写同一份稿子,墙这边的人负责念,墙那边的人负责写。如果念的人照原稿念,而写的人只能拿到已经被改过的稿子,两人就会越写越不一样。反过来,如果念的人也只看着"已经改过的稿子"往下念,那么双方从同一份副本出发,每一步都会做出完全相同的改动。这里的"改过的稿子"就是重构序列 $\hat{x}$,而"念"就是预测器。因为编码端和解码端能看到的是同一份 $\hat{x}$,解码端就能精确复现出同一条预测,误差界也就成了构造的一部分,无需事后测量。
下面这张流程是本教程根据论文 Algorithm 1 绘制的衍生图,不是论文原图。
图注:衍生图,基于论文 Algorithm 1。整条流水线按四段走:先用经典预测器把每条序列的前 $c$ 个样本按同一容差编码成种子,再把 $G$ 条序列合成一批、一次前向得到预测,随后量化成整数索引、重构回 $\hat{x}$,最后索引进入自适应区间编码器。注意重构值会回写进下一轮预测,这就是误差界能"按构造成立"的来路。
起点那 $c$ 个样本没有历史可循,只能单独处理。作者用一组不需要额外信息的经典预测器,Lorenzo 的 1 到 3 阶、多级线性插值、三次插值,逐条序列挑最好的一个,把一个字节的标识写进文件。此后模型就以这些重构出来的种子作为上下文。这部分叫 context bootstrap,也决定了短档案的成本结构:种子花的比特占比不小。
闭环的代价是流水线被"批次确定性"拴住了。同一个 batch 反复算三次,结果完全一致。调换 batch 内顺序,也一致。但 batch 1 和 batch 8 之间会漂移,最大差值 $3.9\times10^{-3}$ MW,batch 8 和 batch 9 之间漂移 $7.8\times10^{-3}$ MW。即便关掉 TF32、改用确定性算法、强制 MATH 后端,这个漂移依然存在。
这听起来是小数点后的事,但解码端只要求一次量化索引翻转,后面就会全盘走错。按 $\rho=0.05$ 时 MISO 的 $D = 985$ MW 折算,单样本翻转概率约 $8\times10^{-6}$。短期档案没事,可一个五年的逐小时档案,累计下来失败概率约 26%。所以组大小 $G$ 必须作为格式条款写进容器,执行设备也要一并记录。这不是工程洁癖,而是跨设备比特流不可移植的直接后果。
四、0.3B 的预测器与 CABAC 熵编码:比特是怎么被压出来的
流水线里那个"预测器",具体是 Google 的 TimesFM-3。它属于一条已经走了几代的模型谱系:最早那版用 decoder-only 结构,把时序切成 patch 当 token,一次输出一整段预测,而不是逐点往外吐。TimesFM

图注:左侧一段时序被切成等长的 input patch,每个 patch 经残差块映射成向量,加上位置编码后送入 $n_l$ 层 stacked transformer,每层含多头的 causal self-attention 与 FFN,最后经输出残差块投影成 output patch 长度的预测。这是 TimesFM 家族的通用训练态架构示意,具体配置以官方模型卡为准。TimesFM
Cadence 用的是第三代,配置如下:
| 项 | 值 |
|---|---|
| 参数量 | 约 3.3 亿,即 0.3B |
| Transformer | 20 层,hidden dim 1280,16 heads |
| Patch | 上下文 patch 32,预测 horizon patch 64 |
| 输出 | 9 个分位数 0.1 到 0.9,中位数落在 index 4 |
| 许可 | TimesFM Non-Commercial License v1.0 |
| 权重体积 | 约 1.3 GB(论文 Section 4.1 报告;官方模型卡未独立列出此字段) |
参数与许可来自官方模型卡与博客;1.3 GB 权重体积来自 Cadence 论文 Section 4.1。TimesFM-3
这里有个容易被忽略的使用策略。模型输出的是 9 个分位数,一条完整的预测分布,而 Cadence 只取 index 4 的中位数当点预测,其余 8 个全部丢弃。原因是论文试过让模型的分位头参与残差建模,结果中位增益只有 +0.3%,容差放宽时甚至转负,说明这个信息在压缩任务里换不来比特。于是干脆把分位输出整个关掉。这是用法选择,不是模型只有点预测。
预测完,得到整数索引,接下来要把索引变成比特流。这里 Cadence 借的是视频编码里的老手艺。H.264 的 CABAC 把每个语法元素拆成三步:二元化、上下文建模、二元算术编码,并且区分 regular 与 bypass 两条路径。CABAC

图注:黑白线条框图,标题为 CABAC encoder block diagram。语法元素经开关后分两路,非二元元素进 Binarizer,已是二元的直接下行。两类 bin 汇合后再经一个开关,regular 路进入 Context Modeler 与 Regular Coding Engine,bypass 路直通 Bypass Coding Engine,最后合并成 coded bits 与 bitstream,三个引擎被一个 dashed 的 Binary Arithmetic Coder 大框包住。CABAC
Cadence 把它改造成四个元件:零标志走上下文建模,符号走旁路,量级前缀用截断一元码走上下文,尾部用 Exp-Golomb 走旁路。需要说清楚的是,Cadence 处理的是 1-D 残差序列,H.264 处理的是 2-D 块变换系数,这里只借词汇,不借语境。
真正关键的一步,是把上下文建模放在同一条流内部,而不是拆成多条独立流。直觉上拆流能并行、更整洁,可一旦分区,编码器的自适应就被切碎了。作者实测,单流上下文建模相对 xz/zstd 这样的通用工具赢 9.7%。更微妙的是,它纠正了一个假象。早先用 xz/zstd 时,增益看起来随容差扩大而缩小。换成自适应区间编码后,趋势整个反转。电力语料在 $\rho$ 为 0.01、0.05、0.2 时分别提升 +6.4%、+13.3%、+21.2%,地铁语料是 +19.9%、+27.7%、+51.2%。容差越宽,省得越多,这才符合机制本身的预测。
五、同一套管线,需求数据 +21.4%、科学仿真 -0.8%:边界在哪?
方法讲完了,接下来是最锋利的部分:它在什么数据上真的赚钱?
作者用了五个语料库:EIA-930 电力负荷、MTA 地铁客流、NAB 运维数据、一份合成数据,以及科学仿真基准 SDRBench。SDRBench

图注:白底 strip 图,纵轴自上而下列出 Transit、Grid load、NAB oper.、Synthetic、SDRBench 五个语料,横轴是相对 best-of-six classical 的增益百分比,范围 -60 到 +40,零点处有一条竖线。每行是一团抖动点,右侧的 I 形条标注中位数与胜率:Transit +28.3% (150/150)、Grid load +13.3% (147/147)、NAB oper. +6.4% (21/24)、Synthetic +2.9% (7/12)、SDRBench -0.8% (0/27)。Cadence
图上分裂得很干净。两个需求语料的中位数都稳稳站在零点右侧,而且几乎每个点都在正区间,不是靠少数极值撑起来的。地铁 +28.3%,150 个组合全胜。电力 +13.3%,147 个组合全胜。合起来 297/297,就是开头那个 21.4%。与此同时,科学仿真语料整体 -0.8%,27 个组合一个没赢。
再看权衡的主视图。把容差当横轴、每值比特数当纵轴,每条曲线代表在这个误差上限下的文件大小,越低越好。

图注:两 panel 率失真图,左 panel 是 Grid load (EIA-930, 49 BAs),右 panel 是 Subway ridership (MTA, 50 stations)。两者横轴都是"保证误差上限 τ 占序列均值的百分比",取对数刻度,纵轴是 bits per value。每个 panel 有三条曲线,从高到低依次是 SZ3 真实二进制、同样编码器下的 best-of-six classical、以及 Cadence,Cadence 在每一个 τ 上都处于最低位置。百分比注记给出它对 best-of-six classical 的增益,左 panel 为 +8 / +14 / +23,右 panel 为 +20 / +29 / +49。Cadence
边界为什么正好落在这里,作者给出的解释落在数据的生成方式上。需求型时序是大量独立人类决策的聚合计数,半小时到一小时一个点,有强烈的日周期和周周期。这种规律性恰恰是经典预测器吃不透的地方,预测精度比才有机会拉开。反过来看科学仿真,数据是连续光滑的物理场,1 到 2 个抽头的局部预测器已经很强,再强的模型也换不来多少精度比。这里要分清归因层级:上面这段是作者对现象的解释,它与前文那条预测优势与节省比特数的对数关系对得上,但本文实验直接证明的是域上的正负结果,也就是需求语料赢、科学仿真语料输;至于局部预测器在科学数据上接近最优这一机制本身,论文并没有把它当成已经证实的结论。
作者还主动做了证伪。他们拿 SDRBench 里的 Hurricane-ISABEL 气候仿真切片来跑,结果中位 -25.4%,容差放宽到 $\rho=0.2$ 时恶化到 -41.0%。分子动力学轨迹 EXAALT 则是 -0.6%。这正是需求侧趋势的镜像:需求数据增益随容差扩大,科学数据损失也随容差扩大。 SDRBench

图注:四 panel 水平拼接,展示 Hurricane-ISABEL 的四张标量场切片,依次是 QGRAUP 的线性尺度、同一场做 log10 变换后的结果、水平风速 U、气压 P。每张切片来自一个 $100\times500\times500$ 的三维场,log 尺度那张是为了让原本在线性尺度上几乎看不清的动态范围显出来。SDRBench
论文还报告了五个负结果,它们共同把主张收紧到"域"这一条边界上。跨序列条件化能把 MAE 从 113.6k 降到 111.4k,码长却从 19.045 涨到 19.054 比特。用基础模型做插值、把粗网格上采样当协变量,所有配置都失败,最差到 -210%。按前一块胜负切换预测器,模型 100% 被选中,等于退化成单独用模型。把分位头接进来做上下文,中位只有 +0.3%。加上前文那些被收回的虚高数字,这些负结果不是边角料,它们拼出的是结论的边界。
六、这些比特值多少钱:吞吐、许可、失步概率与归档的价值
论文最让人信服的地方,是它把代价全部摆在桌上,一条都没藏。
| 局限 | 具体数字 |
|---|---|
| 吞吐 | fp32 下 224 values/s,bf16 也只有 442,比 MB/s 级的经典压缩器慢几个数量级 |
| 模型开销 | 两端都要有 1.3 GB 模型,权重是非商用许可。要自包含归档,得约 54 GB 载荷才摊得平 |
| 组耦合 | 解码单条序列要付整组的代价,列式数据库块勉强可接受 |
| 增益温和 | 端到端只有 +6.8% 到 +14.2%,随档案长度从 6 个月到 5 年递增。更大的数字测的是预测优势,不是文件体积 |
| 域窄 | 只在两类需求语料上验证,零售、金融、物理传感器都还没测 |
| 可移植性 | GPU 与 CPU 会失步,五年逐小时档案失败概率约 26% |
把这张表和前面的结果放在一起看,Cadence 的真实定位就清楚了:它不是通用压缩器,而是"误差有界归档 codec 能不能用基础模型"的一次可行性证明。
最后是最实用的一击。工业留存的实际手段往往是降采样,把小时数据抽成天数据,再线性重建。在相同文件大小下,降采样没有误差上限,它的最坏情况误差是 Cadence 保证值的 28 到 56 倍,电力 28.0 倍,地铁 56.1 倍。Cadence
这就是选型判据的全部。事故取证、异常检测、合规留存这类需要最坏情况保证的场景,误差有界 codec 严格更优,哪怕它慢、贵、模型还带非商用许可。而对吞吐敏感、或者数据本身没有强周期性的通用场景,它并不划算,1-D 遥测的历史上,SZ3 那套便宜的传统母版仍然是更实际的选择。
Cadence 给这个方向留下的,不是一个能立刻部署的产品,而是一条清晰的边界:基础模型能装进预测-残差框架,误差界可以按构造保证,但增益只出现在经典预测器确实很弱的那类数据上。什么时候值得为这些比特付出一台 1.3 GB 的模型和每秒两百个值的吞吐,取决于你到底有多需要那个最坏情况的上限。
想深入可以读原文:Cadence: Error-Bounded Lossy Compression of Demand Time Series with a Time-Series Foundation Model,arXiv:2609.06008。
参考文献
- Cadence: Error-Bounded Lossy Compression of Demand Time Series with a Time-Series Foundation Model. arXiv:2609.06008. https://arxiv.org/abs/2609.06008
- SZ3: A Modular Framework for Composing Prediction-Based Error-Bounded Lossy Compressors. arXiv:2111.02925 / IEEE Transactions on Big Data 2023. https://arxiv.org/abs/2111.02925
- Fixed-Rate Compressed Floating-Point Arrays (ZFP). IEEE TVCG 2014. https://doi.org/10.1109/tvcg.2014.2346458
- TimesFM-3: A zero-shot foundation model for multivariate forecasting. Google Research 官方博客与 Hugging Face 模型卡. https://huggingface.co/google/timesfm-3.0-pytorch
- A decoder-only foundation model for time-series forecasting (TimesFM). arXiv:2310.10688 / ICML 2024. https://arxiv.org/abs/2310.10688
- Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC Video Compression Standard. IEEE TCSVT 2003. https://iphome.hhi.de/marpe/download/cabac_ieee03.pdf
- Language Modeling Is Compression. arXiv:2309.10668 / ICLR 2024. https://arxiv.org/abs/2309.10668
- SDRBench: Scientific Data Reduction Benchmark for Lossy Compressors. arXiv:2101.03201 / IEEE BigData 2020. https://arxiv.org/abs/2101.03201