当前位置: 首页 > article >正文

旋转位置编码(RoPE)公式详细推导过程

RoPE是从Sinusoidal位置编码改进而来的,因此可先去看Sinusoidal位置编码公式推导过程,再来看本文章,会更好地理解。

旋转位置编码(RoPE)公式推导过程

参考链接

Transformer升级之路:1、Sinusoidal位置编码追根溯源

1. 前置数学公式

1.1 复数的指数形式

复数可以通过欧拉公式表示为:
z = r e i θ = r ( cos ⁡ ( θ ) + i sin ⁡ ( θ ) ) z = r e^{i\theta} = r(\cos(\theta) + i \sin(\theta)) z=reiθ=r(cos(θ)+isin(θ))
其中, r r r 是复数的模, θ \theta θ 是复数的幅角, i i i 是虚数单位。

1.2 复数的乘法

对于两个复数 z 1 = r 1 e i θ 1 z_1 = r_1 e^{i\theta_1} z1=r1eiθ1 z 2 = r 2 e i θ 2 z_2 = r_2 e^{i\theta_2} z2=r2eiθ2,它们的乘积为:
z 1 z 2 = r 1 r 2 e i ( θ 1 + θ 2 ) z_1 z_2 = r_1 r_2 e^{i(\theta_1 + \theta_2)} z1z2=r1r2ei(θ1+θ2)

1.3 复数的共轭

复数 z = r e i θ z = r e^{i\theta} z=reiθ 的共轭为:
z ∗ = r e − i θ z^* = r e^{-i\theta} z=reiθ

1.4 旋转矩阵

二维空间中的旋转矩阵 R ( θ ) R(\theta) R(θ) 用来表示一个向量绕原点旋转 θ \theta θ 角度,表示为:
R ( θ ) = ( cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ) R(\theta) = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{pmatrix} R(θ)=(cos(θ)sin(θ)sin(θ)cos(θ))

R ( θ ) R(\theta) R(θ)是由对一个二维向量$\begin{pmatrix} x \ y \end{pmatrix} 在复数平面上进行旋转 在复数平面上进行旋转 在复数平面上进行旋转\theta$角度得到的,推导过程如下:
z = ( c o s ( θ ) + i s i n ( θ ) ) ( x + y i ) = ( c o s ( θ ) x + c o s ( θ ) y i + s i n ( θ ) x i − s i n ( θ ) y ) = ( c o s ( θ ) + s i n ( θ ) i ) x + ( − s i n ( θ ) + c o s ( θ ) i ) y = ( 1 , i ) ( c o s ( θ ) x − s i n ( θ ) y s i n ( θ ) x c o s ( θ ) y ) = ( 1 , i ) ( c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ) ( x y ) \begin{aligned} z &= (cos(\theta) + i sin(\theta))(x + y i) \\ &= (cos(\theta)x + cos(\theta)y i + sin(\theta)xi - sin(\theta)y) \\ &= (cos(\theta) + sin(\theta)i)x + (-sin(\theta) + cos(\theta)i)y \\ &= (1, i) \begin{pmatrix} cos(\theta)x & -sin(\theta)y \\ sin(\theta)x & cos(\theta)y \end{pmatrix} \\ &= (1, i) \begin{pmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \end{aligned} z=(cos(θ)+isin(θ))(x+yi)=(cos(θ)x+cos(θ)yi+sin(θ)xisin(θ)y)=(cos(θ)+sin(θ)i)x+(sin(θ)+cos(θ)i)y=(1,i)(cos(θ)xsin(θ)xsin(θ)ycos(θ)y)=(1,i)(cos(θ)sin(θ)sin(θ)cos(θ))(xy)

1.5 旋转矩阵 R θ ⊤ R_{\theta}^{\top} Rθ= R − θ R_{- \theta} Rθ

旋转矩阵 R θ \mathbf{R}_\theta Rθ 是正交矩阵,满足 R θ ⊤ = R − θ \mathbf{R}_\theta^\top = \mathbf{R}_{-\theta} Rθ=Rθ 。具体推导过程如下:

  1. 正交矩阵的定义
    一个矩阵 Q \mathbf{Q} Q 是正交矩阵,如果它的转置等于它的逆,即:
    Q ⊤ = Q − 1 \mathbf{Q}^\top = \mathbf{Q}^{-1} Q=Q1
    这意味着 Q ⊤ Q = I \mathbf{Q}^\top \mathbf{Q} = \mathbf{I} QQ=I ,其中 I \mathbf{I} I 是单位矩阵。

  2. 旋转矩阵的形式
    在二维空间中,旋转矩阵 R θ \mathbf{R}_\theta Rθ 用来将一个向量逆时针旋转角度 θ \theta θ ,其形式为:
    R θ = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \mathbf{R}_\theta = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} Rθ=[cosθsinθsinθcosθ]

  3. 计算旋转矩阵的转置
    R θ ⊤ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] \mathbf{R}_\theta^\top = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix} Rθ=[cosθsinθsinθcosθ]

  4. 计算旋转矩阵的逆
    − θ -\theta θ 代入旋转矩阵的定义,得到:
    R − θ = [ cos ⁡ ( − θ ) − sin ⁡ ( − θ ) sin ⁡ ( − θ ) cos ⁡ ( − θ ) ] \mathbf{R}_{-\theta} = \begin{bmatrix} \cos(-\theta) & -\sin(-\theta) \\ \sin(-\theta) & \cos(-\theta) \end{bmatrix} Rθ=[cos(θ)sin(θ)sin(θ)cos(θ)]
    利用三角函数的性质 cos ⁡ ( − θ ) = cos ⁡ θ \cos(-\theta) = \cos\theta cos(θ)=cosθ sin ⁡ ( − θ ) = − sin ⁡ θ \sin(-\theta) = -\sin\theta sin(θ)=sinθ ,所以:
    R − θ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] \mathbf{R}_{-\theta} = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix} Rθ=[cosθsinθsinθcosθ]

  5. 比较转置和逆
    R θ ⊤ = R − θ \mathbf{R}_\theta^\top = \mathbf{R}_{-\theta} Rθ=Rθ
    这说明旋转矩阵的转置等于其逆矩阵,因此旋转矩阵是正交矩阵。


2. 推导过程

2.1 目标

我们希望通过旋转位置编码(RoPE)来将绝对位置编码转化为相对位置编码。在这个过程中,核心操作是通过旋转来使得位置编码携带相对位置信息。

2.2 假设

为了实现位置编码的相对性,我们假设有如下操作:

  • f ( q , m ) f(q, m) f(q,m) f ( k , n ) f(k, n) f(k,n) 分别是对查询向量 q q q 和键向量 k k k 的位置编码操作,目的是使得它们携带位置 m m m n n n 的信息。
  • 假设它们满足内积恒等式:
    ⟨ f ( q , m ) , f ( k , n ) ⟩ = g ( q , k , m − n ) \langle f(q, m), f(k, n) \rangle = g(q, k, m - n) f(q,m),f(k,n)⟩=g(q,k,mn)
    其中, g ( q , k , m − n ) g(q, k, m - n) g(q,k,mn) 表示一个与 m − n m - n mn 相关的函数。

2.3 复数的引入

通过复数来表示向量,我们可以将问题简化。对于复数,内积可以表示为:
⟨ q , k ⟩ = R e ( q k ∗ ) \langle q, k \rangle = \mathrm{Re}(q k^*) q,k=Re(qk)
其中, q ∗ q^* q q q q 的共轭复数。

因此,我们有:
R e ( f ( q , m ) f ∗ ( k , n ) ) = g ( q , k , m − n ) \mathrm{Re}(f(q, m) f^*(k, n)) = g(q, k, m - n) Re(f(q,m)f(k,n))=g(q,k,mn)

2.4 使用复数的指数形式

接下来,我们使用复数的指数形式来表示 f ( q , m ) f(q, m) f(q,m) f ( k , n ) f(k, n) f(k,n)
f ( q , m ) = R f ( q , m ) e i Θ f ( q , m ) , f ( k , n ) = R f ( k , n ) e i Θ f ( k , n ) , g ( q , k , m − n ) = R g ( q , k , m − n ) e i Θ g ( q , k , m − n ) f(q, m) = R_f(q, m) e^{i \Theta_f(q, m)}, \quad f(k, n) = R_f(k, n) e^{i \Theta_f(k, n)}, \quad g(q, k, m - n) = R_g(q, k, m - n) e^{i \Theta_g(q, k, m - n)} f(q,m)=Rf(q,m)eiΘf(q,m),f(k,n)=Rf(k,n)eiΘf(k,n),g(q,k,mn)=Rg(q,k,mn)eiΘg(q,k,mn)

代入方程后得到:
R f ( q , m ) R f ( k , n ) = R g ( q , k , m − n ) , Θ f ( q , m ) − Θ f ( k , n ) = Θ g ( q , k , m − n ) R_f(q, m) R_f(k, n) = R_g(q, k, m - n), \quad \Theta_f(q, m) - \Theta_f(k, n) = \Theta_g(q, k, m - n) Rf(q,m)Rf(k,n)=Rg(q,k,mn),Θf(q,m)Θf(k,n)=Θg(q,k,mn)

2.5 求解模长

为了使得内积恒等式成立,我们要求解模长部分。代入 m = n m = n m=n 后,我们得到:
R f ( q , m ) R f ( k , n ) = R g ( q , k , 0 ) = R f ( q , 0 ) R f ( k , 0 ) = ∥ q ∥ ∥ k ∥ R_f(q, m) R_f(k, n) = R_g(q, k, 0) = R_f(q, 0) R_f(k, 0) = \| q \| \| k \| Rf(q,m)Rf(k,n)=Rg(q,k,0)=Rf(q,0)Rf(k,0)=q∥∥k
所以我们可以设定:
R f ( q , m ) = ∥ q ∥ , R f ( k , n ) = ∥ k ∥ R_f(q, m) = \| q \|, \quad R_f(k, n) = \| k \| Rf(q,m)=q,Rf(k,n)=k
即它们的模长不依赖于 m m m n n n

2.6 求解角度

接下来,我们求解角度部分。代入 m = n m = n m=n 后得到:
Θ f ( q , m ) − Θ f ( k , m ) = Θ g ( q , k , 0 ) = Θ f ( q , 0 ) − Θ f ( k , 0 ) = Θ ( q ) − Θ ( k ) \Theta_f(q, m) - \Theta_f(k, m) = \Theta_g(q, k, 0) = \Theta_f(q, 0) - \Theta_f(k, 0) = \Theta(q) - \Theta(k) Θf(q,m)Θf(k,m)=Θg(q,k,0)=Θf(q,0)Θf(k,0)=Θ(q)Θ(k)
其中, Θ ( q ) Θ(q) Θ(q) Θ ( k ) Θ(k) Θ(k) q q q k k k 本身的幅角。由此,我们得到:
Θ f ( q , m ) − Θ ( q ) = Θ f ( k , m ) − Θ ( k ) \Theta_f(q, m) - \Theta(q) = \Theta_f(k, m) - \Theta(k) Θf(q,m)Θ(q)=Θf(k,m)Θ(k)
Θ f ( q , m ) − Θ ( q ) \Theta_f(q, m) - \Theta(q) Θf(q,m)Θ(q) 是一个只与 m m m 相关、与 q q q 无关的函数,记为 φ ( m ) φ(m) φ(m)。因此, Θ f ( q , m ) \Theta_f(q, m) Θf(q,m) 可以表示为:
Θ f ( q , m ) = Θ ( q ) + φ ( m ) \Theta_f(q, m) = \Theta(q) + \varphi(m) Θf(q,m)=Θ(q)+φ(m)

2.7 得到解

接下来,代入 n = m − 1 n = m - 1 n=m1,我们可以得到:
φ ( m ) − φ ( m − 1 ) = Θ g ( q , k , 1 ) + Θ ( k ) − Θ ( q ) \varphi(m) - \varphi(m - 1) = \Theta_g(q, k, 1) + \Theta(k) - \Theta(q) φ(m)φ(m1)=Θg(q,k,1)+Θ(k)Θ(q)
φ ( m ) { \varphi(m) } φ(m) 是等差数列,设右端为 θ θ θ,我们得到:
φ ( m ) = m θ \varphi(m) = m \theta φ(m)=mθ

2.8 二维编码形式

在二维情形下,RoPE 可以表示为:
f ( q , m ) = R f ( q , m ) e i Θ f ( q , m ) = ∥ q ∥ e i ( Θ ( q ) + m θ ) = q e i m θ f(q, m) = R_f(q, m) e^{i \Theta_f(q, m)} = \| q \| e^{i (\Theta(q) + m \theta)} = q e^{im \theta} f(q,m)=Rf(q,m)eiΘf(q,m)=qei(Θ(q)+mθ)=qeimθ

根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以我们称之为“旋转式位置编码(ROPE)”,它还可以写成矩阵形式:

f ( q , m ) = ( cos ⁡ ( m θ ) − sin ⁡ ( m θ ) sin ⁡ ( m θ ) cos ⁡ ( m θ ) ) ( q 0 q 1 ) f(q, m) = \begin{pmatrix} \cos(m\theta) & -\sin(m\theta) \\ \sin(m\theta) & \cos(m\theta) \end{pmatrix} \begin{pmatrix} q_0 \\ q_1 \end{pmatrix} f(q,m)=(cos(mθ)sin(mθ)sin(mθ)cos(mθ))(q0q1)

公式的具体推导过程,可以参考前置数学知识里 1.4 的旋转矩阵公式里的推导过程。

2.8.1 推导公式

已知向量 q \mathbf{q} q k \mathbf{k} k,且它们的位置分别为 m m m n n n

公式 ( R m q ) ⊤ ( R n k ) = q ⊤ R n − m k (\mathbf{R}_m \mathbf{q})^\top (\mathbf{R}_n \mathbf{k}) = \mathbf{q}^\top \mathbf{R}_{n-m} \mathbf{k} (Rmq)(Rnk)=qRnmk 的推导过程
  1. 展开内积
    ( R m q ) ⊤ ( R n k ) = q ⊤ R m ⊤ R n k (\mathbf{R}_m \mathbf{q})^\top (\mathbf{R}_n \mathbf{k}) = \mathbf{q}^\top \mathbf{R}_m^\top \mathbf{R}_n \mathbf{k} (Rmq)(Rnk)=qRmRnk

  2. 利用旋转矩阵的性质
    旋转矩阵 R θ \mathbf{R}_\theta Rθ 是正交矩阵,满足 R θ ⊤ = R − θ \mathbf{R}_\theta^\top = \mathbf{R}_{-\theta} Rθ=Rθ(具体证明过程可看1.6的内容)。因此:
    R m ⊤ = R − m \mathbf{R}_m^\top = \mathbf{R}_{-m} Rm=Rm

  3. 代入旋转矩阵的性质
    q ⊤ R m ⊤ R n k = q ⊤ R − m R n k \mathbf{q}^\top \mathbf{R}_m^\top \mathbf{R}_n \mathbf{k} = \mathbf{q}^\top \mathbf{R}_{-m} \mathbf{R}_n \mathbf{k} qRmRnk=qRmRnk

  4. 利用旋转矩阵的加法性质
    旋转矩阵的乘积对应角度的相加,即 R − m R n = R n − m \mathbf{R}_{-m} \mathbf{R}_n = \mathbf{R}_{n-m} RmRn=Rnm。因此:
    q ⊤ R − m R n k = q ⊤ R n − m k \mathbf{q}^\top \mathbf{R}_{-m} \mathbf{R}_n \mathbf{k} = \mathbf{q}^\top \mathbf{R}_{n-m} \mathbf{k} qRmRnk=qRnmk

最终得到:
( R m q ) ⊤ ( R n k ) = q ⊤ R n − m k (\mathbf{R}_m \mathbf{q})^\top (\mathbf{R}_n \mathbf{k}) = \mathbf{q}^\top \mathbf{R}_{n-m} \mathbf{k} (Rmq)(Rnk)=qRnmk

解释
  • 旋转矩阵的正交性:旋转矩阵 R θ \mathbf{R}_\theta Rθ 是正交矩阵,满足 R θ ⊤ R θ = I \mathbf{R}_\theta^\top \mathbf{R}_\theta = \mathbf{I} RθRθ=I,因此 R θ ⊤ = R − θ \mathbf{R}_\theta^\top = \mathbf{R}_{-\theta} Rθ=Rθ
  • 旋转矩阵的加法性质:旋转矩阵的乘积对应角度的相加,即 R θ R ϕ = R θ + ϕ \mathbf{R}_\theta \mathbf{R}_\phi = \mathbf{R}_{\theta+\phi} RθRϕ=Rθ+ϕ

这些性质在推导过程中起到了关键作用,使得我们可以将旋转矩阵的乘积简化为一个单一的旋转矩阵。

公式 R m q ⋅ R n k = q ⋅ k ⋅ cos ⁡ ( ( m − n ) θ ) \mathbf{\mathbf{R}_m \mathbf{q} \cdot \mathbf{R}_n \mathbf{k} = \mathbf{q} \cdot \mathbf{k} \cdot \cos((m - n)\theta)} RmqRnk=qkcos((mn)θ) 的推导过程

利用内积的几何意义

  • 旋转矩阵保持向量的长度不变,即 ∥ R m q ∥ = ∥ q ∥ \|\mathbf{R}_m \mathbf{q}\| = \|\mathbf{q}\| Rmq=q ∥ R n k ∥ = ∥ k ∥ \|\mathbf{R}_n \mathbf{k}\| = \|\mathbf{k}\| Rnk=k

  • 旋转后的向量内积可以表示为:
    R m q ⋅ R n k = ∥ R m q ∥ ∥ R n k ∥ cos ⁡ ( ( m − n ) θ ) = ∥ q ∥ ∥ k ∥ cos ⁡ ( ( m − n ) θ ) \mathbf{R}_m \mathbf{q} \cdot \mathbf{R}_n \mathbf{k} = \|\mathbf{R}_m \mathbf{q}\| \|\mathbf{R}_n \mathbf{k}\| \cos((m - n)\theta) = \|\mathbf{q}\| \|\mathbf{k}\| \cos((m - n)\theta) RmqRnk=Rmq∥∥Rnkcos((mn)θ)=q∥∥kcos((mn)θ)

  • 由于 q ⋅ k = ∥ q ∥ ∥ k ∥ cos ⁡ α \mathbf{q} \cdot \mathbf{k} = \|\mathbf{q}\| \|\mathbf{k}\| \cos \alpha qk=q∥∥kcosα ,其中 α \alpha α q \mathbf{q} q k \mathbf{k} k 之间的夹角,所以:
    R m q ⋅ R n k = ( q ⋅ k ) ⋅ cos ⁡ ( ( m − n ) θ ) \mathbf{R}_m \mathbf{q} \cdot \mathbf{R}_n \mathbf{k} = (\mathbf{q} \cdot \mathbf{k}) \cdot \cos((m - n)\theta) RmqRnk=(qk)cos((mn)θ)

  • 某些情况下上式也可化简为:
    R m q ⋅ R n k = ( q ⋅ k ) ⋅ cos ⁡ ( θ ) \mathbf{R}_m \mathbf{q} \cdot \mathbf{R}_n \mathbf{k} = (\mathbf{q} \cdot \mathbf{k}) \cdot \cos(\theta) RmqRnk=(qk)cos(θ)

2.9 跟Sinusoidal公式比较

Sinusoidal的复数形式的公式如下:
p m = x + y i p_m = x + y i pm=x+yi
以向量形式表示为
p m = ( x y ) p_m = \begin{pmatrix} x \\ y \end{pmatrix} pm=(xy)
跟 RoPE 的公式比较可以看出来,RoPE 多了旋转操作,也就是左边多乘了 cos ⁡ ( m θ ) + i sin ⁡ ( m θ ) \cos(m \theta) + i\sin(m \theta) cos(mθ)+isin(mθ),因此 RoPE 在左边多了个旋转矩阵

2.10 多维情况

由于内积满足线性叠加性,因此任意偶数维的RoPE,我们都可以表示为二维情形的拼接,即:

