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

旋转位置编码(RoPE)--结合公式与示例

2.1.1. 核心思想

旋转位置编码(Rotary Position Embedding, RoPE)的核心思想是:通过绝对位置编码的方式,在注意力机制中实现相对位置依赖

它认为,两个token之间的注意力权重应该只依赖于它们之间的相对距离(m-n),而不是它们的绝对位置(mn)。RoPE通过在复数空间旋转查询(Query)和键(Key)向量来巧妙地实现这一点。

2.1.2. 数学模型:从复数到向量

RoPE的灵感来源于复数乘法的几何意义。

第一步:复数的旋转

考虑一个复数 c=a+bic = a + bic=a+bi,它可以用向量 (a,b)(a, b)(a,b) 表示。用极坐标表示则为 reiθre^{i\theta}reiθ,其中 rrr 是模长,θ\thetaθ 是角度。
用一个模长为1的复数 eiϕ=cos⁡ϕ+isin⁡ϕe^{i\phi} = \cos\phi + i\sin\phieiϕ=cosϕ+isinϕ 去乘 ccc,结果为:
c′=reiθ⋅eiϕ=rei(θ+ϕ)c' = re^{i\theta} \cdot e^{i\phi} = re^{i(\theta + \phi)}c=reiθeiϕ=rei(θ+ϕ)
这相当于将表示 ccc 的向量逆时针旋转了 ϕ\phiϕ 角度,其模长 rrr 保持不变。

第二步:将向量视为复数

对于一个 ddd 维的查询或键向量 q\mathbf{q}q(假设 ddd 是偶数),我们可以将其每两个分量看作一个复数
例如:q=[q0,q1,q2,q3,...,qd−2,qd−1]\mathbf{q} = [q_0, q_1, q_2, q_3, ..., q_{d-2}, q_{d-1}]q=[q0,q1,q2,q3,...,qd2,qd1]
可以分组为:[q0+iq1,q2+iq3,...,qd−2+iqd−1][q_0 + iq_1, q_2 + iq_3, ..., q_{d-2} + iq_{d-1}][q0+iq1,q2+iq3,...,qd2+iqd1]

第三步:对每个“复数”进行旋转

对于在位置 mmm 的 token,其查询向量 qm\mathbf{q}_mqm 的第 2i2i2i2i+12i+12i+1 分量组成的复数,会被旋转一个角度 mθim\theta_imθi。这里的 θi\theta_iθi 是一个预先设定好的角度,通常按频率递减的方式设置(类似于Transformer中的正弦位置编码):
θi=10000−2i/d\theta_i = 10000^{-2i/d}θi=100002i/d

旋转操作(公式)
对于查询向量 q\mathbf{q}q 在位置 mmm,旋转后的向量 q~m\tilde{\mathbf{q}}_mq~m 的分量为:
q~m,2i=qm,2icos⁡(mθi)−qm,2i+1sin⁡(mθi)q~m,2i+1=qm,2i+1cos⁡(mθi)+qm,2isin⁡(mθi) \begin{aligned} \tilde{q}_{m, 2i} &= q_{m, 2i} \cos(m\theta_i) - q_{m, 2i+1} \sin(m\theta_i) \\ \tilde{q}_{m, 2i+1} &= q_{m, 2i+1} \cos(m\theta_i) + q_{m, 2i} \sin(m\theta_i) \end{aligned} q~m,2iq~m,2i+1=qm,2icos(mθi)qm,2i+1sin(mθi)=qm,2i+1cos(mθi)+qm,2isin(mθi)

详细解释这个旋转公式的计算过程,并通过具体例子说明。

举例说明

对第三步公式的理解

1. 公式理解:复数旋转的几何意义

这个公式来源于复数乘法的几何意义。将一对分量 (q2i,q2i+1)(q_{2i}, q_{2i+1})(q2i,q2i+1) 看作一个复数: z=q2i+i⋅q2i+1z = q_{2i} + i \cdot q_{2i+1}z=q2i+iq2i+1

用旋转因子 eimθi=cos⁡(mθi)+isin⁡(mθi)e^{im\theta_i} = \cos(m\theta_i) + i \sin(m\theta_i)eimθi=cos(mθi)+isin(mθi) 乘以这个复数:
z′=z⋅eimθi=(q2i+i⋅q2i+1)⋅(cos⁡(mθi)+isin⁡(mθi))=q2icos⁡(mθi)+iq2isin⁡(mθi)+iq2i+1cos⁡(mθi)+i2q2i+1sin⁡(mθi)=[q2icos⁡(mθi)−q2i+1sin⁡(mθi)]+i[q2isin⁡(mθi)+q2i+1cos⁡(mθi)] \begin{aligned} z' &= z \cdot e^{im\theta_i} \\ &= (q_{2i} + i \cdot q_{2i+1}) \cdot (\cos(m\theta_i) + i \sin(m\theta_i)) \\ &= q_{2i}\cos(m\theta_i) + i q_{2i}\sin(m\theta_i) + i q_{2i+1}\cos(m\theta_i) + i^2 q_{2i+1}\sin(m\theta_i) \\ &= [q_{2i}\cos(m\theta_i) - q_{2i+1}\sin(m\theta_i)] + i [q_{2i}\sin(m\theta_i) + q_{2i+1}\cos(m\theta_i)] \end{aligned} z=zeimθi=(q2i+iq2i+1)(cos(mθi)+isin(mθi))=q2icos(mθi)+iq2isin(mθi)+iq2i+1cos(mθi)+i2q2i+1sin(mθi)=[q2icos(mθi)q2i+1sin(mθi)]+i[q2isin(mθi)+q2i+1cos(mθi)]

实部对应 q~m,2i\tilde{q}_{m, 2i}q~m,2i,虚部对应 q~m,2i+1\tilde{q}_{m, 2i+1}q~m,2i+1

2. 具体计算示例

假设条件:

  • 位置 m=3m = 3m=3
  • 角度 θi=0.8\theta_i = 0.8θi=0.8 (为简化计算)
  • 原始向量分量:q2i=2.0q_{2i} = 2.0q2i=2.0, q2i+1=1.0q_{2i+1} = 1.0q2i+1=1.0

计算步骤:

步骤1:计算旋转角度 mθi=3×0.8=2.4 弧度m\theta_i = 3 \times 0.8 = 2.4 \text{ 弧度}mθi=3×0.8=2.4 弧度

步骤2:计算三角函数值 cos⁡(2.4)≈−0.7374\cos(2.4) \approx -0.7374cos(2.4)0.7374 sin⁡(2.4)≈0.6755\sin(2.4) \approx 0.6755sin(2.4)0.6755

步骤3:计算旋转后的分量 q~m,2i=qm,2icos⁡(mθi)−qm,2i+1sin⁡(mθi)=2.0×(−0.7374)−1.0×0.6755=−1.4748−0.6755=−2.1503 \begin{aligned} \tilde{q}_{m, 2i} &= q_{m, 2i} \cos(m\theta_i) - q_{m, 2i+1} \sin(m\theta_i) \\ &= 2.0 \times (-0.7374) - 1.0 \times 0.6755 \\ &= -1.4748 - 0.6755 = -2.1503 \end{aligned} q~m,2i=qm,2icos(mθi)qm,2i+1sin(mθi)=2.0×(0.7374)1.0×0.6755=1.47480.6755=2.1503

q~m,2i+1=qm,2i+1cos⁡(mθi)+qm,2isin⁡(mθi)=1.0×(−0.7374)+2.0×0.6755=−0.7374+1.3510=0.6136 \begin{aligned} \tilde{q}_{m, 2i+1} &= q_{m, 2i+1} \cos(m\theta_i) + q_{m, 2i} \sin(m\theta_i) \\ &= 1.0 \times (-0.7374) + 2.0 \times 0.6755 \\ &= -0.7374 + 1.3510 = 0.6136 \end{aligned} q~m,2i+1=qm,2i+1cos(mθi)+qm,2isin(mθi)=1.0×(0.7374)+2.0×0.6755=0.7374+1.3510=0.6136

3. 几何解释可视化

原始向量:(2.0,1.0)(2.0, 1.0)(2.0,1.0) 旋转后向量:(−2.1503,0.6136)(-2.1503, 0.6136)(2.1503,0.6136)

