Transformer 架构

位置编码:Transformer 怎么知道词的顺序

注意力本身是「无序」的集合运算——「猫追老鼠」和「老鼠追猫」对它是一回事。位置编码就是显式把「顺序」注进去的机制,从绝对位置到 RoPE,本文一次讲清。

一句话回答

自注意力对输入顺序 置换不变(permutation-equivariant):把句子里的词打乱,每层的输出只是跟着被打乱,模型本身读不出顺序。所以必须额外喂给模型「第几个词」这个信息——这就是位置编码。

核心矛盾:注意力擅长「看关系」但不擅长「看顺序」。没有位置编码,「我爱你」和「你爱我」在模型眼里几乎等价。

为什么注意力没有顺序

自注意力对输入集合做加权求和:每个 token 的表示是其他 token 表示的加权和,权重由 Q·Kᵀ 决定。这个运算对输入的排列是等变的——你重排输入,输出跟着重排,模型并不能「发现」被重排了。

Attention(Q,K,V) = softmax( Q·Kᵀ / √d ) · V

公式里没有任何「位置」项。N 个 token 没有任何顺序假设,像在算一个「词袋」(bag of words)。所以顺序信息必须外挂。

等变 ≠ 不变:模型输出会跟着输入顺序变,但它读不出「这是第 3 个词」这种绝对位置,也无法自然区分「A 在 B 之前」和「B 在 A 之前」。

绝对位置编码:直接给每个位置一个向量

① 可学习位置嵌入(Learned,BERT 用)

先准备一张查找表 PE ∈ ℝ^{max_len × d},第 i 个位置的向量是可训练参数,训练时和词向量一起学出来,推理时直接查表加到词嵌入上。

优点:简单、灵活,模型自己学出有用的位置模式。缺点:长度外推差——训练时最多见过 512,推理给 1024 就查不到表(得截断或插值)。

② 正弦/余弦位置编码(Sinusoidal,原版 Transformer 用)

用不同频率的正余弦函数手工构造位置向量,第 pos 个位置、第 i 维:

PE(pos,2i) = sin(pos / 10000^{2i/d})    PE(pos,2i+1) = cos(pos / 10000^{2i/d})
不同维度 = 不同频率的周期波,位置越远波形越错开 低频维 高频维
优点:可外推(任意位置都能算出向量,不依赖训练最大长度);原论文证明:两个位置的相对位置可由它们的绝对位置编码做线性变换得到,天然携带相对信息。

相对位置编码:注意力只关心「差多少」

绝对位置的问题:模型真需要的是「token A 和 token B 相距 3」这个相对关系,而不是「A 在第 5、B 在第 8」这两个绝对数字。于是出现了直接在注意力分数里注入相对偏移的方案(Shaw 2018、T5 的 RPE、原始论文的简化版)。

思想:把「相对距离 k = i − j」编码成一个可学习(或函数式)的偏置,加到 Qᵢ·Kⱼ 上。这样「相距 3」在所有位置对里含义一致,更贴近语言事实(语法关系看相对距离)。
相对位置编码让「相距相同」的归纳偏置更均匀,外推性通常也比纯绝对可学习嵌入更好。

RoPE(旋转位置编码):现在的主流

RoPE(Rotary Position Embedding,Su 2021)被 Llama、Qwen、ChatGLM、DeepSeek 等几乎所有主流 LLM 采用。它的直觉极其优雅:不给位置一个「加性」向量,而是把 query / key 在向量空间里「旋转」一个和位置成正比的角度。

同一个 query 向量,位置 m 把它旋转 m·θ 角 pos=1 pos=2 pos=3 二维子空间里旋转: qₘ 旋转 mθ,kₙ 旋转 nθ 内积 qₘ·kₙ 只依赖 (m−n) → 天然编码「相对距离」

具体做法:把 d 维向量按相邻两维一组分成 d/2 个子空间,每组按角度 m·θᵢ 旋转(θᵢ 是预设的频率)。关键性质——旋转后的两个向量做内积,结果只和相对位置 (m−n) 有关,和绝对位置无关。

为什么好:(1) 相对位置被「编码进内积本身」,无需额外偏置;(2) 长文本外推性强(配合 NTK-aware scaling / 位置插值可进一步拉长);(3) 计算开销极小,只是一次旋转。

ALiBi:连位置向量都不要

ALiBi(Attention with Linear Biases,2022)走向极致:完全不给 token 加位置向量,而是在注意力分数 Q·Kᵀ 上,直接减去一个「与距离成正比」的偏置。

score(i,j) = (qᵢ·kⱼ) − m·|i − j|

距离越远的 token,被惩罚得越狠,模型自然更关注近处。

最大卖点:长度外推极强。因为没学任何绝对位置表,训 1k 直接推理 10k+ 也能用,训推不一致问题最小。被 BLOOM、MPT 等采用。

四种方案对比

方案怎么编码相对位置长度外推典型模型
Learned 绝对查表加向量间接差(超长失效)BERT
Sinusoidal正余弦函数线性可得较好原版 Transformer
相对位置 RPE分数加偏移直接较好T5 / Transformer-XL
RoPE旋转 Q/K内积天然含好(配插值更佳)Llama / Qwen / DeepSeek
ALiBi分数减距离偏置直接极强BLOOM / MPT
面试一句话:现代 LLM 几乎都用 RoPE;要极致外推选 ALiBi;BERT 类用 learned 绝对位置。核心权衡是「相对位置表达力」vs「长度外推能力」。

总结