注意力本身是「无序」的集合运算——「猫追老鼠」和「老鼠追猫」对它是一回事。位置编码就是显式把「顺序」注进去的机制,从绝对位置到 RoPE,本文一次讲清。
自注意力对输入顺序 置换不变(permutation-equivariant):把句子里的词打乱,每层的输出只是跟着被打乱,模型本身读不出顺序。所以必须额外喂给模型「第几个词」这个信息——这就是位置编码。
自注意力对输入集合做加权求和:每个 token 的表示是其他 token 表示的加权和,权重由 Q·Kᵀ 决定。这个运算对输入的排列是等变的——你重排输入,输出跟着重排,模型并不能「发现」被重排了。
公式里没有任何「位置」项。N 个 token 没有任何顺序假设,像在算一个「词袋」(bag of words)。所以顺序信息必须外挂。
先准备一张查找表 PE ∈ ℝ^{max_len × d},第 i 个位置的向量是可训练参数,训练时和词向量一起学出来,推理时直接查表加到词嵌入上。
用不同频率的正余弦函数手工构造位置向量,第 pos 个位置、第 i 维:
绝对位置的问题:模型真需要的是「token A 和 token B 相距 3」这个相对关系,而不是「A 在第 5、B 在第 8」这两个绝对数字。于是出现了直接在注意力分数里注入相对偏移的方案(Shaw 2018、T5 的 RPE、原始论文的简化版)。
Qᵢ·Kⱼ 上。这样「相距 3」在所有位置对里含义一致,更贴近语言事实(语法关系看相对距离)。RoPE(Rotary Position Embedding,Su 2021)被 Llama、Qwen、ChatGLM、DeepSeek 等几乎所有主流 LLM 采用。它的直觉极其优雅:不给位置一个「加性」向量,而是把 query / key 在向量空间里「旋转」一个和位置成正比的角度。
具体做法:把 d 维向量按相邻两维一组分成 d/2 个子空间,每组按角度 m·θᵢ 旋转(θᵢ 是预设的频率)。关键性质——旋转后的两个向量做内积,结果只和相对位置 (m−n) 有关,和绝对位置无关。
ALiBi(Attention with Linear Biases,2022)走向极致:完全不给 token 加位置向量,而是在注意力分数 Q·Kᵀ 上,直接减去一个「与距离成正比」的偏置。
距离越远的 token,被惩罚得越狠,模型自然更关注近处。
| 方案 | 怎么编码 | 相对位置 | 长度外推 | 典型模型 |
|---|---|---|---|---|
| Learned 绝对 | 查表加向量 | 间接 | 差(超长失效) | BERT |
| Sinusoidal | 正余弦函数 | 线性可得 | 较好 | 原版 Transformer |
| 相对位置 RPE | 分数加偏移 | 直接 | 较好 | T5 / Transformer-XL |
| RoPE | 旋转 Q/K | 内积天然含 | 好(配插值更佳) | Llama / Qwen / DeepSeek |
| ALiBi | 分数减距离偏置 | 直接 | 极强 | BLOOM / MPT |