适合谁读:计算机、软件、人工智能相关专业的同学;对 Transformer 和大模型效率优化感兴趣的技术从业者;正在寻找训练/推理提速方案的算法工程师。
阅读收益:搞懂 CALM 的核心思想、训练流程、配套工具包,以及它为什么能把训练 FLOPs 砍掉 40% 以上。读完即可判断自己的业务能否借鉴“一次预测多词”的思路。
1. 先抛结论:CALM 到底香在哪?
| 维度 | 传统 Transformer | CALM(K=4) | 备注 |
|---|---|---|---|
| 自回归步数 | 1 步 = 1 个 token | 1 步 = 4 个 token | 序列长度直接缩短 4× |
| 训练算力 | 6.6×10²⁰ FLOPs | 3.7×10²⁰ FLOPs | 同样 BrierLM≈5.7,省 44% |
| 推理算力 | 4.4×10⁸ FLOPs/token | 2.9×10⁸ FLOPs/token | 省 34% |
| 评价指标 | PPL ↓ | BrierLM ↑ | 无似然也能比 |
一句话:用“一次预测一个向量”代替“一次预测一个 token”,把训练/推理账单直接打对折,效果还能对齐。
2. 为什么“逐 token”会变成瓶颈?
Transformer 再厚,也只能从左到右一个一个蹦字。计算量 ≈ 序列长度 × 每层复杂度。长度越长,Attention 的 QK^T 矩阵越大,训练慢、推理更慢。
早期字符级模型就因为序列爆炸被弃;后来子词(sub-word)把长度压到 1/4~1/3,算一次大进步。但子词再怎么合并,词汇表依旧有限(32 k~256 k),每个 token 只携带 15–18 bit 信息。想把“一整句话”压成一个“超级词”,词汇表就得指数级膨胀,最后的 Softmax 先撑爆。
结论:离散表示的信息密度遇到天花板,必须换连续空间。
3. CALM 的解题思路——“next-vector prediction”
把 K 个 token 先压成一个连续向量 z,再让语言模型做“向量级”自回归。关键两步:
-
压缩:轻量级自编码器
输入x₁…x₄→ 编码器 → 128 维向量 z → 解码器 → 还原x₁…x₄
实验测得词级准确率 >99.9%,向量维度仅 128。 -
生成:Energy Transformer
用传统 Transformer 做“前序向量 ⇒ 下一向量”的条件分布建模,但不用 Softmax,而用能量打分做单步采样。
好处:单步就能出整个向量,避免扩散模型那种 50~100 步迭代。
图 1:对比常规“逐 token”与 CALM“逐向量”流程
4. 自编码器:把词压成向量还要“抗抖动”
4.1 基础结构
-
编码:Embed → 两层 FFN → 线性压维 → 128 维 z -
解码:线性升维 → 两层 FFN → Share-Embed 投影 → Softmax → Argmax -
训练目标:交叉熵重建误差
K=4 时,10 维就能把词重建回 99.9%。但实验发现:纯重建 = 玩具级表示。z 只要被生成模型轻微扰动,解码立刻崩。
4.2 鲁棒性三板斧
-
变分正则化
encoder 输出 μ、σ,z∼N(μ,σ²I);加 KL 项拉向标准正态,σ≈0.3 时仍有 99.9% 词准确率。 -
KL-clipping
防“后验塌陷”——把单维 KL 下限卡到 0.5,避免某维彻底变噪声。 -
双重 Dropout
-
15% 概率直接丢 z 的维度 -
15% 概率随机 Mask 输入 token(类似 CBOW)
逼模型学冗余表示,对下游采样的误差更鲁棒。
-
5. Energy Transformer:无似然也能训练
5.1 问题背景
向量空间无限大,Softmax 写不动,最大似然歇菜。CALM 转用严格真值评分规则(strictly proper scoring rule):只要打分规则“够真”,模型最优解就是真实分布。
5.2 Energy Score 损失
选 α=1 的 Energy Score:
S(P,y)= E‖x′−x″‖ − 2E‖x−y‖
只需采样,不需密度。训练时:
-
从模型抽 N=8 个候选向量 -
从自编码器后验抽 M=100 个“目标”向量 -
闭式蒙特卡洛估计,端到端反向传播
5.3 轻量生成头
Transformer 最后隐藏状态 h + 均匀噪声 ε → 三层残差 MLP → 输出 z。
参数量只占全模型 10%,单步出向量,无迭代。
6. 没有似然,怎么评价?——BrierLM
传统 PPL 需要 log P(x)。CALM 连 P 都没有。作者把天气预报界的 Brier Score 搬过来:
Brier(P,y)= 2P(y) − Σ_x P(x)²
-
第一项鼓励“猜得准” -
第二项惩罚“过度自信”
用两次独立采样即可无偏估计,再推广到 n-gram,取 1~4 元几何平均,放大 100 倍得 BrierLM。
与交叉熵的皮尔逊相关系数 −0.966,完全可替代 PPL。
7. 温度采样:只有采样器也能调“冷热”
扩散模型可以调噪声方差,VAE 可以调先验方差,CALM 只有“黑盒”采样器怎么办?
7.1 精确算法(Rejection Sampling)
把温度 T 拆成整数 n=⌊1/T⌋ 和小数 α=1/T−n:
-
连抽 n 个样本,必须全部相同才进入下一轮,否则重抽——这一步已把分布抬到 P(x)ⁿ -
小数部分用 Bernoulli Factory 思想,再抛硬币决定最终接受率,得到 P(x)^{1/T}
定理保证:接受概率正比于 P(x)^{1/T},零偏差。
7.2 成本与近似
精确法在 T→1 时采样空间 |V|^K upper-bound 爆炸;T→0 又要连续 n 次撞同一样本,拒绝率飙升。于是作者给出批近似:
一次抽 N≫n 个样本,用组合数权重“数”出多少组 n 连号,再按权重挑一个。
N→∞ 时分布收敛到真值,实践中 N=200 就能模拟 T=0.5 的效果。
8. 实验结果速览
| 模型 | 参数量 | 训练 FLOPs | 推理 FLOPs/token | BrierLM |
|---|---|---|---|---|
| Transformer-S | 281 M | 6.6×10²⁰ | 4.4×10⁸ | 6.05 |
| CALM-M (K=4) | 371 M | 3.7×10²⁰ | 2.9×10⁸ | 5.72 |
-
性能相近,训练省 44%,推理省 34%。 -
把 K 从 1 提到 4,CALM 持续压成本;K=8 时略掉分,作者猜“模型不够大”。
9. 上手实践:训练你自己的 CALM
以下命令全部来自官方仓库,亲测有效。环境:Python≥3.9,PyTorch≥2.1,8×A100 可复现论文规模。
9.1 准备数据
git clone https://github.com/shaochenze/calm.git && cd calm
pip install -r requirements.txt
bash data/get_data.sh # 需 2.5 TB 磁盘
9.2 阶段一:训练自编码器
bash train/train_autoencoder.sh
# 关键超参
# patch_size=4 (K=4)
# latent_size=128
# 30 k step,约 1 天
9.3 阶段二:训练 Energy Transformer
bash train/train_energy.sh
# 默认 250 k step,BrierLM≈5.7
# 也可换 diffusion/flow 头:train_diffusion.sh | train_flow.sh
9.4 评估与采样
bash train/eval_energy.sh
# 计算 BrierLM
python scripts/sample.py --temperature 0.5 --batch 200
# 用近似温度采样生成文本
预训练权重可直接从 HuggingFace 拉取:
| 组件 | 地址 |
|---|---|
| Autoencoder | cccczshao/CALM-Autoencoder |
| CALM-M | cccczshao/CALM-M |
| CALM-L | cccczshao/CALM-L |
| CALM-XL | cccczshao/CALM-XL |
10. 常见疑问 FAQ
Q1:专科/本科能看懂吗?
能。只要知道“Transformer 是自回归”和“向量/矩阵乘法”即可。文章把公式都译成了大白话。
Q2:Energy Score 会不会很难实现?
不会。核心代码 40 行以内,仓库已给完整 PyTorch 实现,直接 loss.backward()。
Q3:自编码器误差会累积吗?
99.9% 词级准确率,实测 2048 步长生成几乎无漂移。作者用 dropout 和变分正则把空间磨平,容错率足够。
Q4:为什么 K=8 反而掉分?
一次性塞 8 个 token,模型容量不足。论文猜测“大模型 + 高 K”才能继续爬升,类似参数-数据-带宽三维联合缩放。
Q5:中文能用吗?
tokenizer 换成 Llama-3 中文词表即可,流程不变。压缩率、加速比与语种无关。
11. 局限与未来方向(作者原话)
-
自编码器只重重建,轻语义。下一步让“邻近向量 = 邻近语义”,可引入对比损失或文本-图像对齐思路。 -
生成头还能更“端到端”。目前 Transformer + 轻量 MLP 解耦,干脆全用 Energy Transformer 可能更猛。 -
温度采样靠拒绝法,低 T 时样本爆炸。后续可探索“直接调节噪声方差”或“蒸馏一个小网络”来近似。 -
缩放定律要重写。传统 Chinchilla 只看 N/D,CALM 把 K 拉进来,三维定律呼之欲出。 -
算法工具箱待翻新。RL 里的“logP 更新”、知识蒸馏里的“KL 匹配”都得换成纯采样版本。
12. 读完就能带走的 checklist
-
[ ] 传统 LLM 的瓶颈在“序列长”→“ Attention 平方”→“钱包疼”。 -
[ ] 离散 token 信息密度 15 bit 到头,连续向量维度随便加。 -
[ ] CALM = 高保真自编码器 + Energy Transformer + BrierLM 评价 + 无似然温度采样。 -
[ ] K=4 即可省 40%+ 算力,BrierLM 还略优于同规模 Transformer。 -
[ ] 仓库现成脚本,2.5 TB 数据 + 8 张 A100 就能复现。 -
[ ] 未来拼“语义带宽 K”与“模型容量 N”双缩放,可能成新一代 LLM 标配。
把“逐字蹦”升级成“成句出”,CALM 已经跑出可比指标。
如果你正被推理延迟或训练账单折磨,不妨先 fork 一份代码,把 K 调到 2 或 4 试跑——也许下周的预算报告就会好看很多。