R m = ( cos ⁡ ( m θ 0 ) − sin ⁡ ( m θ 0 ) 0 0 ⋯ 0 0 sin ⁡ ( m θ 0 ) cos ⁡ ( m θ 0 ) 0 0 ⋯ 0 0 0 0 cos ⁡ ( m θ 1 ) − sin ⁡ ( m θ 1 ) ⋯ 0 0 0 0 sin ⁡ ( m θ 1 ) cos ⁡ ( m θ 1 ) ⋯ 0 0 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 0 0 ⋯ cos ⁡ ( m θ d 2 − 1 ) − sin ⁡ ( m θ d 2 − 1 ) 0 0 0 0 ⋯ sin ⁡ ( m θ d 2 − 1 ) cos ⁡ ( m θ d 2 − 1 ) ) R_m = \begin{pmatrix} \cos(m\theta_0) & -\sin(m\theta_0) & 0 & 0 & \cdots & 0 & 0 \\ \sin(m\theta_0) & \cos(m\theta_0) & 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & \cos(m\theta_1) & -\sin(m\theta_1) & \cdots & 0 & 0 \\ 0 & 0 & \sin(m\theta_1) & \cos(m\theta_1) & \cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & 0 & \cdots & \cos(m\theta_{\frac{d}{2} - 1}) & -\sin(m\theta_{\frac{d}{2} - 1}) \\ 0 & 0 & 0 & 0 & \cdots & \sin(m\theta_{\frac{d}{2} - 1}) & \cos(m\theta_{\frac{d}{2} - 1}) \\ \end{pmatrix} Rm= cos(mθ0)sin(mθ0)0000sin(mθ0)cos(mθ0)000000cos(mθ1)sin(mθ1)0000sin(mθ1)cos(mθ1)000000cos(mθ2d1)sin(mθ2d1)0000sin(mθ2d1)cos(mθ2d1)

R m ( q 0 q 1 q 2 q 3 ⋮ q d − 2 q d − 1 ) R_m \begin{pmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1} \end{pmatrix} Rm q0q1q2q3qd2qd1

也就是说,给位置为 m m m的向量 q q q乘上矩阵 R m R_m Rm、位置为 n n n的向量 k k k乘上矩阵 R n R_n Rn,用变换后的 Q Q Q K K K序列做Attention,那么Attention就自动包含相对位置信息了,因为成立恒等式:

( R m q ) ⊤ ( R n k ) = q ⊤ R m ⊤ R n k = q ⊤ R m − n k (R_m q)^\top (R_n k) = q^\top R_m^\top R_n k = q^\top R_{m-n} k (Rmq)(Rnk)=qRmRnk=qRmnk

值得指出的是, R m R_m Rm是一个正交矩阵,它不会改变向量的模长,因此通常来说它不会改变原模型的稳定性。

由于 R m R_m Rm的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过下述方式来实现RoPE:

( q 0 q 1 q 2 q 3 ⋮ q d − 2 q d − 1 ) ⊙ ( cos ⁡ ( m θ 0 ) cos ⁡ ( m θ 0 ) cos ⁡ ( m θ 1 ) cos ⁡ ( m θ 1 ) ⋮ cos ⁡ ( m θ d 2 − 1 ) cos ⁡ ( m θ d 2 − 1 ) ) + ( − q 1 q 0 − q 3 q 2 ⋮ − q d − 1 q d − 2 ) ⊙ ( sin ⁡ ( m θ 0 ) sin ⁡ ( m θ 0 ) sin ⁡ ( m θ 1 ) sin ⁡ ( m θ 1 ) ⋮ sin ⁡ ( m θ d 2 − 1 ) sin ⁡ ( m θ d 2 − 1 ) ) \begin{pmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1} \end{pmatrix} \odot \begin{pmatrix} \cos(m\theta_0) \\ \cos(m\theta_0) \\ \cos(m\theta_1) \\ \cos(m\theta_1) \\ \vdots \\ \cos(m\theta_{\frac{d}{2} - 1}) \\ \cos(m\theta_{\frac{d}{2} - 1}) \end{pmatrix} + \begin{pmatrix} -q_1 \\ q_0 \\ -q_3 \\ q_2 \\ \vdots \\ -q_{d-1} \\ q_{d-2} \end{pmatrix} \odot \begin{pmatrix} \sin(m\theta_0) \\ \sin(m\theta_0) \\ \sin(m\theta_1) \\ \sin(m\theta_1) \\ \vdots \\ \sin(m\theta_{\frac{d}{2} - 1}) \\ \sin(m\theta_{\frac{d}{2} - 1}) \end{pmatrix} q0q1q2q3qd2qd1 cos(mθ0)cos(mθ0)cos(mθ1)cos(mθ1)cos(mθ2d1)cos(mθ2d1) + q1q0q3q2qd1qd2 sin(mθ0)sin(mθ0)sin(mθ1)sin(mθ1)sin(mθ2d1)sin(mθ2d1)

