人人都会AI编程

3.5 位置编码:绝对位置编码、相对位置编码、RoPE、ALiBi 详解

更新时间:2026-07-09

在 3.3 节中,我们推导了 Self-Attention 的核心机制:通过 Q、K、V 的交互计算,模型能够全局地捕捉任意两个 Token 之间的语义关联。但这里隐藏着一个致命的结构性缺陷——Self-Attention 本身是置换不变(Permutation Invariant)的。

换句话说,如果不加任何额外处理,你把句子中的词序完全打乱,Attention 计算出来的每个 Token 的输出值集合完全不变,只是顺序跟着变了。这意味着 Transformer 默认是“瞎子”:它分不清“狗咬人”和“人咬狗”在语义上的天壤之别。

为了赋予模型对序列顺序的感知能力,Transformer 架构必须引入位置编码(Positional Encoding)。本节将沿着技术演进的脉络,从经典的绝对位置编码出发,逐一拆解相对位置编码、RoPE 与 ALiBi 的设计逻辑。理解这四种方案,是你读懂当前主流大模型架构选型(如 Llama、Qwen、GLM、Bloom)的关键。


一、绝对位置编码:先给每个座位发一个固定编号

原始 Transformer(Attention Is All You Need, 2017)采用的是绝对位置编码(Absolute Positional Encoding)。其核心思想极其直白:既然 Attention 本身不认位置,那就人为地给每个位置发一个“位置名片”,与 Token 的语义 Embedding 相加后送入网络。

1.1 正弦/余弦位置编码(Sinusoidal PE)

Vaswani 等人设计了一套基于正弦和余弦函数的固定编码:

$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

$$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

其中,$pos$ 是 Token 在序列中的绝对位置,$i$ 是维度索引,$d_{model}$ 是模型维度。

设计意图

  • 周期性:不同频率的正弦波让模型能区分不同尺度的位置模式;
  • 相对位置可表达:通过三角恒等式,位置 $pos+k$ 的编码可以表示为位置 $pos$ 编码的线性变换,这为模型学习相对关系提供了数学基础;
  • 外推性:理论上可以处理训练时未见过的更长序列(但实践中效果有限)。

1.2 可学习绝对位置编码(Learnable APE)

BERT 等模型采用了更简单的方案:不再用固定函数,而是直接把位置编码当作可训练参数,初始化为随机向量,与词 Embedding 一起通过反向传播更新。

优点:模型自主学习最适合自己的位置表示,短文本上往往表现更好。
缺点

  • 长度受限于训练时的最大序列长度,超出后需要插值或外推技巧;
  • 每个位置独立存储向量,参数量随最大长度线性增长(虽然通常远小于主模型参数)。

实用认知:绝对位置编码方案简单有效,但它把“位置”当作了一个与内容无关的全局标签。模型必须额外耗费参数和训练数据去学会“第 42 号位置与第 43 号位置是相邻的”这种本应由架构先验保证的常识。


二、相对位置编码:从“你在第几排”到“你离我多远”

既然绝对位置的核心痛点是“模型需要死记硬背位置编号”,研究者自然想到:Attention 真正需要的不是绝对坐标,而是 Token A 与 Token B 之间的相对距离

这就是相对位置编码(Relative Positional Encoding, RPE)的出发点。以 Shaw et al. (2018) 的方案为例,它在计算 Attention Score 时引入了一个与相对距离相关的偏置项:

$$Attention(Q, K, V) = \text{softmax}\left(\frac{QK^T + a_{rel}}{\sqrt{d_k}}\right)V$$

其中 $a_{rel}$ 不再依赖于 $pos$ 的绝对值,而只依赖于 $i - j$(即查询位置与键位置的距离)。

关键改进

  • 平移不变性:整句向前或向后移动一个位置,Token 间的相对关系保持不变,模型无需重新学习;
  • 长度泛化:对未见过的长距离,可以通过学习到的相对距离模式进行有限外推。

局限:早期 RPE 实现需要在 Attention 矩阵计算中引入额外的位置嵌入查找,工程实现复杂,且随着序列长度增加,存储相对位置矩阵的内存开销较大。


三、RoPE:旋转位置编码——当前主流 LLM 的标配

时间来到 2021 年,苏剑林(Jianlin Su)等人提出了 Rotary Position Embedding(RoPE,旋转位置编码)。它 currently 被 Llama、Qwen、Baichuan、ChatGLM 等绝大多数主流开源大模型采用,可以视为位置编码领域的“最大公约数”。

3.1 核心思想:用旋转矩阵“拧”进位置信息

RoPE 的洞察非常深刻:与其把位置信息加到 Embedding 上,不如在 Q、K 向量内部通过旋转变换来编码位置

具体来说,对于二维情况,RoPE 把位置 $m$ 处的向量 $\mathbf{x}$ 乘以一个旋转矩阵:

$$R_m = \begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix}$$

在更高维度上,RoPE 将向量每两维分为一组,每组施加不同频率的旋转。位置 $m$ 的 Query 和 Key 向量被旋转了 $m\theta$ 角度后再进行内积运算。

3.2 为什么 RoPE 如此成功?

  1. 相对位置的显式表达

经过推导,位置 $m$ 的 Query 与位置 $n$ 的 Key 做内积时,其结果天然只依赖于它们的相对距离 $(m-n)$ 和各自的语义内容。这意味着 RoPE 用绝对位置编码的形式,实现了相对位置编码的功能——这是最优雅的数学特性。

  1. 与 Attention 的完美兼容

RoPE 直接作用于 Q、K,不改变 Value,也不改变 Transformer 的宏观流程。它可以在标准 Self-Attention 中零侵入式地替换原有位置编码。

  1. 长度外推性的可扩展性

原始 RoPE 的外推能力有限,但后续涌现了大量低成本改进:

  • NTK-aware RoPE:通过调整频率基底,改善了对更长文本的泛化;
  • YaRN / PI(Positional Interpolation):在微调阶段对旋转角度进行插值,使模型能适应数倍于训练长度的上下文(如从 4K 扩展到 128K)。

实用认知:如果你今天要在开源生态(Hugging Face、vLLM、SGLang)上部署或微调模型,遇到的 90% 以上都是 RoPE。掌握 RoPE,就等于掌握了大模型位置编码的工程现实。


四、ALiBi:不用位置编码的“位置编码”

在 RoPE 通过复杂旋转实现相对位置的同时,另一派思路走向了极致的简约。ALiBi(Attention with Linear Biases) 被 Bloom、MPT 等模型采用,其核心主张是:根本不需要给输入加位置向量,直接在 Attention Score 里按距离扣分的“罚款单”即可

4.1 机制:距离越远,罚分越重

ALiBi 在计算 Attention Score 时加入一个与相对距离成正比的负偏置:

$$AttentionScore = \frac{QK^T}{\sqrt{d_k}} - m \cdot |i - j|$$

其中 $m$ 是一个预定义的斜率(不同注意力头使用不同斜率),$|i-j|$ 是 Token 之间的绝对距离。

简单来说:ALiBi 不告诉模型“你在第几号位置”,而是直接惩罚“看得太远”的行为。离当前词越远的上下文,其对 Attention Score 的贡献被线性削弱。

4.2 ALiBi 的独特优势

  1. 零训练开销的位置感知

不需要额外的位置嵌入参数,也不需要正弦函数或旋转矩阵。ALiBi 的偏置项是纯推理时计算,对训练代码的侵入性极低。

  1. 极强的长度外推性

这是 ALiBi 最响亮的卖点。由于惩罚函数是线性的,且对训练时未见过的距离天然有定义,ALiBi 模型在不经过任何微调的情况下,直接处理 2 倍、4 倍甚至更长序列时,性能衰减远小于传统 APE/RoPE。这在需要超长上下文(如 100K+ Token)的场景中极具吸引力。

  1. 显式的距离衰减先验

它把“近距离更重要”这一语言学的强先验直接写进了架构,而不是让模型从零学习。

局限与权衡

  • 由于远距离被强制惩罚,ALiBi 对极度依赖长距离精确关联的任务(如某些代码依赖分析、超长文档的跨章节指代)可能不如经过插值扩展的 RoPE 灵活;
  • 线性偏置的“硬截断”感较强,在超长上下文场景下,远距离 Token 的注意力值可能被压得过低。

五、四种方案对比与选型逻辑

| 特性 | 绝对位置编码 (APE) | 相对位置编码 (RPE) | RoPE | ALiBi |
|------|-------------------|-------------------|------|-------|
| 核心思想 | 给每个位置发唯一 ID | 编码 Token 间距离 | 旋转 Q/K 向量 | 距离越远罚分越多 |
| 参数开销 | 中(可学习版)/ 无(正弦版) | 中 | 无额外参数 | 无额外参数 |
| 与 Attention 的耦合度 | 低(前置相加) | 高(修改 Score) | 中(修改 Q/K) | 高(修改 Score) |
| 训练长度外推 | 差 | 一般 | 良好(配合 NTK/YaRN) | 极强 |
| 当前主流采用 | BERT/GPT-2 时代 | T5、部分早期模型 | Llama/Qwen/GLM 等绝对主流 | Bloom/MPT 等 |
| 工程实现复杂度 | 低 | 中高 | 中 | 极低 |

给工程师和架构师的实用建议

  1. 如果你在选型开源基座模型做业务应用
  • 遇到 RoPE 模型(绝大多数):重点关注上下文长度扩展方案(是否有 YaRN/PI 支持)。当前 128K 长上下文的实现几乎全是基于 RoPE 的改进。
  • 遇到 ALiBi 模型:享受其开箱即用的长度外推性,但若任务需要全局长程依赖,需实测远距离召回率。
  1. 如果你在设计新架构或深度二次开发
  • RoPE 是社区生态最成熟的选择(FlashAttention、vLLM 等推理引擎对其优化最完善);
  • 若你的场景是超低成本训练 + 极限长度推理,ALiBi 值得纳入对比实验。
  1. 一个常见误区

不要简单认为“没有位置编码参数 = 没有位置信息”。ALiBi 证明,位置感知可以通过修改注意力计算实现;RoPE 证明,位置信息可以通过旋转操作内嵌。位置编码的本质是打破置换不变性,至于“加在哪里、怎么加”,并没有唯一标准答案。


六、与后续章节的衔接

位置编码解决了“Token 在哪里”的问题,但 Attention 机制本身只负责信息的加权汇聚。在 3.6 节中,我们将继续深入 Transformer 的微观构造:前馈神经网络(FFN) 如何为每个位置提供非线性变换能力,层归一化(LayerNorm) 如何稳定深网络的训练动态,以及残差连接(Residual Connection) 如何缓解梯度消失、支撑起上百层的模型深度。

这三者与位置编码共同构成了 Transformer Block 的完整版图。如果说 Attention 是模型的“望远镜”(看多远、看哪里),那么 FFN 就是“显微镜”(局部细节的精细加工),而 LayerNorm 与残差连接则是让这架精密仪器能够稳定训练的“减震系统”。