从复数旋转到高维推广,理解旋转位置编码的核心数学原理
配套代码
上一章我们提出了一个核心需求:希望 𝑄 𝑚 Q m 和 𝐾 𝑛 K n 的点积只取决于内容和相对位置 𝑚 − 𝑛 m−n:
其中 𝑓 f 是我们要设计的位置编码函数,它接收 token 的内容向量和位置索引,输出带有位置信息的向量。
RoPE 的核心洞察是:用旋转来编码位置。我们先从最简单的 2D 情况开始理解。
我们的目标是找到一种操作,满足”内积只取决于相对位置”这个性质。什么数学工具天然具备”旋转”能力?答案是复数。
在复数平面上,乘以 𝑒 𝑖 𝜃 e iθ 就是旋转 𝜃 θ 角度,这是复数最优美的性质之一。如果我们把 2D 向量看作复数,就可以用复数乘法来实现旋转,而且推导过程会非常简洁。
( 𝑞 0 , 𝑞 1 ) q=(q 0
,q 1
)。我们把它对应到复数平面:
𝑘 0 + 𝑘 1 𝑖 k=k 0
+k 1
i。
在复数中,向量点积可以通过共轭乘法的实部来计算。这里需要两个概念:
𝑘 ˉ k ˉ (共轭):将虚部取反,即 𝑘 ˉ = 𝑘 0 − 𝑘 1 𝑖 k ˉ =k 0
−k 1
i