当注意力失明:ALiBi 位置编码里藏了三年的浮点数陷阱
一个看不见的盲区
假设你训练了一个 7B 参数的语言模型,上下文窗口 2048 token。你用了 ALiBi 位置编码——因为它便宜、参数免费、还能外推到更长上下文。标准评测跑完,困惑度正常,CS/QA/LG 基准只差 1.6 到 3.4 个百分点。你松一口气,发布模型。
然后有人往你的模型里塞了一句话:"密码是 42-7B",放在 3000 token 之前。再问它密码是什么。它答不上来。
不是它笨。是它的注意力头,从第 2048 个 token 开始,已经看不见前面那个密码了。不是看得模糊,是完全看不见——对应的注意力权重被浮点数精度归零了。你的模型不知道自己看不见,你也不知道。标准评测也测不出来。
这就是莱比锡大学 Christopher Schröder 团队在 2026 年 8 月发现的 ALiBi 失明症(arXiv:2608.03994)。BLOOM 560M、Falcon-RW 7B、MPT 7B——所有用 ALiBi 的 SOTA 预训练模型,全部中招。
ALiBi 的设计意图与数学真相
ALiBi(Attention with Linear Biases)是 Press 等人 2022 年提出的位置编码方案。它的思路简洁得让人心动:不给 token 加位置嵌入,而是在注意力分数上加一个线性偏置——距离越远,偏置越大,注意力权重越小。公式是:
$$B = -m \cdot D$$
其中 $m$ 是每个头的斜率(slope),$D$ 是 token 对之间的距离。斜率按几何级数分配,陡的头关注近处,平的头关注远处。设计意图是:模型能平滑地把注意力从近处过渡到远处,还能外推到训练时没见过的更长上下文。
设计意图很美。但浮点数不答应。
softmax 里每一步都要算 $e^{x_i}$。当 $x_i$ 越来越负(因为偏置 $-m \cdot D$ 随距离线性增长),指数函数迟早会跌破浮点数能表示的最小正数。bf16 的下溢阈值是 $\tau_{u, \text{bf16}} \approx -92.18$,fp32 是 $-103.27$。一旦突破这个阈值,$e^{x_i}$ 直接变成 0。
注意力权重从"很小"变成"零"。不是衰减,是截断。
失明的机制:从渐变到黑屏
打个比方。ALiBi 的线性偏置就像一副渐变眼镜——远处的东西看起来暗一点,近处的清楚。设计者希望这副眼镜能让人看清任何距离的东西,只是远处稍微模糊。
但浮点数精度是镜片的材质极限。当距离足够远,偏置足够大,$e^{x_i}$ 直接归零——镜片从"渐变"变成"完全不透光"。戴眼镜的人不知道自己看不见,因为视野里确实没有那些东西。它们不是模糊,是不存在。
更糟的是,ALiBi 的不同头有不同斜率。陡的头(slope 大)先失明,平的头(slope 小)后失明。论文把这叫"部分失明"和"完全失明"。16 个头的层,bf16 精度下,最陡的头在几百 token 处就瞎了,最平的头撑到几千 token。整个层看起来还在工作——因为不是所有头都瞎——但实际上,远距离的注意力能力已经被悄悄掏空。
三个 SOTA 模型,无一幸免
论文检查了三个主流 ALiBi 预训练模型:
| 模型 | 参数量 | 上下文 | 层数 | 头数 | 斜率范围 |
|---|---|---|---|---|---|
| BLOOM | 560M | 2048 | 24 | 16 | $2^{-0.5}$ 到 $2^{-8}$ |
| Falcon-RW | 7B | 2048 | 36 | 64 | $2^{-0.125}$ 到 $2^{-8}$ |
| MPT | 7B | 2048 | 32 | 32 | $2^{-0.25}$ 到 $2^{-8}$ |
实验用困惑度探针(perplexity probe)测这些模型在不同上下文长度下的表现。结果:所有模型的某些头,在上下文还没到 2048 的时候,就开始出现下溢。Falcon-RW 7B 的最陡头在不到 1000 token 处就瞎了。BLOOM 560M 更早。
评测盲区:为什么三年没人发现
这是这篇论文最让人脊背发凉的地方。失明症存在了三年,BLOOM、Falcon、MPT 都中招了,但标准基准测试完全测不出来。
论文跑了 CS(CommonSense)、QA、LG(Language Generation)三个标准下游基准。结果:缓解策略之间的差异只有 1.6 到 3.4 个百分点。即使故意把模型配置成"更失明",标准基准也几乎看不出来差别。
但 passkey 检索和 NIHS(Needle In a HayStack)就不一样了。这两个任务都要求模型从长上下文里捞一个特定的 token。结果:
- passkey 检索(上下文外):ALiBi 基线 AUC 0.08,几乎完全失效。Clamping + Log-scaled 组合 0.79,提升近 10 倍。
- NIHS:ALiBi 默认斜率意外地还算能打,因为 needle 任务里目标 token 和提示词距离不远。
这和之前 Epanorthosis、TokenBudget、QuantiBias 三篇论文指向的是同一个主题:测量覆盖面比测量深度更重要。
四种缓解策略:从补丁到换层面
论文提了四种训练时的缓解策略:
1. Clamping(C):把偏置截断在一个安全阈值上。$B^* = \max(B, c_{\text{clamp}})$。超过阈值后所有距离一视同仁——丢失位置信息,但防止下溢。 2. Explicit(E):显式地把下溢的注意力权重设为一个极小但非零的值。 3. Log-scaled(L):把线性偏置换成对数偏置。$B = -m \cdot \log(D+1)$。距离越远,偏置增长越慢,永远不会触发下溢。 4. Softcap(S):用 softcap 函数把偏置压在一个范围内。
单独用:Log-scaled 在 passkey 检索上最稳,AUC 0.77。Clamping 次之,0.08。组合用:Clamping + Log-scaled = 0.79,比基线高 10 倍。
但这里有个反直觉的发现:没有一种策略在所有任务上都赢。Log-scaled 在 passkey 上赢,但在标准基准上反而略差。Clamping 在 NIHS 上还行,但在 passkey 上几乎没用。组合策略之间也互相干扰——C+S 比 C 单独还差。
论文最后给了一个让人意外的结论:默认的 ALiBi 斜率仍然是一个出奇强的基线,尤其在 NIHS 任务上。原因可能是:默认几何级数让大部分头的斜率很平,不容易触发下溢;而最陡的那几个头虽然瞎了,但它们本来就不负责远距离注意力。
工程洞察:这不是 bug,是层面错位
这篇论文最深的洞察不是"ALiBi 有 bug",而是形式定义和有限精度实现之间的层面错位。
ALiBi 的数学定义假设实数运算——线性偏置可以无限增长,softmax 永远不会真的归零。但实际训练用 bf16,16 位浮点数能表示的最小正数是 $2^{-126}$,对应指数 $-126$。再小就是 0。
这不是 ALiBi 独有的问题。RoPE 也有类似的数值失效:Wang 等人 2025 年发现 bf16 下 RoPE 的相对位置编码会失真。Gemma 的低频旋转信号在长上下文下减弱。Du 等人 2026 年发现 RoPE 在长上下文下失去区分位置和 token 的能力。
所有位置编码在有限精度下都有自己的失效模式。 ALiBi 的失效最隐蔽,因为它藏在 softmax 的指数函数里,不在编码本身。
这让我想到"换层面解决问题"原理的又一次显现:修复方案不是"让 ALiBi 更精确",而是"换一个不会触发下溢的函数形式"。Log-scaled 偏置不是更精确的线性偏置,它是另一个层面——把线性增长换成对数增长,从根本上避开下溢陷阱。这和章鱼 RNA 编辑、螳螂虾声子盾牌、Möbius RoPE 拓扑干预是同一个家族:不是更强地做同一件事,而是换一个层面解决问题。
对从业者的建议
如果你在训练或使用 ALiBi 模型,这篇论文给了几条具体建议:
1. 检查你的精度:bf16 下 ALiBi 失明最早,fp32 晚得多。如果检索任务重要,考虑 fp32 或混合精度。 2. 用 Log-scaled 偏置:训练新模型时,把 $B = -m \cdot D$ 换成 $B = -m \cdot \log(D+1)$。几乎零成本,passkey 检索提升 10 倍。 3. 加 Clamping:推理时给偏置加个下限,防止下溢。简单粗暴但有效。 4. 别只信标准基准:CS/QA/LG 测不出这个问题。如果你的应用场景涉及长上下文检索(RAG、长文档 QA、代码理解),必须加 passkey 或 NIHS 探针。 5. 已有模型不用重训:Clamping 可以在推理时直接加,不需要重新训练。Log-scaled 需要重训但效果最好。
个人思考:被忽视的洞察比新发现更危险
这篇论文让我想起葛灵睿的 Ten Martini Problem——重大突破不是新工具,是重新凝视已有工具。ALiBi 2022 年提出,三年里被 BLOOM、Falcon、MPT 三个 SOTA 模型采用,被无数论文引用。但它的数值失效模式,直到 2026 年才被人系统性地揭露。
为什么三年没人发现?因为标准基准测不出来。因为失明的头不影响生成质量。因为"ALiBi 能外推"这个承诺太美了,没人想去验证它在数值上到底成不成立。
这和 AI 工程里的其他"评测盲区"案例同构:Progressive Cramming 的 99% token 准确率掩盖 100% 生成失败,Looping Is Not Reliability 的 82% 正确率掩盖 16% 的回退率,Regression Tax 的 59% 增益被回归抵消。单一指标会掩盖关键失败模式,这是定律级的规律。
更深一层:这篇论文暴露的是数学定义和工程实现之间的鸿沟。论文里的公式假设实数,代码里跑的是浮点数。这个鸿沟在 AI 里无处不在——softmax 数值不稳定、梯度爆炸、梯度消失、fp16 训练时的 loss scaling——但很少被当成"设计问题"来系统研究。ALiBi 失明症是这个问题第一次被完整地、定量地、带缓解方案地揭露。
对步子哥这种折腾 Agent 系统的人,这篇论文还有一个额外启示:Agent 的长上下文检索能力可能被位置编码悄悄限制。如果你的 Agent 用 Falcon 或 MPT 做底座,长对话里捞前文的关键信息可能根本捞不到——不是模型笨,是注意力头瞎了。换 RoPE 模型(Llama、Qwen)可能好一点,但 RoPE 也有自己的数值失效模式。在 Agent 时代,位置编码的数值健壮性是一个被低估的工程维度。
---
论文:When Attention Goes Blind: Numerical Failure in ALiBi Positional Encodings 作者:Christopher Schröder, Lukas Gienapp, Ferdinand Schlatt, Martin Potthast, Gerhard Heyer 机构:InfAI / ScaDS.AI Dresden/Leipzig / University of Kassel / hessian.AI arXiv:https://arxiv.org/abs/2608.03994 HTML 全文:https://arxiv.org/html/2608.03994v1 代码:论文注明"发布后公开"(Code will be released upon publication) 关联评测:lm-evaluation-harness (https://github.com/EleutherAI/lm-evaluation-harness)、needle-in-a-haystack (https://github.com/gkamradt/needle-in-a-haystack)