从复数旋转到高维推广,理解旋转位置编码的核心数学原理

配套代码


从需求出发

上一章我们提出了一个核心需求:希望 𝑄 𝑚 Q m 和 𝐾 𝑛 K n 的点积只取决于内容和相对位置 𝑚 − 𝑛 m−n:

其中 𝑓 f 是我们要设计的位置编码函数,它接收 token 的内容向量和位置索引,输出带有位置信息的向量。

RoPE 的核心洞察是:用旋转来编码位置。我们先从最简单的 2D 情况开始理解。

2D 情况:复数视角

我们的目标是找到一种操作,满足”内积只取决于相对位置”这个性质。什么数学工具天然具备”旋转”能力?答案是复数

在复数平面上,乘以 𝑒 𝑖 𝜃 e iθ 就是旋转 𝜃 θ 角度,这是复数最优美的性质之一。如果我们把 2D 向量看作复数,就可以用复数乘法来实现旋转,而且推导过程会非常简洁。

把向量看作复数

假设 query 向量 𝑞 q 只有两个维度:𝑞

( 𝑞 0 , 𝑞 1 ) q=(q 0

,q 1

)。我们把它对应到复数平面:

同样,key 向量 𝑘

𝑘 0 + 𝑘 1 𝑖 k=k 0

+k 1

i。

在复数中,向量点积可以通过共轭乘法的实部来计算。这里需要两个概念: