当你的 GPU 学不会算账:FP4 训练里那个被忽视了 30 年的几何陷阱
一个价值十亿美元的异常损失曲线
2026 年,你终于拿到了一批 NVIDIA Blackwell GPU。市场宣传说原生 FP4 计算路径能让预训练成本砍半,你兴冲冲地把 124B MoE 模型切到 NVFP4 recipe,跑了两万步,然后盯着 TensorBoard 发呆——
损失曲线确实在下降,但始终比 BF16 基线高出一截。1.73% 的相对误差,不算灾难,可就是不肯收敛回去。
你检查了学习率、batch size、数据配比、梯度裁剪,全部正常。你换了一组超参,重跑,还是一样。你甚至怀疑是不是 PyTorch 版本有 bug。
你没想到的是,问题不在软件栈的任何一层。问题在那 4 个 bit 本身的几何形状里。
蚂蚁集团的 Ling 团队刚刚发布的一篇论文,把这个藏了多年的坑挖了出来,并给它起了个名字:Shrinkage Bias(收缩偏差)。它不是 bug,是数学。
E2M1:一块刻度不均的尺子
要理解这个坑,先得看清 FP4 到底长什么样。
4 bit 能表示 16 个值。NVIDIA 和 AMD 的 FP4 硬件路径都围绕一个叫 E2M1 的格式设计:2 位指数,1 位尾数。它的非负值集合是:
{0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0}
乍一看挺合理——小数密集、大数稀疏,符合浮点数的直觉。但如果你把这些值画在一根数轴上,会看到一种诡异的"拉伸":0 到 2 之间挤了 5 个刻度,2 到 6 之间只有 3 个,而且间距不均。
这就是问题的起点。
量化做的事很简单:给定一个真实值 x,找到最近的刻度 q。在"最近"这件事上,每个刻度 q 都有一个"管辖区间"——它左右各延伸到相邻刻度的中点。
关键来了。对于均匀刻度(比如 INT4 的 {0,1,2,3,...}),每个刻度的左右区间宽度相等。但对于 E2M1,在刻度过渡点,左右区间严重不对称。
以 q=2.0 为例:
- 左邻是 1.5,右邻是 3.0
- 左区间宽度 = (2.0 - 1.5)/2 = 0.25
- 右区间宽度 = (3.0 - 2.0)/2 = 0.5
这意味着什么?假设真实值在这个刻度的管辖区间内均匀分布,那么落在右侧(被向下舍入到 2.0)的概率远大于落在左侧(被向上舍入到 2.0)。期望舍入误差为 (左宽 - 右宽)/2 = -0.125。
负号是致命的。它意味着:每一次舍入,都在系统性地把数值往零的方向拉。
这就是 Shrinkage Bias。
复利效应的反向版本
单次 -0.125 的偏差看起来微不足道。但神经网络有几百层,每一层都在做矩阵乘法(GEMM),每一次 GEMM 的两个操作数都要被量化。
论文给出了一个精确的推导。把量化后的操作数分解为原始信号和噪声的正交叠加:
 = α_A · A + R_A (α_A < 1 表示信号衰减)
B̂ = α_B · B + R_B
那么 GEMM 的输出:
Z_q = Â · B̂ᵀ = α_A·α_B · Z + 噪声项
主信号被乘以了 η ≈ α_A · α_B < 1。
一层衰减一点,K 层连乘起来:
∏(k=1..K) η_k ≈ exp(-Σ δ_k)
这是复利公式,只不过方向反了——不是利滚利,而是衰减滚衰减。100 层网络,每层衰减 1%,最终信号只剩 37%。每层衰减 2%,只剩 13%。
这就是为什么 FP4 训练的损失曲线始终高于 BF16——不是噪声太大,而是信号在系统性流失。
治病药反而喂养了病菌
故事到这里还没完。工业界其实已经知道 FP4 训练不稳定,NVIDIA 的 NVFP4 recipe 引入了两个"稳定剂":
1. Random Hadamard Transform (RHT):在量化前对张量做一次随机正交旋转,把离群值(outlier)的能量打散到所有坐标上 2. Stochastic Rounding (SR):舍入时按概率选择上取整或下取整,保证期望无偏
直觉上,RHT 应该有帮助——离群值是量化的天敌,打散它们能让张量分布更均匀,量化误差更小。
但论文发现了一个反直觉的现象:RHT 在 E2M1 下反而让事情变得更糟。
为什么?因为 RHT 把离群值打散后,张量从"被离群值主导"变成了"被密集的中等幅度值主导"。而这些中等幅度值,恰好大量落在 E2M1 最不对称的那些舍入区间里(比如 q=2.0 和 q=4.0 附近)。
RHT 提高了"桶利用率"(bucket utilization),让 16 个刻度都被充分使用。但在 E2M1 下,利用率越高,接触到的非对称区间越多,Shrinkage Bias 越严重。
这就像你给病人开了一味提升免疫力的药,结果发现病原体恰恰靠免疫系统繁殖。药是对的,但只在特定的病理环境下有效——而这个环境,恰好是 E2M1 造成的。
论文用一张图直观展示了这个悖论:对 outlier-heavy 的张量,RHT 前的 E2M1 量化质量(SQNR 21.90 dB)优于 E1M2(19.94 dB);RHT 后,优劣反转——E1M2(23.19 dB)大幅领先 E2M1(20.00 dB)。
RHT 改变了游戏规则,但 E2M1 没有跟着变。
UFP4:换一把尺子
解决方案出奇地简单:换一把刻度均匀的尺子。
E1M2 格式(1 位指数,2 位尾数)的非负值集合是:
{0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5}
完全均匀。每个刻度的左右区间宽度相等,Shrinkage Bias 在源头被消除。
基于这个观察,论文提出了 UFP4 recipe:
| 配置 | E2M1 基线 | UFP4 (E1M2) |
|---|---|---|
| 格式 | E2M1 | E1M2/INT4 均匀网格 |
| 量化块大小 | 1×16 | 1×16 |
| 尺度层级 | FP32 单层 | FP32 单层 |
| RHT 覆盖范围 | 仅 bwd_dw | fwd_y + bwd_dx + bwd_dw |
| 随机舍入范围 | dY | dY |
在 E2M1 recipe 里,RHT 只敢用在权重梯度(bwd_dw)这一条路径上——因为前向和反向传播的输出会跨层累积,如果在这些路径上用 RHT,Shrinkage Bias 会被复利放大。NVFP4 的工程师不是不知道 RHT 有用,而是不敢用。
UFP4 换成均匀网格后,Shrinkage Bias 消失了,RHT 终于可以放心地铺到所有三条 GEMM 路径上。药还是那味药,只是病根被拔掉后,药终于能发挥作用了。
消融实验的数据很漂亮:
| RHT 配置 (E1M2) | 平均 LM loss | Δloss |
|---|---|---|
| 无 RHT | 1.89202 | 0 |
| 仅 bwd_dw | 1.88721 | -0.00481 |
| bwd_dx + bwd_dw | 1.88912 | -0.00290 |
| fwd_y + bwd_dw | 1.88558 | -0.00644 |
| 全 RHT (UFP4) | 1.88079 | -0.01123 |
124B MoE 上的验证
论文在三个规模上做了长周期预训练验证:
| 模型 | E2M1 基线相对误差 | UFP4 相对误差 | 改善 |
|---|---|---|---|
| Dense 1.5B | 1.2570% | 0.9673% | -23.1% |
| MoE 7.9B | 2.3596% | 1.8469% | -21.7% |
| MoE 124B | 1.7308% | 1.3863% | -19.9% |
还有一组实验特别有意思:能不能在 E2M1 上通过限制范围来"模拟"均匀网格?比如把 E2M1 的最大值限制在 2.0,只用 {0, 0.5, 1.0, 1.5, 2.0} 这 5 个值——这确实是均匀的。
结果:不行。限制范围后虽然避开了非对称区间,但也牺牲了动态范围和桶利用率,所有测试变体都比 E2M1 基线更差。
这说明问题的本质不是"能不能在 E2M1 上打补丁",而是均匀网格必须是原生的、完整的 16 个值。硬件必须支持。
工程视角:这对我意味着什么
这篇论文的工程含义分三层:
对芯片设计者:NVIDIA Blackwell/Rubin 和 AMD MI350 都把 E2M1 作为 FP4 的唯一一等公民。这篇论文说,这个选择需要重新审视。E1M2/INT4 风格的均匀网格应该作为 FP4 训练的一等数据元素被硬件原生支持。值得注意,华为 Ascend 960 上的 HiFloat4 格式恰好采用了均匀的 S1P2 数据元素——这可能是一个意外的先发优势。
对训练框架开发者:如果你在实现 FP4 recipe,不要无脑跟 NVFP4。在 RHT 能用的地方,均匀网格 + 全路径 RHT 是更优解。UFP4 的 fused kernel 实现显示,RHT + 量化的融合算子只比单独量化慢 6-7%,开销可接受。
对模型训练者:短期内,如果你的硬件只支持 E2M1,论文的结论是"限制 RHT 在 bwd_dw 路径"仍然是最稳妥的选择。但如果你有均匀网格的硬件路径(或软件模拟),UFP4 recipe 可以直接拿来用——论文的消融已经证明了每个组件的独立贡献。
一个更深的启示
这篇论文让我想到一个更普遍的问题:我们有多少"工程直觉"其实是未经审视的默认选择?
E2M1 成为 FP4 的事实标准,不是因为它被证明是最优的,而是因为它对推理场景(outlier-heavy、动态范围优先)有利,然后被惯性带到了训练场景。训练场景的张量分布完全不同,但没人系统地问过"这个格式还合适吗"。
Shrinkage Bias 不是一个小 bug。它是一个被默认设置掩盖了多年的系统性设计缺陷。它没有导致训练崩溃(所以没人报警),只是安静地吃掉了 1-2% 的训练质量——在千亿 token 的规模上,这是真金白银。
论文最精彩的一笔是揭示 RHT 悖论:一个被广泛使用的稳定化技术,在特定的格式几何下,反而成了不稳定的放大器。这种"药-病反转"在系统设计中并不罕见,但往往要等很多年才有人有勇气去质疑"标准做法"。
UFP4 的方案出奇地简单——换一个均匀网格。但发现问题的洞察力,和证明它确实解决问题的实验规模(124B MoE 长周期训练),是蚂蚁集团 Ling 团队实打实的工程功力。
有时候,最优解不是加法,而是减法——去掉那个"看起来合理但其实有毒"的默认选择。
---
论文:Rethinking Shrinkage Bias in LLM FP4 Pretraining: Geometric Origin, Systemic Impact, and UFP4 Recipe arXiv:2606.20381 团队:Ant Group / Ling Team 代码:暂未开源(论文引用了 HiFloat4 在 Ascend 960 上的原生支持作为未来硬件方向)
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens