ALiBi 的隐藏数值故障:长上下文越长,部分注意力头越可能“失明”

ALiBi 常被视为一种便宜、无额外参数、适合做长度外推的位置编码。但一篇 8 月 4 日提交到 arXiv 的论文指出,它有一个此前容易被忽略的数值故障:**上下文距离增大时,线性偏置可能把 softmax 中的指数压到浮点格式无法表示的范围,最终让对应注意力权重直接变成零。**研究者把这种现象称为注意力头的“部分失明”。论文原文

问题不在公式,而在有限精度

ALiBi 会根据 token 之间的距离,给注意力 logits 加上按注意力头区分的负偏置。距离越远,偏置越负。在数学表达里,权重可以无限接近零;但在 fp32 或 bf16 计算中,指数一旦低过格式能表示的最小正数,就会发生下溢,权重不是“很小”,而是精确等于零。

论文给出的简化分析显示,fp32 和 bf16 的下溢阈值分别约为 -103.27 与 -92.18。默认 ALiBi 为不同注意力头设置不同斜率,因此斜率更陡的头会更早跨过阈值。以 16 个注意力头和 bf16 为例,当 token 距离达到 2048 时,论文估算有 36.6% 的注意力矩阵条目已跨过下溢阈值。

这会带来两层后果。第一,超出“失明距离”的 token 权重为零,不能再向当前 token 传递信息。第二,这些归零项也会退出 softmax 分母,剩余 token 的权重会被重新分配。也就是说,它不只是弱化远距离信息,而是悄悄改变了整个注意力分布。

常规榜单可能看不出来

研究者检查了 BLOOM、Falcon-RW 和 MPT 等采用 ALiBi 的预训练模型,并用 1.48 亿参数的解码器进行控制实验。结果很值得警惕:这种故障会明显伤害 token 检索,但在常见解码器 benchmark 上影响较小。论文结论部分称,常规下游任务的差异只有 1.6 到 3.4 个百分点,而 passkey 与 needle-in-a-haystack 检索探针显示出更大的变化。

这解释了为什么问题可能长期不显眼:模型在一般问答、常识和语言任务上仍能交出看似正常的成绩,但需要跨长距离精确取回信息时,部分注意力容量已经消失。论文也没有把 ALiBi 判为不可用;相反,默认斜率在部分检索测试中仍是很强的基线,甚至没有一种缓解方案能同时赢下所有任务。

四种修补方式,没有万能答案

论文比较了四类训练期策略:

  • 截断偏置:给负偏置设置下限,避免继续跌入下溢区间;
  • 重设斜率:让各注意力头的失明距离覆盖目标上下文范围;
  • 对数化距离:用距离的对数替代线性距离,大幅推迟下溢;
  • soft capping:限制注意力 logits 的幅度,减少极端值把指数推过阈值。

在 passkey 的上下文外检索中,“截断 + 对数距离”组合的 AUC 从 ALiBi 基线的 0.08 提升到 0.79,接近十倍;但在另一项 needle-in-a-haystack 测试上,默认 ALiBi 仍表现最好。研究者因此没有宣布单一赢家,只建议:如果目标本来就是软滑动窗口,截断应成为默认选择;如果采用硬滑动窗口,则可以直接跳过窗口外计算,而不是先算出权重再让它下溢为零。

真正的提醒:长上下文不能只看标称长度

这项研究最重要的价值,不是证明某个位置编码“坏了”,而是把长上下文评估从架构承诺拉回数值现实。模型支持多少 token,只说明输入能被送进去;远处信息是否仍有非零权重、梯度能否穿过、检索能力是否保持,是另一套问题。

论文也明确给出边界:主要训练实验使用的是 1.48 亿参数模型,部分观察未必能直接外推到更大的模型。可解析的下溢机制成立,但不同架构、语料和训练规模下的行为仍需继续验证。

所以,下一次看到“支持更长上下文”,更该追问的不是窗口有多大,而是:窗口最远处的信息,模型究竟还能不能真正看见?