验证模长保持不变:

  • 原始模长:2.02+1.02=4+1=5≈2.236\sqrt{2.0^2 + 1.0^2} = \sqrt{4 + 1} = \sqrt{5} \approx 2.2362.02+1.02=4+1=52.236
  • 旋转后模长:(−2.1503)2+0.61362=4.624+0.376=5≈2.236\sqrt{(-2.1503)^2 + 0.6136^2} = \sqrt{4.624 + 0.376} = \sqrt{5} \approx 2.236(2.1503)2+0.61362=4.624+0.376=52.236

旋转角度: 2.4弧度 ≈ 137.5°

4. 完整向量示例

假设有4维向量 q3=[2.0,1.0,−1.0,0.5]\mathbf{q}_3 = [2.0, 1.0, -1.0, 0.5]q3=[2.0,1.0,1.0,0.5]θ0=0.8\theta_0 = 0.8θ0=0.8,
θ1=0.4\theta_1 = 0.4θ1=0.4

第一组 (i=0i=0i=0): mθ0=3×0.8=2.4m\theta_0 = 3 \times 0.8 = 2.4mθ0=3×0.8=2.4 cos⁡(2.4)≈−0.7374,sin⁡(2.4)≈0.6755\cos(2.4) \approx -0.7374, \sin(2.4) \approx 0.6755cos(2.4)0.7374,sin(2.4)0.6755

q~3,0=2.0×(−0.7374)−1.0×0.6755=−2.1503q~3,1=1.0×(−0.7374)+2.0×0.6755=0.6136 \begin{aligned} \tilde{q}_{3, 0} &= 2.0 \times (-0.7374) - 1.0 \times 0.6755 = -2.1503 \\ \tilde{q}_{3, 1} &= 1.0 \times (-0.7374) + 2.0 \times 0.6755 = 0.6136 \end{aligned} q~3,0q~3,1=2.0×(0.7374)1.0×0.6755=2.1503=1.0×(0.7374)+2.0×0.6755=0.6136

第二组 (i=1i=1i=1): mθ1=3×0.4=1.2m\theta_1 = 3 \times 0.4 = 1.2mθ1=3×0.4=1.2 cos⁡(1.2)≈0.3624,sin⁡(1.2)≈0.9320\cos(1.2) \approx 0.3624, \sin(1.2) \approx 0.9320cos(1.2)0.3624,sin(1.2)0.9320

q~3,2=−1.0×0.3624−0.5×0.9320=−0.3624−0.4660=−0.8284q~3,3=0.5×0.3624+(−1.0)×0.9320=0.1812−0.9320=−0.7508 \begin{aligned} \tilde{q}_{3, 2} &= -1.0 \times 0.3624 - 0.5 \times 0.9320 = -0.3624 - 0.4660 = -0.8284 \\ \tilde{q}_{3, 3} &= 0.5 \times 0.3624 + (-1.0) \times 0.9320 = 0.1812 - 0.9320 = -0.7508 \end{aligned} q~3,2q~3,3=1.0×0.36240.5×0.9320=0.36240.4660=0.8284=0.5×0.3624+(1.0)×0.9320=0.18120.9320=0.7508

最终旋转后向量: q~3=[−2.1503,0.6136,−0.8284,−0.7508]\tilde{\mathbf{q}}_3 = [-2.1503, 0.6136, -0.8284, -0.7508]q~3=[2.1503,0.6136,0.8284,0.7508]

5. 关键特点

  1. 保持模长:旋转操作不改变向量的长度
  2. 线性操作:可以表示为矩阵乘法
  3. 位置编码:不同位置有不同的旋转角度
  4. 相对位置:注意力计算时会出现相对位置项 (m−n)θi(m-n)\theta_i(mn)θi

这种设计使得模型能够自然地理解token之间的相对位置关系,是现代Transformer架构中非常重要的创新。

上述符号举例解释:

在公式中的下标表示:

  • qm\mathbf{q}_mqm:表示在位置 mmm 的查询向量
  • qm,2iq_{m, 2i}qm,2i:表示位置 mmm 的查询向量的2i2i2i 个分量

所以:

  • m=3m = 3m=3:这是token的位置索引(第3个位置)
  • qm,2i=2.0q_{m, 2i} = 2.0qm,2i=2.0:这是位置3的查询向量的2i2i2i 个分量的数值(具体数值)

让我用更清晰的符号重新表述:

假设条件:

  • Token位于位置 m=3m = 3m=3
  • 考虑向量中的第 iii 组复数(比如 i=0i=0i=0,即第一组)
  • 这组分量的值为:q3,0=2.0q_{3,0} = 2.0q3,0=2.0(第0个分量),q3,1=1.0q_{3,1} = 1.0q3,1=1.0(第1个分量)
  • 旋转角度参数:θ0=0.8\theta_0 = 0.8θ0=0.8

计算过程: 旋转角度=m×θ0=3×0.8=2.4 弧度cos⁡(2.4)≈−0.7374sin⁡(2.4)≈0.6755q~3,0=q3,0⋅cos⁡(2.4)−q3,1⋅sin⁡(2.4)=2.0×(−0.7374)−1.0×0.6755=−1.4748−0.6755=−2.1503q~3,1=q3,1⋅cos⁡(2.4)+q3,0⋅sin⁡(2.4)=1.0×(−0.7374)+2.0×0.6755=−0.7374+1.3510=0.6136 \begin{aligned} \text{旋转角度} &= m \times \theta_0 = 3 \times 0.8 = 2.4 \text{ 弧度} \\ \cos(2.4) &\approx -0.7374 \\ \sin(2.4) &\approx 0.6755 \\ \\ \tilde{q}_{3,0} &= q_{3,0} \cdot \cos(2.4) - q_{3,1} \cdot \sin(2.4) \\ &= 2.0 \times (-0.7374) - 1.0 \times 0.6755 \\ &= -1.4748 - 0.6755 = -2.1503 \\ \\ \tilde{q}_{3,1} &= q_{3,1} \cdot \cos(2.4) + q_{3,0} \cdot \sin(2.4) \\ &= 1.0 \times (-0.7374) + 2.0 \times 0.6755 \\ &= -0.7374 + 1.3510 = 0.6136 \end{aligned} 旋转角度cos(2.4)sin(2.4)q~3,0q~3,1=m×θ0=3×0.8=2.4 弧度0.73740.6755=q3,0cos(2.4)q3,1sin(2.4)=2.0×(0.7374)1.0×0.6755=1.47480.6755=2.1503=q3,1cos(2.4)+q3,0sin(2.4)=1.0×(0.7374)+2.0×0.6755=0.7374+1.3510=0.6136

总结符号含义:

  • 下标 mmm:位置索引(哪个token)
  • 下标 2i2i2i, 2i+12i+12i+1:向量中的分量索引(向量的哪个元素)
  • qm,2iq_{m,2i}qm,2i:位置 mmm 的向量的第 2i2i2i 个分量的数值

所以 q3,0=2.0q_{3,0} = 2.0q3,0=2.0 的意思是:"在位置3的查询向量中,第0个分量的值是2.0,这与 m=3m=3m=3 并不矛盾。

同样地,对于键向量 k\mathbf{k}k 在位置 nnn,旋转后的向量 k~n\tilde{\mathbf{k}}_nk~n 的分量为: k~n,2i=kn,2icos⁡(nθi)−kn,2i+1sin⁡(nθi)k~n,2i+1=kn,2i+1cos⁡(nθi)+kn,2isin⁡(nθi) \begin{aligned} \tilde{k}_{n, 2i} &= k_{n, 2i} \cos(n\theta_i) - k_{n, 2i+1} \sin(n\theta_i) \\ \tilde{k}_{n, 2i+1} &= k_{n, 2i+1} \cos (n\theta_i) + k_{n, 2i} \sin(n\theta_i) \end{aligned} k~n,2ik~n,2i+1=kn,2icos(nθi)kn,2i+1sin(nθi)=kn,2i+1cos(nθi)+kn,2isin(nθi)

第四步:矩阵形式

