RoPE 深入:从 2D 子空间旋转拓展到 2D 图像位置编码

author:张一极

2026年02月05日21:20:42

1、引言

RoPE(Rotary Position Embedding)的核心思想是将 Embedding 向量两两分组,在2D 子空间中进行旋转。这种机制让 NLP 模型能够优雅地处理 1D 文本序列的相对位置。

图像是二维网格结构(高度 H× 宽度 W),如果直接将其展平为 1D 序列使用标准 RoPE,会破坏图像在垂直方向上的相对位置关系。

本文将深入探讨 2D RoPE 的过程,即如何将旋转位置编码推广到二维数据(图像)中。

2、RoPE的2D与2D的RoPE不同

首先澄清一个概念:标准 RoPE 本身就是基于 2D 旋转矩阵的。

(1)(xy)=(cos(mθ)sin(mθ)sin(mθ)cos(mθ))(xy)

这里 m 是位置索引。在 NLP 中,m​ 只是一个标量(第几个 token)。

而2D RoPE要做的事m变成2维索引(即图像内点的位置坐标x,y)

3、2D RoPE 的思路

对于图像,每个 patch(图块)的位置由两个坐标决定:(i,j),分别代表行(高度)和列(宽度)。

如果我们简单地把图像 Flatten 成序列: (0,0),(0,1),...,(0,W),(1,0),... 那么位置 (0,W)(1,0) 在序列中相邻,但在图像空间中它们可能相距甚远。使用 1D RoPE 无法反映这种二维空间关系。

2D RoPE 的核心思路:分解

我们将 Embedding 向量(维度为 D)一分为二,这里的思想类似于神经网络中,你取某一个层分支去输出位置信息用于做位置训练一样,其实并不是真的他知道自己会去做位置训练,而是训练的数据赋予了这个含义:

这样,两个方向的位置信息是解耦的,通过 Concatenate(拼接)操作融合在一起。

4、2D RoPE 计算流程详解

假设我们有一个特征图 Feature Map,尺寸为 H×W,Embedding 维度(Head Dim)为 D

对于位于 (i,j) 的特征向量 qi,j

第一步:向量切分 (Split)

qi,j 切分为两部分: qi,j=[qheight,qwidth] 其中 qheightqwidth 的维度均为 D/2

第二步:分别计算频率 (Frequencies)

我们需要两组频率,分别对应 ij 假设标准 RoPE 频率计算函数为 CalcRoPE(x,pos)

  1. 高度编码 qheight 应用位置索引 i 的 RoPE 旋转。 qheight=CalcRoPE(qheight,i)

  2. 宽度编码 qwidth 应用位置索引 j 的 RoPE 旋转。 qwidth=CalcRoPE(qwidth,j)

第三步:拼接 (Concat)

将旋转后的两部分拼接回去: qi,j=Concat(qheight,qwidth)

效果分析

当计算两个位置 (i1,j1)(i2,j2) 的 Attention Score 时,点积结果将分解为两部分,一部分为两个token高度差,一部分为宽度差:

(2)ScoreRoPE(qh,i1)RoPE(kh,i2)高度相对位置 i1i2+RoPE(qw,j1)RoPE(kw,j2)宽度相对位置 j1j2

这样,Attention 就能同时感知垂直方向和水平方向的相对距离。


以上