位置编码:从正弦到 RoPE

02-架构解剖 核心 约 30 分钟 #位置编码#RoPE#正弦编码#外推 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),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 本身无参数。

与其他知识点的关系

  • kp-002/003:注入点在 Q/K。
  • kp-025:外推改造是长上下文专题的核心。
  • kp-031:Mamba 等替代架构自带位置(递归隐含位置)——对 RoPE 的架构级替代。

自测题

  1. 为什么自注意力需要位置编码?

答:注意力对输入排列等变(集合运算)——无位置信息则"狗咬人"与"人咬狗"不可区分。

  1. RoPE 如何实现"相对位置"?

答:Q/K 按位置旋转,旋转保内积使点积只依赖旋转差=位置差——绝对旋转、相对生效。

  1. 位置插值为什么能让短训长用?

答:把长位置序列压缩进训练过的角度范围(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 缩放的技术帖)。