上面的操作可以简洁地写成一个矩阵乘法:
q~m=RΘ,mdqm \tilde{\mathbf{q}}_m = \mathbf{R}^d_{\Theta, m} \mathbf{q}_m q~m=RΘ,mdqm
其中旋转矩阵 RΘ,md\mathbf{R}^d_{\Theta, m}RΘ,md 是一个分块对角矩阵:
RΘ,md=(cos⁡mθ0−sin⁡mθ000⋯00sin⁡mθ0cos⁡mθ000⋯0000cos⁡mθ1−sin⁡mθ1⋯0000sin⁡mθ1cos⁡mθ1⋯00⋮⋮⋮⋮⋱⋮⋮0000⋯cos⁡mθd/2−1−sin⁡mθd/2−10000⋯sin⁡mθd/2−1cos⁡mθd/2−1) \mathbf{R}^d_{\Theta, 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_{d/2-1} & -\sin m\theta_{d/2-1} \\ 0 & 0 & 0 & 0 & \cdots & \sin m\theta_{d/2-1} & \cos m\theta_{d/2-1} \\ \end{pmatrix} RΘ,md=cosmθ0sinmθ00000sinmθ0cosmθ0000000cosmθ1sinmθ10000sinmθ1cosmθ1000000cosmθd/21sinmθd/210000sinmθd/21cosmθd/21

键向量的旋转矩阵 RΘ,nd\mathbf{R}^d_{\Theta, n}RΘ,nd 形式完全相同。

2.1.3. 关键特性:相对位置的显现

RoPE最巧妙的地方在于,计算注意力分数时,位置信息会以相对距离的形式体现。

注意力分数 am,na_{m,n}am,n 由旋转后的查询和键向量计算:
am,n=⟨q~m,k~n⟩=(RΘ,mdqm)T(RΘ,ndkn)=qmT(RΘ,md)TRΘ,ndkn \begin{aligned} a_{m,n} &= \langle \tilde{\mathbf{q}}_m, \tilde{\mathbf{k}}_n \rangle \\ &= (\mathbf{R}^d_{\Theta, m} \mathbf{q}_m)^T (\mathbf{R}^d_{\Theta, n} \mathbf{k}_n) \\ &= \mathbf{q}_m^T (\mathbf{R}^d_{\Theta, m})^T \mathbf{R}^d_{\Theta, n} \mathbf{k}_n \end{aligned} am,n=q~m,k~n=(RΘ,mdqm)T(RΘ,ndkn)=qmT(RΘ,md)TRΘ,ndkn

由于旋转矩阵是正交矩阵RTR=I\mathbf{R}^T\mathbf{R} = \mathbf{I}RTR=I),并且满足 (RΘ,md)TRΘ,nd=RΘ,n−md(\mathbf{R}^d_{\Theta, m})^T \mathbf{R}^d_{\Theta, n} = \mathbf{R}^d_{\Theta, n-m}(RΘ,md)TRΘ,nd=RΘ,nmd,上式可继续化简:
am,n=qmTRΘ,n−mdkn a_{m,n} = \mathbf{q}_m^T \mathbf{R}^d_{\Theta, n-m} \mathbf{k}_n am,n=qmTRΘ,nmdkn

最终结果只依赖于相对位置 (n−m)(n-m)(nm) 这意味着,无论两个token的绝对位置 mmmnnn 在哪里,只要它们的距离 m-n 相同,它们之间的注意力分数计算方式就是一致的。这完美地捕获了相对位置信息。

2.1.4. 举例说明

假设我们的向量维度 d=4,那么我们可以将其分为2组复数。
预设基础角度:θ0=10000−0/4=1\theta_0 = 10000^{-0/4} = 1θ0=100000/4=1, θ1=10000−2/4=0.01\theta_1 = 10000^{-2/4} = 0.01θ1=100002/4=0.01 (为简化计算,此处数字为示例)

Token A 在位置 m=1,其查询向量为 q1=[q0,q1,q2,q3]\mathbf{q}_1 = [q_0, q_1, q_2, q_3]q1=[q0,q1,q2,q3]
Token B 在位置 n=3,其键向量为 k3=[k0,k1,k2,k3]\mathbf{k}_3 = [k_0, k_1, k_2, k_3]k3=[k0,k1,k2,k3]

