ALiBi 把位置信息从”加进 embedding”改成”减在注意力分数上”:一个不含参数的线性距离惩罚,就让 1k 上下文训练出的模型直接跑 10k+ 序列。
核心机制
ALiBi(Attention with Linear Biases)不使用任何位置向量——词嵌入层输出直接进入自注意力,中间不加 (对比绝对位置编码)。位置信息只以一个静态偏置矩阵的形式,注入 softmax 之前的注意力分数:
其中 为 Query 位置、 为 Key 位置, 是二者的相对距离, 是每个头固定的斜率超参,不参与训练。在 decoder 的 causal 场景下 ,故 ,惩罚项恒为非正——距离越远,分数被压得越狠,注意力自然收敛到局部窗口。
这是相对位置编码的极简退化形态:T5 relative bias 要为每个距离桶学一个标量,ALiBi 直接把这些标量写死成距离的线性函数,参数量归零。
斜率设计
头模型的斜率取公比为 的几何序列:
8 头时即 。斜率跨两个数量级,不同头得到不同尺度的感受野: 的头只看邻近几个 token, 的头惩罚极缓、近似全局注意力。多尺度分工由此免费获得,无需任何结构改动。
原论文实验表明斜率集合对性能不敏感,但几何序列显著优于等差序列——尺度需要按指数而非线性铺开。
为什么天然外推
线性偏置的形式与序列长度无关:训练时见过的 ,推理时 取到 20000 也只是把同一个线性函数往外延伸,没有任何”没见过的参数”被激活。位置编码外推失效的根因是位置表示本身超出训练分布(详见位置编码),而 ALiBi 压根不存在位置表示。
Ofir Press 等人(2021)的实测结论:
| 项目 | 结果 |
|---|---|
| 外推能力 | 1024 训练长度,推理 2048–10000+ 困惑度不上升 |
| 等效质量 | 训练的 ALiBi ≈ 训练的正弦编码 |
| 训练成本 | 短序列训练即可,内存与时间双降(同质量下约省 11% 时间、11% 内存) |
| 推理速度 | 长序列下快于 sinusoidal baseline |
论文:Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation
工程落地
实现代价极低:偏置矩阵可预计算并缓存,或在 kernel 内按 现算,不增加显存中的可训练参数。BLOOM 176B、Falcon、MPT(MosaicML 主打 65k 上下文)均采用 ALiBi,MPT-7B-StoryWriter 正是靠它把训练长度 65k 的模型推到 84k 推理。
def alibi_bias(seq_len, n_heads, device):
# 几何斜率:m_h = 2^(-8h/n)
slopes = 2 ** (-8 * torch.arange(1, n_heads + 1, device=device) / n_heads)
pos = torch.arange(seq_len, device=device)
dist = pos[None, :] - pos[:, None] # (L, L),causal 下取下三角为负
return slopes[:, None, None] * dist[None] # (n_heads, L, L),加到 logits 上与 RoPE 的取舍
| 维度 | ALiBi | 旋转位置编码(RoPE) |
|---|---|---|
| 作用位置 | softmax 前的分数偏置 | Q/K 向量的复数旋转 |
| 参数 | 零,斜率写死 | 零,但频率基 需调 |
| 外推 | 天然可外推 | 直接外推崩坏,需插值(RoPE 长度外推与插值) |
| 内容-位置交互 | 无,惩罚与 token 内容无关 | 有,相对位置进入内积 |
| 远程检索 | 弱 | 强 |
分歧点在信息容量。ALiBi 的惩罚是内容无关的硬性衰减:只要距离够远,无论那个 token 多重要,分数都被按线性压掉。这在困惑度指标上无害——语言建模的下一词预测本就高度依赖局部上下文——但在 needle-in-a-haystack 类任务上致命:模型无法对 30k token 之外的一处关键事实维持高注意力。RoPE 则把相对位置编入 Q/K 内积,位置与内容耦合,远程 token 仍能凭语义竞争到注意力权重。
这解释了 Llama / Qwen / Mistral 系全面转向 RoPE:低困惑度不等于长上下文可用,而 PI / YaRN 一类插值方案已让 RoPE 的外推缺陷变成可工程化解决的问题。ALiBi 的历史贡献是证明了位置信息不必存在于表示空间中,偏置项就够——这个洞见至今仍在各种注意力衰减先验(如混合窗口注意力)中复现。