一句话定义
位置编码是给注意力注入 token 顺序信息的机制:没有它,Transformer 看到的只是“一堆词”,不知道谁在前谁在后。
为什么需要它
Attention 本身对排列不敏感:打乱 token 顺序,计算结果不变。语言依赖顺序,所以模型必须额外知道位置。位置编码可以是绝对位置(每个位置一个向量),也可以是相对位置(只关心距离)。
怎么工作
- 绝对位置编码:把位置向量加到 token embedding 上;正弦编码固定,学习式编码可训练。
- 相对位置编码:在注意力分数上加距离偏置(如 ALiBi),或旋转 Q/K(RoPE)。
- 外推:训练长度有限,直接用到更长序列会偏移;常用位置插值、调频率底数(NTK)、YaRN。
绝对位置在 BERT 类模型常见;GPT 系列多用 RoPE,ALiBi 则直接用距离偏置。位置编码的选择会影响长上下文能力和训练稳定性,通常要和注意力实现一起调优。
ALiBi
ALiBi 不学位置向量,而是在注意力分数上加一个随距离线性增长的偏置;实现简单,外推时位置信号仍然连续。
关键点与取舍
- 绝对位置实现简单,但外推到更长上下文通常较弱。
- 相对位置更关注距离,长上下文外推更自然;RoPE 是当前主流。
- 位置编码只提供顺序信号,不决定模型该关注谁。
常见误区
- 位置编码不是 token embedding;它不承载词义。
- RoPE 不是加到输入上的,而是作用在 Q/K 上。
- 标称上下文变长,不代表每个位置都能被有效利用。
用在哪里
- 所有 Transformer 类模型;理解长上下文扩展、位置插值的前提。
- 对比不同架构(绝对/相对/RoPE/ALiBi)时,先看位置编码方案。
- 训练长度和推理长度不一致时,要专门评估位置外推。