第1组复数(对应 θ0=1\theta_0=1θ0=1)的旋转:

  • q~1,0=q0cos⁡(1∗1)−q1sin⁡(1∗1)=q0cos⁡(1)−q1sin⁡(1)\tilde{q}_{1, 0} = q_0 \cos(1*1) - q_1 \sin(1*1) = q_0 \cos(1) - q_1 \sin(1)q~1,0=q0cos(11)q1sin(11)=q0cos(1)q1sin(1)
  • q~1,1=q1cos⁡(1∗1)+q0sin⁡(1∗1)=q1cos⁡(1)+q0sin⁡(1)\tilde{q}_{1, 1} = q_1 \cos(1*1) + q_0 \sin(1*1) = q_1 \cos(1) + q_0 \sin(1)q~1,1=q1cos(11)+q0sin(11)=q1cos(1)+q0sin(1)
  • k~3,0=k0cos⁡(3∗1)−k1sin⁡(3∗1)=k0cos⁡(3)−k1sin⁡(3)\tilde{k}_{3, 0} = k_0 \cos(3*1) - k_1 \sin(3*1) = k_0 \cos(3) - k_1 \sin(3)k~3,0=k0cos(31)k1sin(31)=k0cos(3)k1sin(3)
  • k~3,1=k1cos⁡(3∗1)+k0sin⁡(3∗1)=k1cos⁡(3)+k0sin⁡(3)\tilde{k}_{3, 1} = k_1 \cos(3*1) + k_0 \sin(3*1) = k_1 \cos(3) + k_0 \sin(3)k~3,1=k1cos(31)+k0sin(31)=k1cos(3)+k0sin(3)

第2组复数(对应 θ1=0.01\theta_1=0.01θ1=0.01)的旋转:

  • q~1,2=q2cos⁡(1∗0.01)−q3sin⁡(1∗0.01)=q2cos⁡(0.01)−q3sin⁡(0.01)\tilde{q}_{1, 2} = q_2 \cos(1*0.01) - q_3 \sin(1*0.01) = q_2 \cos(0.01) - q_3 \sin(0.01)q~1,2=q2cos(10.01)q3sin(10.01)=q2cos(0.01)q3sin(0.01)
  • q~1,3=q3cos⁡(1∗0.01)+q2sin⁡(1∗0.01)=q3cos⁡(0.01)+q2sin⁡(0.01)\tilde{q}_{1, 3} = q_3 \cos(1*0.01) + q_2 \sin(1*0.01) = q_3 \cos(0.01) + q_2 \sin(0.01)q~1,3=q3cos(10.01)+q2sin(10.01)=q3cos(0.01)+q2sin(0.01)
  • k~3,2=k2cos⁡(3∗0.01)−k3sin⁡(3∗0.01)=k2cos⁡(0.03)−k3sin⁡(0.03)\tilde{k}_{3, 2} = k_2 \cos(3*0.01) - k_3 \sin(3*0.01) = k_2 \cos(0.03) - k_3 \sin(0.03)k~3,2=k2cos(30.01)k3sin(30.01)=k2cos(0.03)k3sin(0.03)
  • k~3,3=k3cos⁡(3∗0.01)+k2sin⁡(3∗0.01)=k3cos⁡(0.03)+k2sin⁡(0.03)\tilde{k}_{3, 3} = k_3 \cos(3*0.01) + k_2 \sin(3*0.01) = k_3 \cos(0.03) + k_2 \sin(0.03)k~3,3=k3cos(30.01)+k2sin(30.01)=k3cos(0.03)+k2sin(0.03)

现在计算注意力分数 a1,3a_{1,3}a1,3
a1,3=q~1,0k~3,0+q~1,1k~3,1+q~1,2k~3,2+q~1,3k~3,3 a_{1,3} = \tilde{q}_{1, 0}\tilde{k}_{3, 0} + \tilde{q}_{1, 1}\tilde{k}_{3, 1} + \tilde{q}_{1, 2}\tilde{k}_{3, 2} + \tilde{q}_{1, 3}\tilde{k}_{3, 3} a1,3=q~1,0k~3,0+q~1,1k~3,1+q~1,2k~3,2+q~1,3k~3,3

