位置编码:从正弦到 RoPE
本文基于模型知识整理(生成时未联网核对),RoPE 推导建议对照 Su et al. 2021(RoFormer)复核。
一句话定义
注意力本身对位置无感(排列等变),必须注入位置信息:绝对位置编码(正弦函数/可学习向量,加到 token 嵌入上)→ 相对位置(T5 偏置)→ 旋转位置编码 RoPE(现代主流:在 Q/K 上做与位置成比例的旋转,使注意力分数只依赖相对距离)——位置编码的演化史=从"外挂标签"到"内建旋转几何"的升级史。
为什么重要
位置编码决定模型"知道词序"的方式,并直接决定长度外推能力(训练 4k 能用 32k 吗)——RoPE 是 Llama/ChatGLM/Qwen 等现代开源模型的标准配置,其外推改造(NTK/位置插值)是长上下文技术(kp-025)的核心武器。
前置知识
kp-002(注意力对位置等变的来源);二维旋转矩阵概念。
核心概念
- 为什么需要位置编码:自注意力是集合运算(打乱输入顺序输出不变——排列等变);"狗咬人"与"人咬狗"必须可区分 ⇒ 位置信息必须显式注入。
- 正弦位置编码(原论文):位置 pos 的每个维度用不同频率的 sin/cos 填充、加到 token 嵌入上。性质:任意相对位移的编码差是位置的线性函数(理论优雅);缺点:外推到未见位置表现退化。
- 可学习绝对编码:每位置一个可训练向量(BERT/GPT-2);硬上限=训练长度(超出无编码可用)。
- 相对位置偏置(T5):在注意力分数上加"距离偏置表"——直接编码相对距离,外推更稳。
- RoPE(旋转位置编码,现代主流):把 Q/K 的每对维度视为二维平面上的向量,按位置 m 旋转角度 mθᵢ:
$$q_m=\text{Rot}(m\theta)q,\quad k_n=\text{Rot}(n\theta)k$$ 旋转后的点积只依赖相对位置 (m−n):$q_m^\top k_n\propto f(m-n)$——"绝对位置旋转、相对位置生效"的精妙设计。
- RoPE 的外推改造:位置插值(把位置 m 压缩到 m/L,kp-025)、NTK-aware 缩放(按维度分频段调整频率)——"训练 4k 用 128k"的关键技术。
原理与机制
RoPE 的几何本质:二维旋转 $Rot(\alpha)=\begin{bmatrix}\cos\alpha&-\sin\alpha\\\sin\alpha&\cos\alpha\end{bmatrix}$ 保内积结构——两向量各旋转 mθ 与 nθ 后的点积 = 原点积旋转 (n−m)θ。把"位置"编码为"旋转角":绝对位置=旋转多少,相对位置=旋转差——几何天然给出相对性。多对维度用不同频率 θᵢ(类似正弦编码的多频率思想),让不同维度感知不同尺度的距离。
为什么外推难、插值能救:直接外推=让模型处理"训练时没见过的旋转角"(高频维度角度飞出训练分布)→ 注意力崩坏;位置插值把 m 缩小 L 倍(等效"把 128k 的位置挤进 4k 的角度范围")——代价是近距离分辨率下降,配合少量微调恢复。NTK 缩放按频率分层处理(低频拉伸高频不动)——更聪明的频率分配。
正弦编码的"线性关系"性质:$PE_{pos+k}$ 可表示为 $PE_{pos}$ 的线性变换(旋转矩阵)——原论文选正弦的理论动机与 RoPE 一脉相承(RoPE 是把这一性质从"编码可加"推进到"点积相对化")。
图示
正弦: PE(pos) = [sin(pos/10000^{2i/d}), cos(pos/10000^{2i/d})] → 加到嵌入
可学习: 每位置一个向量 (硬上限)
RoPE: q_m = Rot(mθ)q ; k_n = Rot(nθ)k
q_mᵀk_n 只依赖 (m−n) ← 相对位置生效
外推: 位置插值 m→m/L | NTK 分频缩放
→ 训练4k可用128k (kp-025 长上下文核心)
直观类比
正弦编码像"给每人发一张写着编号的胸牌"(绝对位置);RoPE 像"每人佩戴一个转速与其编号成正比的旋转陀螺"——两人陀螺的相对转角自动等于编号差(相对位置内建于几何)。外推问题像"陀螺转速超出校准范围会转飞"——插值=整体放慢转速让旧校准仍然适用。
实例或案例
- Llama 系列:RoPE 基频 10000、支持 4k/8k 训练长度;Llama-3 扩到 8k+。
- 长上下文微调:位置插值(Meta PI)让 Llama 训 2k 直接外推 32k 只需千步微调——kp-025 的落地明星。
- 检测 RoPE:对输入打乱顺序的敏感性实验(注意力分数随相对位移的规律变化)——位置编码的实证检验法。
常见误区
- 误区一:"RoPE 加在 V 或 FFN 上"。只加在 Q/K(V 不旋转)——因为只有 Q·K 的点积需要相对位置;V 的值被加权求和,位置无关。
- 误区二:"位置插值后无需微调"。插值后近距分辨率下降,小量微调(长文本)恢复精度——"免训练外推"是近似说法。
- 误区三:"RoPE 是可学习参数"。θᵢ 频率是固定超参(基频 10000 的几何级数);可学习的是 Q/K 投影矩阵——RoPE 本身无参数。
与其他知识点的关系
自测题
- 为什么自注意力需要位置编码?
答:注意力对输入排列等变(集合运算)——无位置信息则"狗咬人"与"人咬狗"不可区分。
- RoPE 如何实现"相对位置"?
答:Q/K 按位置旋转,旋转保内积使点积只依赖旋转差=位置差——绝对旋转、相对生效。
- 位置插值为什么能让短训长用?
答:把长位置序列压缩进训练过的角度范围(m→m/L),避免未见过的大旋转角;代价是分辨率下降需微调恢复。
延伸阅读
- Su 等, "RoFormer: Enhanced Transformer with Rotary Position Embedding"(2021,RoPE 原文)。
- Chen 等, "Extending Context Window via Position Interpolation"(2023,PI)。
- blog.eleuther.ai 的 RoPE 详解(NTK-aware 缩放的技术帖)。