01 RoPE本体:旋转位置编码
RoPE 是位置编码路线里最关键的一步. 它真正的突破不是“用了旋转矩阵”,而是 把绝对位置写成相位,让相对位置在点积里自动出现. 如果要追它的中文源头,最值得直接读的是苏剑林的博客《Transformer升级之路:2、博采众长的旋转式位置编码》; 对应的英文论文入口则是《RoFormer: Enhanced Transformer with Rotary Position Embedding》.
苏老师真是太牛逼了. 此事在 kexue.com 内亦有记载.
这篇只讲 RoPE 本身的数学定义、核心性质和为什么它会成为现代开源 LLM 的默认位置编码. RoPE 的外推、多模态 3D RoPE、MLA 与 RoPE 的兼容问题、工程成本和实现映射,放在扩展篇:《02-RoPE扩展-长上下文、多模态与工程实现》.
1. 核心定义
Su et al. (2021) 将位置相关的 Query、Key 写成:
这里 是输入向量, 是投影矩阵, 和 是与位置 相关的块对角旋转矩阵.
对每一对相邻维度,RoPE 使用一个二维旋转块:
其中 是第 个二维子空间的基频,通常定义为:
这意味着每两维被视为一个二维平面,位置 会让该平面中的向量旋转 . 高频维度旋转得快,负责短程差异; 低频维度旋转得慢,负责长程结构.
配图建议:画一个二维平面里的单向量旋转示意图,左侧是原始向量,右侧是经过位置 后旋转 的向量,并标出角度与坐标轴. 图片描述:展示 RoPE 在单个二维子空间里的最小工作单元,让读者先看懂“每两维就是一次平面旋转”. GPT-Image-2 Prompt:Create a technical educational figure showing the minimal 2D rotation unit of RoPE. Display a vector in a 2D plane before rotation and after rotation by angle m·theta_i, with x/y axes, arc annotation, and labels for original vector and rotated vector. White background, research-paper style, minimal academic palette, precise arrows, no decorative art.
图 1: RoPE 的最小计算单元不是整条向量,而是每两维构成的一个二维平面旋转.
1.1 一个能直接算出来的二维旋转例子
如果只看一个二维子空间,RoPE 的行为其实非常具体. 假设某一对维度上的原始向量是:
这里向量 一开始沿着 轴正方向,基频 取 ,位置索引 ,所以实际旋转角度是 . 代入式 (2) 可得:
这个例子说明,RoPE 并没有往向量里“额外加一个位置向量”,而是直接改变了原始表示的方向. 模长保持不变,但方向随着位置索引变化. 对模型来说,这就等于把“位于第几位”写进了向量的相位,而不是写成一张独立的位置表.
2. 为什么它天然得到相对位置
RoPE 最值得记住的不是定义,而是结果. 把每两维视为一个复数:
那么位置 的旋转就等价于:
对 Key 取共轭后做内积,可以得到:
式 (8) 的关键不在公式复杂,而在结构:绝对位置 和 没了,只剩相对距离 . 也就是说,**RoPE 没有额外手写相对位置项,但相对位置信息已经自然嵌进了 Query-Key 点积. **
这正是它后来胜出的核心原因:
- 不需要像 Shaw 那样额外维护大块相对位置参数.
- 不需要改写标准 attention 主体结构.
- 相对关系在数学上是“自带”的,而不是靠补丁拼上去的.
配图建议:画两组 Query/Key 向量在复平面上的旋转过程,标出绝对相位 、 被抵消,只留下相对相位 . 图片描述:展示为什么 RoPE 的点积最终只依赖相对距离,而不是两个绝对位置各自的坐标. GPT-Image-2 Prompt:Create a technical educational figure explaining why RoPE produces relative position naturally. Show query and key vectors rotated by absolute phases m·theta_i and n·theta_i on the complex plane, then indicate that inner product depends only on relative phase difference (m-n)·theta_i. White background, academic diagram style, precise arrows, clean labels, no decorative art.
图 2: RoPE 的关键不是“旋转过了”,而是点积里绝对相位被抵消,只留下相对相位差.
2.1 一个只剩相对距离的小例子
为了把式 (8) 看得更直观,假设某个二维子空间上的原始复数表示是 ,其模平方为 . 再取 ,并让两个 token 的位置分别为 、. 那么旋转后的内积贡献就是:
这里真正起作用的不是 和 这两个绝对位置本身,而是它们的差值 . 如果把两个位置同时平移到 、,那么结果完全不变,因为相对距离还是 2. **这就是 RoPE 真正让人拍桌子的地方:它把“平移不变性”直接写进了结构里,而不是交给模型自己去猜. **
3. 一个更直白的实数视角
如果不用复数写法,只看实数内积,也能看到同样结论. 设未经旋转的投影为 和 ,那么旋转后的内积可以整理成:
式 (10) 说明,旋转后的 Query-Key 打分只依赖相对距离 ,不再依赖绝对位置本身. 这一性质让 RoPE 非常适合语言、代码、检索这类“相对关系大于绝对坐标”的任务.
配图建议:画一张左右对照图,左边是绝对位置编码把 token 绑定到编号,右边是 RoPE 把两个 token 的交互绑定到相对位移. 图片描述:让读者一眼看出绝对位置和相对位置建模在结构上的差异. GPT-Image-2 Prompt:Create a side-by-side technical educational figure comparing absolute positional encoding and RoPE. Left panel: tokens tied to absolute indices like 5 and 6. Right panel: token interaction tied to relative distance like delta=1 through rotation-based phase difference. White background, research-paper style, minimal academic palette, readable labels, no decorative art.
图 3: 绝对位置编码强调“你在第几位”,RoPE 强调“你和别人相隔多远”.
4. 为什么现代开源模型几乎都选 RoPE
RoPE 后来成为事实标准,通常不是因为它在所有维度都最好,而是因为它同时满足了三件事:
- 相对性强:天然建模距离关系.
- 工程代价低:可直接融合进 Q/K 投影后的实现.
- 生态惯性大:Llama 系列、Qwen 系列、DeepSeek 系列都围绕它深度优化.
从工程视角看,位置编码真正决定的是下面几件事:
- 模型是否能外推到训练长度之外.
- 高频与低频位置模式如何取舍.
- KV Cache 和推理内核如何组织.
- 多模态输入中的一维、二维、时间坐标如何统一.
**位置编码不是前处理细节,而是时序归纳偏置的入口. **