Transformer 为什么需要位置编码?RoPE 相比绝对位置编码好在哪?
简化版
不含位置特征的自注意力对输入置换是等变的:token 与输出一起换位,算子无法识别原始顺序。因此需要注入位置。RoPE 对 Query 和 Key 的二维通道按位置旋转,使位置操作在点积中以相对位移出现;它不需要可学习位置表,并便于做频率缩放。RoPE 直接超出训练长度并不保证良好外推。ALiBi 则给注意力 logits 加随相对距离变化的偏置。
详细版
为什么必须有位置编码
注意力计算 softmax(QKᵀ/√d)·V 是置换等变的:交换两个输入 token 的位置,输出只是跟着交换,注意力权重的数值不变。也就是说,自注意力看不到「谁在前、谁在后」。而语言强烈依赖语序(“狗咬人” ≠ “人咬狗”),所以要人为注入位置信号。
三大类位置编码
-
绝对位置编码
- 正弦式(Sinusoidal):用不同频率的 sin/cos 生成位置向量,加到词嵌入上(原始 Transformer)。
- 可学习式(Learned):位置向量作为参数训练(BERT、GPT-2)。
- 缺点:编码的是绝对位置,外推到训练时没见过的更长位置效果差。
-
相对位置编码
- 让注意力分数依赖 token 间的相对距离
i−j(T5 的相对位置偏置、Transformer-XL)。更符合语言的平移不变性。
- 让注意力分数依赖 token 间的相对距离
-
旋转位置编码 RoPE(当代主流)
- 对 Q、K 按绝对位置施加旋转矩阵,使点积中的位置旋转项由
m−n决定;分数仍同时取决于 q/k 内容,不能误解成只由距离决定。
- 对 Q、K 按绝对位置施加旋转矩阵,使点积中的位置旋转项由
-
ALiBi
- 不加位置向量,而是在注意力分数上直接加一个
−(m−n)·斜率的线性偏置:距离越远、惩罚越大。实现简单、外推性好。
- 不加位置向量,而是在注意力分数上直接加一个
RoPE 的三个优点
- 相对位置感知:符合语言平移不变性。
- 零额外参数:只是对 Q/K 做旋转,不引入可学习参数。
- 可缩放:显式频率结构便于应用 PI、NTK-aware、YaRN;能扩到多少、有效能力如何都不是算法保证。
完整版教学
记忆钩子:注意力本身不识顺序;RoPE 旋转 Q/K,让点积自然携带相对位置差。
一、先把”注意力对顺序无感”证清楚
如果用同一个置换同时重排 Q、K、V,输出会按相同置换重排,而不是数值“完全不变”。这叫置换等变:没有额外位置特征时,算子无法知道哪个排列是原顺序。
这和 RNN/CNN 不同:RNN 靠递归天然有先后,CNN 靠卷积核位置有局部顺序。Transformer 为了并行放弃了递归结构,代价就是必须显式补上位置信息。所以位置编码不是可选项,是让 Transformer「懂语序」的必需品。
二、绝对位置编码的思路与短板
绝对编码给每个位置一个向量 p_i,加到词嵌入上:x_i' = x_i + p_i。
- 正弦式用不同频率的三角函数生成,好处是任意长度都能算、有一定相对位置线索(因为 sin/cos 有和差公式)。
- 可学习式直接把
p_i当参数训。
核心短板是外推差:模型只在位置 0~L 上训练过,遇到超过 L 的位置(如训练 2K、推理要 8K),要么没有对应向量(可学习式),要么进入没训练过的编码区(正弦式),性能明显下降。而语言里「相对距离」往往比「绝对位置」更本质——第 5 个词和第 6 个词的关系,不该因为整句话前面多加了 100 个词就变。这推动了相对位置编码的发展。
三、RoPE 的核心思想:用旋转把绝对变相对
RoPE 的巧妙在于:对每个位置的 Q、K 向量施加一个依赖其绝对位置的旋转,但旋转的数学性质让二者点积只依赖相对位置。
把 Q、K 的维度两两分组,每组看成一个二维向量,位置 m 处旋转角度 m·θ:
对位置 m 的向量施加旋转 R(m·θ):
Q_m = R(m·θ)·q
K_n = R(n·θ)·k
则点积: Q_m · K_n = qᵀ·R((m-n)·θ)·k → 只依赖 (m−n)
不同维度分组用不同的 θ(频率),像时钟的时针分针秒针,低频维度管长距离、高频维度管短距离。
为什么这很美妙:
- 它给的是绝对位置的操作(每个 token 按自己位置旋转),却在注意力里产生相对位置的效果——两全其美。
- 旋转是正交变换,不改变向量模长,不破坏原有语义幅度。
- 标准 RoPE 没有可学习位置表;旋转仍有算子成本,通常由融合实现降低开销。
四、RoPE vs 绝对 vs ALiBi 对比
| 特性 | 绝对(正弦/可学) | RoPE | ALiBi |
|---|---|---|---|
| 注入方式 | 加到词嵌入 | 旋转 Q/K | 加到注意力分数 |
| 位置类型 | 绝对 | 相对(由旋转实现) | 相对(线性偏置) |
| 额外参数 | 可学习式有 | 无 | 无 |
| 外推能力 | 依方法与训练而异 | 直接外推不保证,常配缩放 | 仍需训练分布与任务验证 |
| 长上下文扩展 | 难 | 成熟(PI/NTK/YaRN) | 直接外推较好 |
| 采用 | 早期 BERT/GPT-2 | Llama/Qwen/GLM 等主流 | BLOOM、部分模型 |
RoPE 被广泛采用,与相对位移结构、无需位置表和成熟实现有关;这不构成“综合最优”的普适证明。ALiBi 更简单,二者需在短长任务和目标架构上比较。
五、RoPE 与长上下文扩展的关系
RoPE 的旋转角 m·θ 随位置线性增长。当推理位置远超训练范围时,旋转角进入没训练过的区域,性能下降。业界发展出一系列改 θ 或改位置索引的扩展法(是长上下文的高频考点):
- 位置插值 PI:把位置索引按
L/L'缩小,让长序列的位置”挤”回训练过的范围,配合少量微调即可扩展。 - NTK-aware scaling:调整 RoPE base 形成不均匀频率缩放,目标是兼顾短距与长距;免训练效果依模型和倍数。
- YaRN:分频段处理并加入注意力缩放,在其设定下改善长上下文折中;并非默认参数即可普适生效。
这些方法利用了 RoPE 显式频率可重映射的结构,但位置缩放只处理部分分布外问题,不能替代长距离任务训练。
六、用一个二维通道对验证相对旋转
设某二维通道频率 θ=0.1,位置 m=10 与 n=6 的旋转角分别为 1.0 和 0.6 弧度,则:
R(mθ)^T R(nθ) = R((n-m)θ) = R(-0.4)
若两个 token 同时右移 100 个位置,角度变成 11.0 与 10.6,相对角仍是 -0.4。这说明位置项保持共同平移下的相对结构;但完整分数是 qᵀR(-0.4)k,仍取决于内容 q、k。
从训练 4096 扩到 32768 时,最大距离扩大 8 倍,各频率相位组合和长文内容都可能分布外。验收要把短文本回归、证据位置与证据距离分别分桶,不能只证明程序能计算 sin/cos。
七、常见误区与追问
- 误区:位置编码是给注意力”加个偏置”。 绝对编码是加到词嵌入,ALiBi 是加到分数,RoPE 是旋转 Q/K,三种注入位置不同。
- 误区:RoPE 有可学习位置表。 标准 RoPE 的频率通常固定;具体模型也可能采用经过缩放或可学习的变体。
- 追问:为什么自注意力需要位置编码而 RNN 不需要? 注意力置换等变、看不到顺序;RNN 递归结构天然含顺序。
- 追问:RoPE 加在哪一步? 加在每一层算注意力前对 Q、K 旋转(不是只在输入层加一次),V 不旋转。
- 追问:为什么不同维度用不同频率 θ? 多频率让模型同时感知短程和长程的相对距离,类似多分辨率。
- 追问:RoPE 能无损外推吗? 直接外推会退化,需 PI/NTK/YaRN 等手段配合,通常还要少量长文本微调。
八、加强记忆
位置编码先说准:无位置自注意力是置换等变,重排输入会同样重排输出,因此无法识别原顺序。RoPE 对 Q/K 按绝对位置旋转,使点积中的位置旋转项依赖相对位移;内容 q/k 仍参与分数。它不需要可学习位置表,频率也便于缩放,但直接外推不保证可靠。绝对位置、RoPE、ALiBi 的注入点不同,长上下文必须用训练与分距离评测证明。