Skip to content

位置编码(Positional Encoding)

Attention 本身对顺序无感知,必须显式注入位置信息。位置编码是长上下文相关面试题的核心,RoPE 更是现代大模型的标配。本文深入各方案的原理、优劣与长上下文扩展。长上下文系统梳理见 长上下文专题

一、为什么需要位置编码?

自注意力的计算是**置换不变(permutation-invariant)**的——打乱输入 token 的顺序,输出只会相应地打乱,模型无法区分「我打你」和「你打我」。因为注意力只看 token 两两之间的内容相关性,不含任何顺序信息。所以必须额外提供位置信息。

位置编码方案大体分两类:绝对位置编码(给每个位置一个表示)和相对位置编码(只关心两个 token 的相对距离)。

二、主要方案

1. 正弦绝对位置编码(Sinusoidal,原始 Transformer)

用不同频率的 sin/cos 函数为每个位置生成固定向量,加到词嵌入上:

$$PE_{(pos,2i)}=\sin!\left(\frac{pos}{10000^{2i/d}}\right),\quad PE_{(pos,2i+1)}=\cos!\left(\frac{pos}{10000^{2i/d}}\right)$$

不同维度用不同频率(高频维度变化快、低频维度变化慢),像「二进制编码」一样用多个频率组合唯一标识位置。

  • 优点:无需训练参数;理论上可外推到未见过的长度;相邻位置编码相似(平滑)。
  • 缺点:是绝对位置,表达相对关系的能力弱;实际外推效果一般。

2. 可学习绝对位置编码(Learned,BERT/早期 GPT)

把位置当作可学习的 Embedding(每个位置学一个向量)。简单有效,但无法外推——训练时没见过的位置(如第 5000 位)没有对应的、有意义的向量。

3. 旋转位置编码(RoPE,主流)★

RoPE(Rotary Position Embedding)是当前大模型(LLaMA、Qwen、GLM、DeepSeek 等)的主流方案。

核心思想:不给词向量「加」位置向量,而是按位置把 Q、K 向量「旋转」一个角度。把向量两两分组看作复平面上的点,位置 m 处旋转 mθ:

$$\langle R_m q, R_n k\rangle = \text{只依赖} (m-n)$$

即旋转后做内积,结果只依赖相对位置 (m−n)。于是 RoPE 把绝对位置(旋转角度由绝对位置决定)和相对位置(点积只看相对差)统一了。

  • 优点:同时具备绝对与相对位置优点;作用在 Attention 内部、不增加参数;外推性较好,且便于通过插值扩展上下文。
  • 关键超参 base(频率基,默认 10000):控制各维度旋转的频率范围,是长上下文扩展的主要「旋钮」。

4. ALiBi(Attention with Linear Biases)

不加位置向量,而是直接给注意力分数加一个与相对距离成正比的线性惩罚(距离越远惩罚越大):score = QKᵀ − m·distance

  • 优点:实现简单,外推能力强(远超训练长度仍能工作)。
  • 代表:BLOOM、MPT。

三、对比小结

方案类型可外推增加参数代表
正弦绝对理论可、实际一般原始 Transformer
可学习绝对BERT
RoPE绝对+相对较好(可扩展)LLaMA/Qwen/GLM
ALiBi相对(偏置)BLOOM/MPT

四、长上下文扩展(多基于 RoPE)

把一个 4K 上下文的模型扩展到 32K/128K,常见思路:

  • 位置插值(PI, Position Interpolation):把超出范围的位置「压缩」回训练范围内(相当于缩小旋转角度),需少量微调。
  • NTK-aware Scaling:调整 RoPE 的频率基 base,高频维度少缩放、低频维度多缩放,几乎不需微调即可外推(直觉:保留高频的局部分辨率、拉长低频的长程表示)。
  • YaRN:结合 NTK 与注意力温度调整,是目前效果较好的长上下文扩展方法之一。
  • 位置编码外的挑战:扩展还要解决 KV Cache 显存、注意力 O(n²)、lost-in-the-middle,详见 长上下文专题

五、高频追问

Q:为什么 Attention 需要位置编码? 自注意力是置换不变的——它只看 token 间的内容相关性,不含顺序信息,打乱输入顺序输出只相应打乱。所以必须显式注入位置,否则模型分不清词序。

Q:RoPE 为什么能体现相对位置? 对位置 m、n 的向量分别旋转 mθ、nθ 后做内积,结果只与角度差 (m−n)θ 有关,从而把相对位置编码进了注意力分数;同时旋转角度由绝对位置决定,兼具绝对与相对位置的优点。

Q:RoPE 相比正弦/可学习编码好在哪? 兼具绝对与相对位置、作用在注意力内部不增参数、外推性较好且便于插值扩展长上下文。这些综合优势让它成为现代大模型标配。

Q:为什么可学习位置编码不能外推? 它为每个绝对位置单独学一个向量,训练时没见过的位置没有对应的、有意义的向量,超出训练长度就失效。

Q:怎么把短上下文模型扩展到长上下文? 多基于 RoPE:位置插值 PI(压缩位置,需微调)、NTK-aware(调频率基,几乎免微调)、YaRN(NTK+温度,效果好)。本质是调整旋转频率让模型适配更长位置。

Q:ALiBi 和 RoPE 的区别? RoPE 通过旋转 Q/K 注入位置、改变向量;ALiBi 不动向量,直接给注意力分数加一个随距离增大的线性惩罚。ALiBi 更简单、外推更强,但 RoPE 表达更灵活、生态更主流。

Q:长上下文的主要挑战是什么? ① 位置编码外推;② KV Cache 显存随长度线性增长;③ 注意力 O(n²) 计算开销;④ 有效信息检索(lost in the middle)。位置编码只是其一,系统梳理见 长上下文专题

基于 MIT 许可发布