RoPE的出现是一个美学高峰。它不添加任何额外的位置嵌入向量,而是直接把位置信息"编织"进Query和Key的旋转矩阵里。具体来说,对于第m个位置的d维向量,RoPE把它切成d/2个二维平面,在每个平面上施加一个旋转:
\[\text{RoPE}(x_m, m) = \begin{pmatrix} \cos(m\theta_j) & -\sin(m\theta_j) \\ \sin(m\theta_j) & \cos(m\theta_j) \end{pmatrix} \begin{pmatrix} x_{m,2j} \\ x_{m,2j+1} \end{pmatrix}\]
其中\(\theta_j = \text{base}^{-2j/d}\),base通常取10000。这个公式的精妙之处在于:当我们计算两个位置m和n的向量点积时,旋转矩阵的正交性保证了结果只依赖于它们的相位差 \((m-n)\theta_j\)。