根据之前的推导,这个结果等价于用一个旋转了 (3-1)=2 弧度的矩阵去乘原始向量后再做内积,即 a1,3=⟨q1,RΘ,24k3⟩a_{1,3} = \langle \mathbf{q}_1, \mathbf{R}^4_{\Theta, 2} \mathbf{k}_3 \ranglea1,3=q1,RΘ,24k3。这个值只取决于相对位置差 2

2.1.5. 优势总结
  1. 良好的外推性:由于使用正弦函数,训练好的模型可以处理比训练序列更长的序列。
  2. 相对位置感知:注意力分数自动依赖于相对位置,提升了模型对序列结构的理解。
  3. 兼容线性注意力:旋转操作是线性的,可以融合到注意力计算中,不会增加计算复杂度。
  4. 长期衰减性:随着相对距离增大,内积值会自然衰减,符合直觉( distant token 之间的关联更小)。

正是这些优点,使得RoPE成为LLaMA、GPT-J、PaLM等众多现代大语言模型的首选位置编码方案。


文章转载自:

http://fxKTB13l.wtdyq.cn
http://H5iNNe5a.wtdyq.cn
http://eio0rDoh.wtdyq.cn
http://TGX4HSCB.wtdyq.cn
http://97J5R0nE.wtdyq.cn
http://Bh7dFDuL.wtdyq.cn
http://m6XYGFhc.wtdyq.cn
http://oW76phr6.wtdyq.cn
http://866yJqO5.wtdyq.cn
http://WmT9tFJE.wtdyq.cn
http://kEHkgcL7.wtdyq.cn
http://SWSPUt03.wtdyq.cn
http://4LKUhEg3.wtdyq.cn
http://3m1TlUd1.wtdyq.cn
http://wzRVvNBN.wtdyq.cn
http://VRy3N5fj.wtdyq.cn
http://4x4TrLgq.wtdyq.cn
http://d8Smoiz1.wtdyq.cn
http://Z1EFObHK.wtdyq.cn
http://UBzSjXSV.wtdyq.cn
http://qfxoa30C.wtdyq.cn
http://nZHG2oZB.wtdyq.cn
http://iZ46gawa.wtdyq.cn
http://o7WI6d9C.wtdyq.cn
http://gK81UceN.wtdyq.cn
http://oYheuduF.wtdyq.cn
http://Mr3VxNYL.wtdyq.cn
http://RTDYHE8D.wtdyq.cn
http://CY3fEI9a.wtdyq.cn
http://DscABPYH.wtdyq.cn
http://www.dtcms.com/a/371985.html

相关文章:

  • Python-基础 (六)
  • 1.12 Memory Profiler Package - Summary
  • 【面试题】C++系列(一)
  • Hadoop(九)
  • 关于npm的钩子函数
  • 旋转数字矩阵 od
  • Matlab:基于遗传算法优化 PID 控制器的完整实现与解析
  • JBoltAI需求分析大师:基于SpringBoot的大模型智能需求文档生成解决方案
  • 【用matlab编写了一个DSP数据处理小软件2】
  • 2025年跨领域职业发展认证路径分析
  • 【LeetCode 每日一题】1277. 统计全为 1 的正方形子矩阵
  • React 19 全面解析:颠覆性的新特性与实战指南
  • 【Java学习笔记】18.Java数据库编程 -2
  • 量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
  • HarmonyOS 应用开发深度实践:基于 Stage 模型与声明式 UI 的精髓
  • Dify工作流(三)
  • Windows 11通过VMware Workstation Pro搭建centos7.6系统遇到的问题
  • 多界面传值
  • shell编程-案例
  • Docker--宿主机和容器相互拷贝文件
  • 打包成 UMD,通过 CDN静态资源共享:微前端项目中跨项目共享公共组件的最佳实践
  • 关于物料采购合同,付款规则库的程序设计(刘欣)
  • 自然语言处理 基于神经网络的词向量转化模型word2vec
  • 【数据分析】一种用于校正微生物组数据中批次效应的多变量框架
  • Spring WebFlux响应式编程原理深度解析与性能优化实践指南
  • ZYNQ UART中断
  • SimLingo:纯视觉框架下的自动驾驶视觉 - 语言 - 动作融合模型
  • 计算机视觉(十):ROI
  • 【设计模式】UML类图关系中的数量表示(详细版)
  • 利用 SeBackupPrivilege 的最快方法