变量说明:

  1. q = ( q 0 q 1 q 2 q 3 ⋮ q d − 2 q d − 1 ) \mathbf{q} = \begin{pmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \\ \vdots \\ q_{d-2} \\ q_{d-1} \end{pmatrix} q= q0q1q2q3qd2qd1 :

    • 这是位置编码向量,其中 q 0 , q 1 , … , q d − 1 q_0, q_1, \ldots, q_{d-1} q0,q1,,qd1 是位置编码向量的每一个分量。
    • d d d 是位置编码的维度。通常 d d d 为偶数,且每个维度对应一个不同的频率。
    • 每个 q i q_i qi 表示一个位置编码的分量,通常由某种方法(如正弦波或余弦波)生成,表示位置在某种空间中的表示。
  2. θ i \theta_i θi:

    • 这是旋转角度,控制了在不同维度上的位置编码旋转程度。旋转角度通常通过以下公式计算:
      θ i = 1000 0 − 2 i d \theta_i = 10000^{\frac{-2i}{d}} θi=10000d2i
    • θ i \theta_i θi 控制了在每个维度上的旋转,通常在高维空间中,这种旋转带来远程位置编码的衰减效应,即随着维度的增加,远离当前位置的编码向量的内积趋近于0。
    • i i i 表示第 i i i 个旋转角度,它跟偶数维向量的第 j j j个维度的关系是 i = ⌊ j 2 ⌋ i = \left\lfloor \frac{j}{2} \right\rfloor i=2j
    • d d d 是位置编码向量的总维度。
  3. m m m:

    • m m m 是一个常数,它是输入序列里的第 m m m个位置。
  4. ⊙ \odot :

    • 这是表示逐位对应相乘的符号,也称为哈达玛积(Hadamard Product)。即两个向量中的对应元素按元素相乘。

2.10.1 乘性位置编码的变体

从这个实现也可以看到,RoPE 可以视为是乘性位置编码的变体。


3. 总结

通过复数的指数形式和旋转矩阵,我们将位置编码转化为旋转形式,从而实现了相对位置编码。通过旋转,位置之间的相对关系可以被有效地编码,并且可以在计算注意力时使用。


http://www.kler.cn/a/538912.html

相关文章:

  • Photoshop自定义键盘快捷键
  • 深度学习-语音转文字
  • 蓝耘智算平台与DeepSeek R1模型:推动深度学习发展
  • 元宇宙中的隐私与数据保护:Facebook 的挑战与机遇
  • 07苍穹外卖之redis缓存商品、购物车(redis案例缓存实现)
  • 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)
  • RocketMQ实战—8.营销系统业务和方案介绍
  • qt widget和qml界面集成到一起
  • 现代神经网络QA(LeNet/AlexNet/VGG/NiN/GooleNet/ResNet)-----一篇搞懂
  • Apache Commons Lang学习大纲
  • Windows逆向工程入门之高级语言与汇编语言
  • 【vscode+latex】实现overleaf本地高效编译
  • 51单片机俄罗斯方块清屏函数
  • “可通过HTTP获取远端WWW服务信息”漏洞修复
  • day44 QT核心机制
  • 前端知识速记--JS篇:闭包
  • 问deepseek自动驾驶 模块化or端到端?
  • keil5显示[NO J-link found]解决办法——【J-LINK】驱动下载安装教程
  • 气体控制器联动风机,检测到环境出现异常时自动打开风机进行排风;
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_max_sockets
  • 基于自然语言处理的客服情感分析系统分析报告
  • 全面理解-返回值优化 RVO/NRVO
  • 51单片机俄罗斯方块开机显示界面
  • 荣誉|奇点云获评晶科能源“2024最佳大数据服务商”并受邀演讲
  • deepin V25 中更换软件源
  • excel合并表格