✨步子哥
@steper · 2026年08月05日 17:14 · 0 浏览

当注意力失明:ALiBi位置编码里藏了一个数值bug

当注意力失明:ALiBi 位置编码里藏了一个数值 bug

你训练了一个 ALiBi 位置编码的语言模型。上下文窗口 8K,训练 loss 正常,标准基准测试分数正常。你以为一切 OK。

但你的模型在"大海捞针"(needle-in-a-haystack)检索任务上可能已经部分失明——某些注意力头在长距离上根本看不到远处的 token,因为浮点数下溢把它们的注意力权重直接清零了。

这不是假设,是 2026 年 8 月 arXiv 论文 "When Attention Goes Blind" 的核心发现:ALiBi 位置编码的线性偏置在浮点精度下会发生下溢,把一大片注意力权重变成零,让注意力头"看不见"远处的 token。

ALiBi 是什么,为什么会失明

先回顾 ALiBi 的机制。Transformer 的注意力计算里,每个 token 要去"看"其他所有 token。原始 Transformer 用正弦位置编码,后来 RoPE 成了主流。ALiBi 是 2022 年 Press 等人提出的替代方案:不加位置编码到 token 嵌入里,而是在注意力分数上加一个线性偏置——距离越远,偏置越大(负的),注意力权重越小。

直觉上很合理:远处的 token 不如近处的重要,线性衰减是一个简单的归纳偏置。

问题出在 softmax 的数值实现上。注意力权重的计算是:

$$\text{softmax}(A + B)$$

其中 $A$ 是注意力分数,$B = -m \cdot D$ 是偏置($m$ 是每个头的斜率,$D$ 是距离矩阵)。当距离 $D$ 足够大时,$B$ 会变成一个很大的负数,把 $A + B$ 推到很负的值。softmax 里要对每个元素取 $e^x$——当 $x$ 足够负时,$e^x$ 会下溢到零。

这就是"失明":当距离超过某个阈值,远处的 token 在 softmax 里的指数直接变成零,注意力权重被清零,注意力头"看不见"那些 token 了。

什么时候触发

论文给出了具体的阈值:

  • fp32(单精度浮点):下溢阈值 $\tau_{u,\text{fp32}} \approx -103.27$
  • bf16(脑浮点 16):下溢阈值 $\tau_{u,\text{bf16}} \approx -92.18$
ALiBi 的不同注意力头用不同的斜率(slope),斜率越大的头衰减越快,也越早触发下溢。论文指出:"斜率最陡的那个头会率先下溢。"

这意味着在多注意力头的模型里,不是所有头同时失明,而是按斜率从陡到缓依次失明。某些头在上下文还没到 8K 时就已经看不到远处了,而其他头可能撑到更远。结果是:模型表面上还能工作,但一部分注意力头已经变成了"近视眼"。

影响有多大

论文用 148M 参数的解码器模型做了受控实验,把这个失效模式和"上下文外退化"(out-of-context degradation,另一个已知问题)分开。结论是:

1. 对标准基准测试影响很小。 困惑度、下游任务分数——这些标准指标几乎不动。这就是为什么这个 bug 之前被忽略了:标准基准测试看不见它。

2. 对 token 检索影响很大。 在 passkey 检索任务(在长文本里找一个密码)上,ALiBi 的失明会严重损害表现。这很合理——检索任务恰恰需要注意力头看到远处的 token,而失明的头做不到。

3. 但在 needle-in-a-haystack 上,默认 ALiBi 斜率仍然是强基线。 这是一个让人意外的反直觉发现:尽管有下溢问题,默认的 ALiBi 斜率配置在大海捞针检索上仍然表现不错。论文的解释是:默认斜率配置恰好让下溢发生在"不太关键"的距离上。

四种修复方案

论文测了四种训练时的缓解策略:

1. Clamping(截断):把偏置截断到一个最大值,不让它无限增长 2. Robust Slopes(鲁棒斜率):重新设计斜率序列,避免过快下溢 3. Log-scaled Distances(对数距离):把线性偏置改成对数衰减——距离越远衰减越慢,避免无限制推到负无穷 4. Soft Capping(软截断):用平滑函数代替硬截断

结果:对数距离(log-scaled distances)在 passkey 检索上最一致地提升表现。

对数衰减的直觉解释:线性偏置假设"距离每增加一倍,重要性就减半"——这太激进了。对数偏置假设"距离增加一个数量级,重要性才减半"——这更接近真实场景里信息的相关性衰减。

这说明了什么

这个发现是"评测盲区定律"的又一个实例:标准基准测试看不见的失效模式,就是 bug 藏身的地方。

ALiBi 的失明不影响困惑度、不影响标准下游任务分数,所以标准评测说"一切正常"。但当你专门去测长距离检索时,问题就暴露了。这和之前 Progressive Cramming(99% token 准确率掩盖 100% 生成失败)、TriviaRoomQA(知识边界内还行,出边界直接掉随机)是同一类问题:单一指标会掩盖关键失败模式。

更深层的原因是:ALiBi 的线性偏置假设了一个无限制的衰减——距离可以无限增长,偏置可以无限变负。但浮点数有精度极限。 当数学模型假设"无限"而实现是"有限"时,边界处就会出现失配。这和 RoPE 在 bfloat16 下的精度问题(Wang et al. 2025)是同一类问题:位置编码的数学假设和浮点数的物理实现之间存在裂缝。

实用建议

论文给出了具体的训练建议:

  • 如果你用 ALiBi,考虑切换到对数距离偏置
  • 如果你训练新模型,监控 passkey 检索任务,不只看困惑度
  • 如果你用已有的 ALiBi 模型做长上下文应用,注意某些注意力头可能在你的使用距离上已经失明
  • 默认斜率配置在大海捞针上还行,但 passkey 检索需要单独检查
论文还指出,这个问题出现在"基于 ALiBi 的 SOTA 预训练模型"里——不只是训练新模型的问题,已发布的模型也可能受影响。

一个工程教训

这个 bug 之所以藏了这么久,是因为它只在特定任务上、在特定距离上、以特定方式出现。标准评测的"平均分数"会把它稀释掉。

这给所有训练新位置编码的人一个教训:你的位置编码在 1K 上下文上工作正常,不代表它在 32K 上下文上还正常。 浮点精度不是无限的,你的数学公式在边界处可能和实现不一致。

测长距离检索任务,不只测标准基准。你的模型可能比你以为的更"近视"。

---

论文链接: https://arxiv.org/abs/2608.03994

代码: 论文声明"Code will be released upon publication"

暂无表态

想参与讨论或点赞?登录后使用完整功能

💬 讨论回复(0)
暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens