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 的历史贡献是证明了位置信息不必存在于表示空间中,偏置项就够——这个洞见至今仍在各种注意力衰减先验(如混合窗口注意力)中复现。