RoPE工程视角下的注意力机制流程理解

Author:张一极

2026年01月28日21:42:50

1、概述

本文从工程实现的视角,详细梳理 RoPE 的计算流程,并明确它在 Transformer 架构中带来的具体操作变化。

2、RoPE 在 Attention 机制中的位置

RoPE 与传统的绝对位置编码最大的区别在于插入位置。

几个需要理解的特点:

  1. 只旋转 Q 和 K:因为位置信息主要通过 Query 和 Key 的交互(点积)来体现。

  2. V 不旋转:Value 向量承载的是内容信息,不需要注入位置偏差。

  3. 每一层都做:RoPE 是作用在每一层 Attention 里的,而不是只在第一层。

3、RoPE 计算流程详解

假设我们有一个 Batch 的输入,其中一个序列的长度为 L,Embedding 维度为 D(这里的 D 通常指 Attention Head 的维度 head_dim)。

对于序列中的第 m 个 token,其 Query 向量为 qm。

a.向量分组

RoPE 的核心是将向量两两配对,在二维平面上旋转。 因此,首先将维度为 D 的向量 qm 视为 D/2 对二维坐标:

(2)qm=[q0,q1,q2,q3,...,qD−2,qD−1]

分组为:

(3)(q0,q1),(q2,q3),...,(qD−2,qD−1)

b.生成旋转频率

我们需要为每一组计算一个特定的旋转角度。 RoPE 定义了一组固定的频率 θi,其中 i 是分组索引 (0,1,...,D/2−1​)。

通过维度D和位置i,来计算对应位置的旋转角度。

公式为:

(4)θi=10000−2i/D

位置i与频率变化如图示:

image-20260128212351926

 

可以看出,随着位置变大,频率迅速衰减。

这意味着:向量的前几维旋转得很快,后几维旋转得很慢。这种多尺度的设计有助于模型同时捕捉长距离和短距离的依赖。

对于位置 m,实际的旋转角度是位置乘以频率,这里引入位置的核心原因就是为了最后能够得到m−n关联位置差:

(5)Anglem,i=m⋅θi

c.旋转推广

对每一组 (x,y) 应用旋转矩阵:

(6)(x′y′)=(cos⁡(mθi)−sin⁡(mθi)sin⁡(mθi)cos⁡(mθi))(xy)

展开计算得到:

(7)x′=xcos⁡(mθi)−ysin⁡(mθi)y′=xsin⁡(mθi)+ycos⁡(mθi)

d.拼接回原形状

原始向量(以 Q 或 K 为例):

(8)x=(x0,x1,x2,x3,…,xD−2,xD−1)

按 2 维一组分成:

(9)(x0,x1), (x2,x3), …, (xD−2,xD−1)

对第 i 组做旋转(下标为 2i ):

(10)x′2i=x2icos⁡(pθi)−x2i+1sin⁡(pθi)x′2i+1=x2isin⁡(pθi)+x2i+1cos⁡(pθi)

拼接结果就是:

(11)x′=(x0′,x1′,x′2,x′3,…,x′D−2,x′D−1)

即得到 RoPE(qm)。

4、总结

RoPE 没有引入额外的训练参数(只通过固定的频率*一个已知数),实现了相对位置编码的特性,且兼顾了长短距离上下文的视角。

他的核心流程大概可以总结为:

q和k分别旋转,后面才计算注意力分数。


以上