旋转位置编码(Rotary Position Embedding, RoPE) 是 Su et al. (2021) 提出的位置编码方案。核心思想是:对 Q 和 K 向量施加一个与位置成正比的旋转,使得注意力内积自然只依赖相对位置 ,而无需显式计算位置差。RoPE 已成为 LLaMA、Qwen、DeepSeek 等主流 LLM 的标准位置编码。
出发点
Transformer 的 self-attention 本身是置换不变的——打乱 token 顺序,attention 输出不变。位置编码的作用就是打破这种对称性,让模型感知 token 的顺序。
理想的位置编码应满足:Q 和 K 的内积只依赖词向量本身和它们之间的相对位置 m − n m - n m − n :
⟨ f q ( x m , m ) , f k ( x n , n ) ⟩ = g ( x m , x n , m − n ) \langle f_q(x_m, m),\; f_k(x_n, n) \rangle = g(x_m, x_n, m - n) ⟨ f q ( x m , m ) , f k ( x n , n )⟩ = g ( x m , x n , m − n )
原始 Transformer 的正弦位置编码是加法 的(x + p x + p x + p ),展开内积 ( x + p ) ⊤ ( x ′ + p ′ ) (x+p)^\top(x'+p') ( x + p ) ⊤ ( x ′ + p ′ ) 后会产生交叉项 x ⊤ p ′ + p ⊤ x ′ x^\top p' + p^\top x' x ⊤ p ′ + p ⊤ x ′ ,无法干净地只依赖相对位置。RoPE 用**乘法(旋转)**解决了这个问题。
二维情形的完整推导
从 d = 2 d = 2 d = 2 的情形出发最容易理解。在复平面上,一个二维向量可以表示为复数 z = r e i φ z = r\, e^{i\varphi} z = r e i φ 。
第一步:建立约束方程
设位置 m m m 处的 query 编码函数为 f q ( x m , m ) f_q(x_m, m) f q ( x m , m ) ,位置 n n n 处的 key 编码函数为 f k ( x n , n ) f_k(x_n, n) f k ( x n , n ) 。初始条件 是位置 0 不编码任何位置信息:
f q ( x m , 0 ) = W q x m = q , f k ( x n , 0 ) = W k x n = k f_q(x_m, 0) = W_q x_m = q, \quad f_k(x_n, 0) = W_k x_n = k f q ( x m , 0 ) = W q x m = q , f k ( x n , 0 ) = W k x n = k
需要满足的相对位置约束 为:
Re [ f q ( x m , m ) ⋅ f k ( x n , n ) ∗ ] = g ( x m , x n , m − n ) \text{Re}\left[f_q(x_m, m) \cdot f_k(x_n, n)^*\right] = g(x_m, x_n, m - n) Re [ f q ( x m , m ) ⋅ f k ( x n , n ) ∗ ] = g ( x m , x n , m − n )
其中 ∗ {}^* ∗ 为复数共轭。右侧函数 g g g 只依赖相对位置 m − n m - n m − n 。
第二步:极坐标分解
将 f q f_q f q 、f k f_k f k 、g g g 分别写成模(半径)和辐角的乘积:
f q ( x q , m ) = R q ( x q , m ) e i Θ q ( x q , m ) f_q(x_q, m) = R_q(x_q, m)\; e^{i\,\Theta_q(x_q, m)} f q ( x q , m ) = R q ( x q , m ) e i Θ q ( x q , m )
f k ( x k , n ) = R k ( x k , n ) e i Θ k ( x k , n ) f_k(x_k, n) = R_k(x_k, n)\; e^{i\,\Theta_k(x_k, n)} f k ( x k , n ) = R k ( x k , n ) e i Θ k ( x k , n )
g ( x q , x k , m − n ) = R g ( x q , x k , m − n ) e i Θ g ( x q , x k , m − n ) g(x_q, x_k, m-n) = R_g(x_q, x_k, m-n)\; e^{i\,\Theta_g(x_q, x_k, m-n)} g ( x q , x k , m − n ) = R g ( x q , x k , m − n ) e i Θ g ( x q , x k , m − n )
代入约束方程,将模和辐角分开,得到两个独立约束:
R_q(x_q, m) \cdot R_k(x_k, n) = R_g(x_q, x_k, m - n) \tag{模约束}
\Theta_k(x_k, n) - \Theta_q(x_q, m) = \Theta_g(x_q, x_k, m - n) \tag{辐角约束}
第三步:证明模与位置无关
在模约束中令 m = n m = n m = n :
R q ( x q , m ) ⋅ R k ( x k , m ) = R g ( x q , x k , 0 ) R_q(x_q, m) \cdot R_k(x_k, m) = R_g(x_q, x_k, 0) R q ( x q , m ) ⋅ R k ( x k , m ) = R g ( x q , x k , 0 )
右侧 R g ( ⋅ , ⋅ , 0 ) R_g(\cdot, \cdot, 0) R g ( ⋅ , ⋅ , 0 ) 是常数(不依赖 m m m )。再利用初始条件 R q ( x q , 0 ) = ∥ q ∥ R_q(x_q, 0) = \|q\| R q ( x q , 0 ) = ∥ q ∥ ,R k ( x k , 0 ) = ∥ k ∥ R_k(x_k, 0) = \|k\| R k ( x k , 0 ) = ∥ k ∥ ,最简单的满足条件的解是:
R q ( x q , m ) = ∥ q ∥ , R k ( x k , n ) = ∥ k ∥ R_q(x_q, m) = \|q\|, \quad R_k(x_k, n) = \|k\| R q ( x q , m ) = ∥ q ∥ , R k ( x k , n ) = ∥ k ∥
即模与位置完全无关 ,旋转不改变向量的长度。
第四步:证明辐角线性增长
在辐角约束中同样令 m = n m = n m = n :
Θ k ( x k , m ) − Θ q ( x q , m ) = Θ g ( x q , x k , 0 ) = θ k − θ q \Theta_k(x_k, m) - \Theta_q(x_q, m) = \Theta_g(x_q, x_k, 0) = \theta_k - \theta_q Θ k ( x k , m ) − Θ q ( x q , m ) = Θ g ( x q , x k , 0 ) = θ k − θ q
这说明 Θ q ( x q , m ) − θ q = Θ k ( x k , m ) − θ k \Theta_q(x_q, m) - \theta_q = \Theta_k(x_k, m) - \theta_k Θ q ( x q , m ) − θ q = Θ k ( x k , m ) − θ k ,辐角的”位置偏移量”与词向量 x x x 无关。记这个公共的位置偏移为 ϕ ( m ) \phi(m) ϕ ( m ) :
Θ q ( x q , m ) = ϕ ( m ) + θ q , Θ k ( x k , n ) = ϕ ( n ) + θ k \Theta_q(x_q, m) = \phi(m) + \theta_q, \quad \Theta_k(x_k, n) = \phi(n) + \theta_k Θ q ( x q , m ) = ϕ ( m ) + θ q , Θ k ( x k , n ) = ϕ ( n ) + θ k
现在把 n = m + 1 n = m + 1 n = m + 1 代入辐角约束:
[ ϕ ( m + 1 ) + θ k ] − [ ϕ ( m ) + θ q ] = Θ g ( x q , x k , 1 ) [\phi(m+1) + \theta_k] - [\phi(m) + \theta_q] = \Theta_g(x_q, x_k, 1) [ ϕ ( m + 1 ) + θ k ] − [ ϕ ( m ) + θ q ] = Θ g ( x q , x k , 1 )
ϕ ( m + 1 ) − ϕ ( m ) = Θ g ( x q , x k , 1 ) + θ q − θ k \phi(m+1) - \phi(m) = \Theta_g(x_q, x_k, 1) + \theta_q - \theta_k ϕ ( m + 1 ) − ϕ ( m ) = Θ g ( x q , x k , 1 ) + θ q − θ k
右侧是一个与 m m m 无关的常数。这意味着 ϕ ( m ) \phi(m) ϕ ( m ) 的相邻差为常数——ϕ \phi ϕ 是一个等差数列 :
ϕ ( m ) = m θ + γ \phi(m) = m\theta + \gamma ϕ ( m ) = m θ + γ
其中 θ \theta θ 是公差(旋转角速度),γ \gamma γ 是一个常数偏移(取 γ = 0 \gamma = 0 γ = 0 不失一般性)。
第五步:得到最终形式
综合第三步(模不变)和第四步(辐角线性):
f q ( x m , m ) = ( W q x m ) e i m θ , f k ( x n , n ) = ( W k x n ) e i n θ \boxed{f_q(x_m, m) = (W_q x_m)\; e^{im\theta}, \quad f_k(x_n, n) = (W_k x_n)\; e^{in\theta}} f q ( x m , m ) = ( W q x m ) e im θ , f k ( x n , n ) = ( W k x n ) e in θ
验证内积:
f q ⋅ f k ∗ = ( W q x m ) e i m θ ⋅ ( W k x n ) ∗ e − i n θ = ( W q x m ) ( W k x n ) ∗ ⋅ e i ( m − n ) θ f_q \cdot f_k^* = (W_q x_m)\; e^{im\theta} \cdot (W_k x_n)^*\; e^{-in\theta} = (W_q x_m)(W_k x_n)^* \cdot e^{i(m-n)\theta} f q ⋅ f k ∗ = ( W q x m ) e im θ ⋅ ( W k x n ) ∗ e − in θ = ( W q x m ) ( W k x n ) ∗ ⋅ e i ( m − n ) θ
取实部后:
⟨ f q , f k ⟩ = Re [ ( W q x m ) ( W k x n ) ∗ ⋅ e i ( m − n ) θ ] = g ( x m , x n , m − n ) ✓ \langle f_q, f_k \rangle = \text{Re}\left[(W_q x_m)(W_k x_n)^* \cdot e^{i(m-n)\theta}\right] = g(x_m, x_n, m-n) \quad \checkmark ⟨ f q , f k ⟩ = Re [ ( W q x m ) ( W k x n ) ∗ ⋅ e i ( m − n ) θ ] = g ( x m , x n , m − n ) ✓
确实只依赖相对位置 m − n m - n m − n 。
二维矩阵形式
复数乘法 z ⋅ e i α z \cdot e^{i\alpha} z ⋅ e i α 等价于二维旋转矩阵:
e i α ⋅ ( a b ) ↔ ( cos α − sin α sin α cos α ) ( a b ) e^{i\alpha} \cdot \begin{pmatrix} a \\ b \end{pmatrix} \;\;\leftrightarrow\;\; \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix} \begin{pmatrix} a \\ b \end{pmatrix} e i α ⋅ ( a b ) ↔ ( cos α sin α − sin α cos α ) ( a b )
因此:
f ( x m , m ) = ( cos m θ − sin m θ sin m θ cos m θ ) ⏟ R m θ W x m f(x_m, m) = \underbrace{\begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix}}_{R_{m\theta}} W x_m f ( x m , m ) = R m θ ( cos m θ sin m θ − sin m θ cos m θ ) W x m
几何直觉 :线性投影 W x Wx W x 得到一个二维向量,然后绕原点旋转 m θ m\theta m θ 角度。位置 0 不旋转,位置 1 旋转 θ \theta θ ,位置 2 旋转 2 θ 2\theta 2 θ ,依此类推。计算两个位置的内积时,旋转角度相减,只剩相对旋转 ( m − n ) θ (m-n)\theta ( m − n ) θ 。
推广到 d d d 维
d d d 维无法直接做”一次旋转”,但可以拆成 d / 2 d/2 d /2 个独立的二维子空间 ,每个子空间用不同频率 θ i \theta_i θ i 做独立旋转。
编码函数:
f { q , k } ( x m , m ) = R Θ , m d W { q , k } x m f_{\{q,k\}}(x_m, m) = R^d_{\Theta,m}\; W_{\{q,k\}}\; x_m f { q , k } ( x m , m ) = R Θ , m d W { q , k } x m
其中 R Θ , m d R^d_{\Theta,m} R Θ , m d 是分块对角旋转矩阵(block-diagonal rotation matrix) :
R Θ , m d = ( cos m θ 1 − sin m θ 1 sin m θ 1 cos m θ 1 cos m θ 2 − sin m θ 2 sin m θ 2 cos m θ 2 ⋱ ) R^d_{\Theta,m} = \begin{pmatrix} \cos m\theta_1 & -\sin m\theta_1 & & & \\ \sin m\theta_1 & \cos m\theta_1 & & & \\ & & \cos m\theta_2 & -\sin m\theta_2 & \\ & & \sin m\theta_2 & \cos m\theta_2 & \\ & & & & \ddots \end{pmatrix} R Θ , m d = cos m θ 1 sin m θ 1 − sin m θ 1 cos m θ 1 cos m θ 2 sin m θ 2 − sin m θ 2 cos m θ 2 ⋱
频率参数:
θ i = 10000 − 2 ( i − 1 ) / d , i ∈ [ 1 , d / 2 ] \theta_i = 10000^{-2(i-1)/d}, \quad i \in [1,\, d/2] θ i = 1000 0 − 2 ( i − 1 ) / d , i ∈ [ 1 , d /2 ]
这组频率与原始 Transformer 正弦编码完全相同。θ 1 \theta_1 θ 1 最大(高频,旋转快),θ d / 2 \theta_{d/2} θ d /2 最小(低频,旋转慢)。直觉上,低维子空间编码精细的局部位置,高维子空间编码粗粒度的全局位置。
验证相对位置性
q m ⊤ k n = ( R Θ , m d W q x m ) ⊤ ( R Θ , n d W k x n ) = x m ⊤ W q ⊤ ( R Θ , m d ) ⊤ R Θ , n d ⏟ R Θ , n − m d W k x n q_m^\top k_n = (R^d_{\Theta,m} W_q x_m)^\top (R^d_{\Theta,n} W_k x_n) = x_m^\top W_q^\top \underbrace{(R^d_{\Theta,m})^\top R^d_{\Theta,n}}_{R^d_{\Theta,\,n-m}} W_k x_n q m ⊤ k n = ( R Θ , m d W q x m ) ⊤ ( R Θ , n d W k x n ) = x m ⊤ W q ⊤ R Θ , n − m d ( R Θ , m d ) ⊤ R Θ , n d W k x n
由于每个 2 × 2 2 \times 2 2 × 2 旋转块是正交矩阵(orthogonal matrix) :
( R m θ ) ⊤ R n θ = R ( n − m ) θ (R_{m\theta})^\top R_{n\theta} = R_{(n-m)\theta} ( R m θ ) ⊤ R n θ = R ( n − m ) θ
所以整个分块对角矩阵也满足 ( R Θ , m d ) ⊤ R Θ , n d = R Θ , n − m d (R^d_{\Theta,m})^\top R^d_{\Theta,n} = R^d_{\Theta,\,n-m} ( R Θ , m d ) ⊤ R Θ , n d = R Θ , n − m d 。内积只依赖相对位置 n − m n - m n − m 。
具体数值示例
以 d = 4 d = 4 d = 4 (2 个子空间)为例,展示 RoPE 前后向量的变化。
设频率 θ 1 = 1.0 \theta_1 = 1.0 θ 1 = 1.0 ,θ 2 = 0.01 \theta_2 = 0.01 θ 2 = 0.01 (简化取值)。设经过线性投影后,位置 m = 3 m = 3 m = 3 处的 Q 向量为:
q = W q x 3 = ( 1.0 0.5 0.8 − 0.3 ) q = W_q x_3 = \begin{pmatrix} 1.0 \\ 0.5 \\ 0.8 \\ -0.3 \end{pmatrix} q = W q x 3 = 1.0 0.5 0.8 − 0.3
RoPE 对每个二维子空间独立旋转:
子空间 1 (维度 0-1),旋转角度 3 × θ 1 = 3.0 3 \times \theta_1 = 3.0 3 × θ 1 = 3.0 rad:
( cos 3.0 − sin 3.0 sin 3.0 cos 3.0 ) ( 1.0 0.5 ) = ( − 0.919 0.641 ) \begin{pmatrix} \cos 3.0 & -\sin 3.0 \\ \sin 3.0 & \cos 3.0 \end{pmatrix} \begin{pmatrix} 1.0 \\ 0.5 \end{pmatrix} = \begin{pmatrix} -0.919 \\ 0.641 \end{pmatrix} ( cos 3.0 sin 3.0 − sin 3.0 cos 3.0 ) ( 1.0 0.5 ) = ( − 0.919 0.641 )
子空间 2 (维度 2-3),旋转角度 3 × θ 2 = 0.03 3 \times \theta_2 = 0.03 3 × θ 2 = 0.03 rad:
( cos 0.03 − sin 0.03 sin 0.03 cos 0.03 ) ( 0.8 − 0.3 ) = ( 0.808 − 0.276 ) \begin{pmatrix} \cos 0.03 & -\sin 0.03 \\ \sin 0.03 & \cos 0.03 \end{pmatrix} \begin{pmatrix} 0.8 \\ -0.3 \end{pmatrix} = \begin{pmatrix} 0.808 \\ -0.276 \end{pmatrix} ( cos 0.03 sin 0.03 − sin 0.03 cos 0.03 ) ( 0.8 − 0.3 ) = ( 0.808 − 0.276 )
RoPE 后的 Q 向量:
q 3 = R Θ , 3 4 q = ( − 0.919 0.641 0.808 − 0.276 ) q_3 = R^4_{\Theta,3}\; q = \begin{pmatrix} -0.919 \\ 0.641 \\ 0.808 \\ -0.276 \end{pmatrix} q 3 = R Θ , 3 4 q = − 0.919 0.641 0.808 − 0.276
观察:
高频子空间(维度 0-1) :旋转了 3 弧度(约 172°),向量方向剧烈变化。相邻位置之间差异大,编码精细的局部位置信息。
低频子空间(维度 2-3) :旋转了 0.03 弧度(约 1.7°),向量几乎不变。远距离位置之间才有明显差异,编码粗粒度的全局位置信息。
向量模长不变 :旋转前 ∥ q ∥ = 1.0 2 + 0.5 2 + 0.8 2 + 0.3 2 ≈ 1.386 \|q\| = \sqrt{1.0^2 + 0.5^2 + 0.8^2 + 0.3^2} \approx 1.386 ∥ q ∥ = 1. 0 2 + 0. 5 2 + 0. 8 2 + 0. 3 2 ≈ 1.386 ,旋转后模长仍为 1.386 1.386 1.386 。
不同位置的 Q 向量对比
假设同一个词出现在不同位置,投影后都得到相同的 q = ( 1.0 , 0.5 , 0.8 , − 0.3 ) ⊤ q = (1.0,\; 0.5,\; 0.8,\; -0.3)^\top q = ( 1.0 , 0.5 , 0.8 , − 0.3 ) ⊤ :
位置 m m m 子空间 1 旋转角 子空间 2 旋转角 旋转后 q m q_m q m 0 0 rad 0 rad ( 1.000 , 0.500 , 0.800 , − 0.300 ) (1.000,\; 0.500,\; 0.800,\; -0.300) ( 1.000 , 0.500 , 0.800 , − 0.300 ) 1 1.0 rad 0.01 rad ( 0.311 , 1.112 , 0.803 , − 0.292 ) (0.311,\; 1.112,\; 0.803,\; -0.292) ( 0.311 , 1.112 , 0.803 , − 0.292 ) 2 2.0 rad 0.02 rad ( − 0.567 , 1.045 , 0.806 , − 0.284 ) (-0.567,\; 1.045,\; 0.806,\; -0.284) ( − 0.567 , 1.045 , 0.806 , − 0.284 ) 3 3.0 rad 0.03 rad ( − 0.919 , 0.641 , 0.808 , − 0.276 ) (-0.919,\; 0.641,\; 0.808,\; -0.276) ( − 0.919 , 0.641 , 0.808 , − 0.276 )
可以看到:高频子空间(前两维)随位置快速变化,低频子空间(后两维)几乎不动。这与人类阅读的直觉一致——附近的词需要精确区分位置,远处的词只需要大致的距离感。
高效实现
R Θ , m d R^d_{\Theta,m} R Θ , m d 是极度稀疏的分块对角矩阵,不需要做完整的 d × d d \times d d × d 矩阵乘法。展开单个 2 × 2 2 \times 2 2 × 2 旋转块的计算:
( cos α − sin α sin α cos α ) ( x 1 x 2 ) = ( x 1 cos α − x 2 sin α x 2 cos α + x 1 sin α ) \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} x_1 \cos\alpha - x_2 \sin\alpha \\ x_2 \cos\alpha + x_1 \sin\alpha \end{pmatrix} ( cos α sin α − sin α cos α ) ( x 1 x 2 ) = ( x 1 cos α − x 2 sin α x 2 cos α + x 1 sin α )
写成逐元素操作:
= ( x 1 x 2 ) ⊙ ( cos α cos α ) + ( − x 2 x 1 ) ⊙ ( sin α sin α ) = \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} \odot \begin{pmatrix} \cos\alpha \\ \cos\alpha \end{pmatrix} + \begin{pmatrix} -x_2 \\ x_1 \end{pmatrix} \odot \begin{pmatrix} \sin\alpha \\ \sin\alpha \end{pmatrix} = ( x 1 x 2 ) ⊙ ( cos α cos α ) + ( − x 2 x 1 ) ⊙ ( sin α sin α )
推广到 d d d 维,实际实现只需两次逐元素乘法(Hadamard product) + 一次加法 :
R Θ , m d x = x ⊙ cos ( m Θ ) + rotate_half ( x ) ⊙ sin ( m Θ ) R^d_{\Theta,m}\; x = x \odot \cos(m\Theta) + \text{rotate\_half}(x) \odot \sin(m\Theta) R Θ , m d x = x ⊙ cos ( m Θ ) + rotate_half ( x ) ⊙ sin ( m Θ )
其中 rotate_half \text{rotate\_half} rotate_half 将相邻维度对交换并取负:
( x 1 , x 2 , x 3 , x 4 , … ) → rotate_half ( − x 2 , x 1 , − x 4 , x 3 , … ) (x_1, x_2, x_3, x_4, \dots) \xrightarrow{\text{rotate\_half}} (-x_2, x_1, -x_4, x_3, \dots) ( x 1 , x 2 , x 3 , x 4 , … ) rotate_half ( − x 2 , x 1 , − x 4 , x 3 , … )
计算开销极低,与维度 d d d 线性相关,不引入任何可学习参数。
长距离衰减
RoPE 下的注意力内积可以用复数形式写成:
q m ⊤ k n = Re [ ∑ i = 0 d / 2 − 1 h i ⋅ e i ( m − n ) θ i ] q_m^\top k_n = \text{Re}\left[\sum_{i=0}^{d/2-1} h_i \cdot e^{i(m-n)\theta_i}\right] q m ⊤ k n = Re [ ∑ i = 0 d /2 − 1 h i ⋅ e i ( m − n ) θ i ]
其中 h i = q [ 2 i : 2 i + 1 ] ⋅ k [ 2 i : 2 i + 1 ] ∗ h_i = q_{[2i:2i+1]} \cdot k^*_{[2i:2i+1]} h i = q [ 2 i : 2 i + 1 ] ⋅ k [ 2 i : 2 i + 1 ] ∗ 是第 i i i 个子空间的”局部内积”。
通过 Abel 求和变换 可以证明:在频率 θ i = 10000 − 2 i / d \theta_i = 10000^{-2i/d} θ i = 1000 0 − 2 i / d 下,上式的幅度随 ∣ m − n ∣ |m - n| ∣ m − n ∣ 增大而单调衰减 。
直觉上:当 ∣ m − n ∣ |m - n| ∣ m − n ∣ 增大时,各子空间的旋转因子 e i ( m − n ) θ i e^{i(m-n)\theta_i} e i ( m − n ) θ i 的相位越来越分散,相消干涉使得求和值趋近于零。这意味着 RoPE 隐含了一种”近处关注多、远处关注少”的归纳偏置。
与原始正弦编码的对比
正弦位置编码 RoPE 作用方式 加法 :x + p x + p x + p 乘法(旋转) :R m ⋅ W x R_m \cdot Wx R m ⋅ W x 作用对象 输入 embedding Q 和 K 向量 相对位置 隐含但不干净(有交叉项) 严格只依赖相对位置 频率参数 θ i = 10000 − 2 i / d \theta_i = 10000^{-2i/d} θ i = 1000 0 − 2 i / d 相同 保范数 否 是(正交变换)
加法编码的问题具体展开:( x + p ) ⊤ ( x ′ + p ′ ) = x ⊤ x ′ + x ⊤ p ′ + p ⊤ x ′ + p ⊤ p ′ (x+p)^\top(x'+p') = x^\top x' + x^\top p' + p^\top x' + p^\top p' ( x + p ) ⊤ ( x ′ + p ′ ) = x ⊤ x ′ + x ⊤ p ′ + p ⊤ x ′ + p ⊤ p ′ 。其中 x ⊤ p ′ x^\top p' x ⊤ p ′ 和 p ⊤ x ′ p^\top x' p ⊤ x ′ 是词向量和”错位”位置编码的交叉项,它们既不只依赖内容、也不只依赖位置,破坏了相对位置的干净性。
长度外推
RoPE 本身在训练长度内效果优异,但直接外推到更长序列时性能会退化——高频维度的旋转角度超出训练分布。常见的外推扩展方法:
NTK-aware Scaling :缩放频率基数(如将 10000 放大到更大的值),等效于”减速旋转”,使高频维度不至于旋转过快
YaRN :结合 NTK scaling 和注意力温度缩放
Dynamic NTK :根据实际序列长度动态调整基数
这些方法使 RoPE 能在推理时处理数倍于训练长度的序列。
相关页面
Comments