LLM WIKI · 课程精读

LEARNING UNIT · 06

RoPE:从旋转到相对位置

从欧拉公式、和差角与旋转矩阵推导 RoPE,并连接 Llama 实现、外推和平移不变性。

已整理章节
15 节
单元来源
14 条视频
总时长
41:30
状态
已发布
学习位置
6 / 20
01

主题讲解 · 02:44

从复数乘法推导 RoPE 的二维旋转

学习目标

  • 能把二维向量 (x,y)(x,y) 与复数 x+iyx+iy 对应起来。
  • 能解释为什么乘以 eiθe^{i\theta} 只改变方向、不改变模长。
  • 能从欧拉公式逐步推导二维旋转矩阵。
  • 能说明这段推导与 RoPE 的关系,以及它还没有证明哪些结论。

前置与衔接

本课只需要三项前置知识:复数的实部与虚部、欧拉公式、二维矩阵乘法。

它位于“RoPE:从旋转到相对位置”单元的入口。先把“复数乘法就是二维旋转”弄清楚,后续再讨论多维配对、不同频率、相对位置和平移不变性。

核心讲解

1. 把二维向量视为一个复数

二维向量

x=[xy]\mathbf{x}=\begin{bmatrix}x\\y\end{bmatrix}

可以对应到复平面上的复数

z=x+iy.z=x+iy.

这里实部 xx 是横坐标,虚部系数 yy 是纵坐标。

这一步没有改变信息,只是把两个实数换成一种更适合描述旋转的表示。

2. 单位复数只提供一个旋转角

欧拉公式给出

eiθ=cosθ+isinθ.e^{i\theta}=\cos\theta+i\sin\theta.

它的模长为

eiθ=cos2θ+sin2θ=1,\left|e^{i\theta}\right|=\sqrt{\cos^2\theta+\sin^2\theta}=1,

辐角为 θ\theta

因此把任意复数 zz 乘以 eiθe^{i\theta} 时,模长不变,辐角增加 θ\theta

图 1

二维向量写成复数后,乘以单位复数 e^{iθ} 可将它逆时针旋转 θ。

原视频 · 00:20 ↗

课程把它概括为:要让 x+iyx+iy 逆时针旋转 θ\theta,只需计算

z=zeiθ=(x+iy)eiθ.z'=ze^{i\theta}=(x+iy)e^{i\theta}.
图 2

复平面中的原向量与旋转后向量共享模长,夹角为 θ。

原视频 · 00:40 ↗

图中原向量与新向量长度相同,二者夹角为 θ\theta。这就是后面所有代数式应该保持的几何事实。

3. 用欧拉公式展开旋转后的坐标

eiθe^{i\theta} 展开:

z=(x+iy)(cosθ+isinθ)=xcosθ+ixsinθ+iycosθ+i2ysinθ.\begin{aligned} z' &=(x+iy)(\cos\theta+i\sin\theta)\\ &=x\cos\theta+ix\sin\theta+iy\cos\theta+i^2y\sin\theta. \end{aligned}

因为 i2=1i^2=-1,所以

z=(xcosθysinθ)+i(xsinθ+ycosθ).z'=(x\cos\theta-y\sin\theta) +i(x\sin\theta+y\cos\theta).
图 3

展开 (x+yi)(cosθ+i sinθ) 后,实部和虚部分别给出旋转后的两个坐标。

原视频 · 01:20 ↗

按实部、虚部分组,旋转后的两个坐标就是

x=xcosθysinθ,x'=x\cos\theta-y\sin\theta,
y=xsinθ+ycosθ.y'=x\sin\theta+y\cos\theta.
图 4

旋转后的二维向量为 [x cosθ-y sinθ, x sinθ+y cosθ]ᵀ。

原视频 · 01:40 ↗

一个实用的自检方法是令 θ=0\theta=0:此时 x=xx'=xy=yy'=y,说明符号至少通过了单位变换检查。

再令 θ=π/2\theta=\pi/2:此时 (x,y)(x,y) 变为 (y,x)(-y,x),确实是逆时针旋转 9090^\circ

4. 把两个坐标式收进一个矩阵

xx'yy'x,yx,y 的系数按行排列:

[xy]=[cosθsinθsinθcosθ][xy].\begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}.
图 5

二维旋转矩阵乘以 [x,y]ᵀ,恰好复现欧拉公式得到的两个分量。

原视频 · 02:20 ↗

记旋转矩阵为 R(θ)R(\theta),它满足

R(θ)TR(θ)=I,R(\theta)^TR(\theta)=I,

所以它是正交矩阵,会保持向量长度和两个向量之间的夹角。

到这里,视频已经完成它要讲的核心链条:复数乘法、欧拉展开、坐标变换、旋转矩阵其实是同一个操作的四种写法。

5. 编者补充:它为什么是 RoPE 的“旋转”部分

RoPE 会把偶数维向量按相邻的两个维度配对。对第 jj 个二维子空间,位置 mm 对应一个角度 mωjm\omega_j

xm(j)R(mωj)xm(j).\mathbf{x}^{(j)}_m \longmapsto R(m\omega_j)\mathbf{x}^{(j)}_m.

不同子空间使用不同频率 ωj\omega_j,因此同一位置会在不同二维平面上旋转不同角度。

更关键的是,query 和 key 的旋转能把绝对位置相减:

(R(mω)q)T(R(nω)k)=qTR(mω)TR(nω)k=qTR((nm)ω)k.\begin{aligned} (R(m\omega)\mathbf{q})^T(R(n\omega)\mathbf{k}) &=\mathbf{q}^TR(m\omega)^TR(n\omega)\mathbf{k}\\ &=\mathbf{q}^TR((n-m)\omega)\mathbf{k}. \end{aligned}

于是注意力内积里出现的是位置差 nmn-m

这一步是编者为学习路径补上的连接,不是本条短视频完整推导的内容。本视频只建立二维旋转矩阵;多维推广、频率设计和相对位置性质应继续看本单元后续课程。

跟练与练习

原视频练习

编者练习

不重新展开复数乘法,直接用旋转矩阵计算向量 (1,0)(1,0) 逆时针旋转 π/2\pi/2 后的结果。

查看参考答案

代入 cos(π/2)=0\cos(\pi/2)=0sin(π/2)=1\sin(\pi/2)=1
[0110][10]=[01].\begin{bmatrix}0&-1\\1&0\end{bmatrix} \begin{bmatrix}1\\0\end{bmatrix} =\begin{bmatrix}0\\1\end{bmatrix}.
结果是 (0,1)(0,1),与复平面上从正实轴转到正虚轴一致。

编者练习 2

为什么 query 和 key 都旋转相同角度时,它们的内积不变?这对 RoPE 有什么启发?

查看参考答案

因为旋转矩阵正交:
(Rq)T(Rk)=qTRTRk=qTk.(R\mathbf{q})^T(R\mathbf{k})=\mathbf{q}^TR^TR\mathbf{k}=\mathbf{q}^T\mathbf{k}.
因此共同的绝对平移不会改变二者的相对注意力关系;当角度分别由位置 m,nm,n 决定时,内积只保留角度差。

常见误区

  • 误区:ASR 中的“负数”是数学概念。纠正:结合板书和语境,这里显然是“复数”。
  • 误区:eiθe^{i\theta} 会把向量长度也放大。纠正:它的模长恒为 1,只提供旋转。
  • 误区:两个正弦项都应取正号。纠正:i2=1i^2=-1 产生了 ysinθ-y\sin\theta
  • 误区:推导出二维旋转矩阵就已经完整证明 RoPE。纠正:还需要多维配对、位置相关角度与 query-key 内积的推导。
  • 误区:旋转矩阵作用于位置编号。纠正:它作用于 query/key 的二维特征子空间,位置只决定旋转角。

本课小结

  • 二维向量与复数 x+iyx+iy 是等价表示。
  • 乘以 eiθe^{i\theta} 等价于逆时针旋转 θ\theta
  • 欧拉展开自然给出标准二维旋转矩阵。
  • RoPE 把这套旋转复制到多个二维子空间,并让角度随位置变化。
  • 下一步应学习多维配对和 RmTRn=RnmR_m^TR_n=R_{n-m} 如何产生相对位置信息。
02

主题讲解 · 03:07

从二维旋转重新推导三角函数和差角

学习目标

  • 从几何旋转解释角度为什么相加。
  • 用复数乘法推导正弦、余弦和角公式。
  • 用旋转矩阵独立复核同一结论。
  • 识别两个证明实际描述的是同一个线性变换。

前置与衔接

上一课已从欧拉公式得到二维旋转矩阵。

本课反过来使用旋转:让角度为 α\alpha 的单位向量再旋转 β\beta,直接读出和差角公式。

它也是后续证明 R(α)R(β)=R(α+β)R(\alpha)R(\beta)=R(\alpha+\beta) 的最小例子。

核心讲解

1. 先固定几何对象

单位圆上角度为 α\alpha 的向量是

vα=[cosαsinα].\mathbf v_\alpha= \begin{bmatrix} \cos\alpha\\ \sin\alpha \end{bmatrix}.

将它逆时针旋转 β\beta 后,方向角变为 α+β\alpha+\beta

图 1

二维单位向量旋转 β 后,角度从 α 变为 α+β。

原视频 · 00:20 ↗

因此输出必为

vα+β=[cos(α+β)sin(α+β)].\mathbf v_{\alpha+\beta}= \begin{bmatrix} \cos(\alpha+\beta)\\ \sin(\alpha+\beta) \end{bmatrix}.
图 2

余弦与正弦和角公式正是旋转后两个坐标的目标表达式。

原视频 · 00:40 ↗

2. 复数路径:角度在乘法中相加

把单位向量写成单位复数:

zα=eiα.z_\alpha=e^{i\alpha}.

旋转 β\beta 等价于再乘 eiβe^{i\beta}

zαeiβ=ei(α+β).z_\alpha e^{i\beta}=e^{i(\alpha+\beta)}.
图 3

把单位向量写成 e^{iα},再乘 e^{iβ},几何上得到 e^{i(α+β)}。

原视频 · 01:20 ↗

分别展开两边:

(cosα+isinα)(cosβ+isinβ)=cos(α+β)+isin(α+β).(\cos\alpha+i\sin\alpha)(\cos\beta+i\sin\beta) =\cos(\alpha+\beta)+i\sin(\alpha+\beta).

比较实部得到

cos(α+β)=cosαcosβsinαsinβ.\cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta.

比较虚部得到

sin(α+β)=sinαcosβ+cosαsinβ.\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta.

3. 矩阵路径:比较输出的两个分量

标准旋转矩阵为

R(β)=[cosβsinβsinβcosβ].R(\beta)= \begin{bmatrix} \cos\beta&-\sin\beta\\ \sin\beta&\cos\beta \end{bmatrix}.

它作用于 vα\mathbf v_\alpha

R(β)vα=[cosβcosαsinβsinαsinβcosα+cosβsinα].R(\beta)\mathbf v_\alpha= \begin{bmatrix} \cos\beta\cos\alpha-\sin\beta\sin\alpha\\ \sin\beta\cos\alpha+\cos\beta\sin\alpha \end{bmatrix}.
图 4

旋转矩阵乘以 [cosα,sinα]ᵀ 后得到两个和角分量。

原视频 · 02:00 ↗

几何上这个输出又必须等于 vα+β\mathbf v_{\alpha+\beta}

逐分量比较,便再次得到两条和角公式。

图 5

按上下分量对应,即可读出 cos(α+β) 与 sin(α+β) 的展开式。

原视频 · 02:20 ↗

4. 两条路径为何必然一致

复数乘法与二维旋转矩阵不是两种不同的旋转。

映射

x+iy[xy]x+iy\longleftrightarrow \begin{bmatrix}x\\y\end{bmatrix}

会把“乘以 eiβe^{i\beta}”准确变成“左乘 R(β)R(\beta)”。

所以两条证明只是同一个运算的复数坐标和实矩阵坐标。

跟练与练习

原视频练习

编者练习

用本课公式推导 cos(αβ)\cos(\alpha-\beta),不要重新做矩阵乘法。

查看参考答案

把和角公式中的 β\beta 换成 β-\beta
利用 cos(β)=cosβ\cos(-\beta)=\cos\betasin(β)=sinβ\sin(-\beta)=-\sin\beta,得到
cos(αβ)=cosαcosβ+sinαsinβ.\cos(\alpha-\beta)=\cos\alpha\cos\beta+\sin\alpha\sin\beta.

常见误区

  • 旋转 β\beta 后不是把两个坐标分别加 β\beta,而是方向角增加 β\beta
  • 余弦公式中的负号来自 i2=1i^2=-1,也来自旋转矩阵右上角的负号。
  • 两条证明互相印证,但并不是相互独立的两个物理机制。
  • 向量必须按列向量约定左乘;若改用行向量,矩阵需要转置。

本课小结

  • 单位向量的坐标天然是 (cosα,sinα)(\cos\alpha,\sin\alpha)
  • 连续旋转让角度相加。
  • 比较复数实虚部或矩阵上下分量,都能得到和角公式。
  • 这组恒等式正是 RoPE 旋转合成性质的二维基础。
03

主题讲解 · 03:04

把 RoPE 从二维铺到任意偶数维

学习目标

  • 解释高维 RoPE 为什么以二维坐标对为基本单元。
  • 写出四维及一般偶数维的块对角旋转。
  • 区分一般高维旋转与 RoPE 选用的受限构造。
  • 准确说明奇数维 rotary 子空间的处理边界。

前置与衔接

前两课已经建立二维旋转矩阵与角度合成。

实际 attention head 往往有几十或上百维,本课解决如何把二维结构复制到高维。

核心讲解

1. 二维是不可再分的旋转单元

对坐标 (x0,x1)(x_0,x_1),旋转写成

[x0x1]=R(θ0)[x0x1].\begin{bmatrix}x'_0\\x'_1\end{bmatrix} =R(\theta_0) \begin{bmatrix}x_0\\x_1\end{bmatrix}.
图 1

RoPE 的基本单元是作用于两个坐标的二维旋转。

原视频 · 00:20 ↗

二维平面只需一个角度就能描述绕原点旋转。

2. 不直接使用一般四维旋转

一般四维旋转可以同时混合更多坐标平面,参数自由度也更多。

图 2

若直接构造一般四维旋转,会引入比 RoPE 所需更多的旋转自由度。

原视频 · 01:00 ↗

RoPE 的目标不是穷尽所有高维正交变换。

它需要一种结构简单、频率可控、易于逐元素计算的表示。

因此采用更受限的“两两配对”。

3. 四维向量拆成两个二维平面

x=(x0,x1,x2,x3)T.\mathbf x=(x_0,x_1,x_2,x_3)^T.

(x0,x1)(x_0,x_1) 视为第一对,把 (x2,x3)(x_2,x_3) 视为第二对。

图 3

四维向量可拆成两个二维坐标对,分别进行独立旋转。

原视频 · 01:20 ↗

两对可使用不同角度 θ0,θ1\theta_0,\theta_1

x=[R(θ0)00R(θ1)]x.\mathbf x'= \begin{bmatrix} R(\theta_0)&0\\ 0&R(\theta_1) \end{bmatrix}\mathbf x.
图 4

两个二维旋转块沿对角线排列,组成四维的块对角变换。

原视频 · 02:00 ↗

两组坐标不会互相混合,但都保留二维旋转的范数与角度性质。

4. 推广到任意偶数维

若 rotary 维度为 d=2kd=2k,则可形成 kk 个坐标对。

位置 mm 的整体算子是

Rm=diag(R(mθ0),R(mθ1),,R(mθk1)).R_m=\operatorname{diag} \bigl(R(m\theta_0),R(m\theta_1),\ldots,R(m\theta_{k-1})\bigr).

不同 θr\theta_r 让各二维平面以不同速度旋转。

块对角结构使每一对都独立满足

R(mθr)TR(nθr)=R((nm)θr).R(m\theta_r)^TR(n\theta_r)=R((n-m)\theta_r).

因此整个高维算子也只在每个块中保留相对位置差。

5. 奇数维到底“怎么办”

图 5

成对旋转要求 rotary 维度可被 2 整除;若总维度为奇数,需要另行处理剩余坐标。

原视频 · 02:40 ↗

视频把结论说成“奇数维不能用 RoPE”。

更准确的表述是:标准的两两配对旋转要求参与旋转的维度为偶数。

若总 head 维度为奇数,工程上可以只选择一个偶数 rotary 子维度,让剩余坐标不旋转;也可通过补维后再处理。

所以限制来自这套成对实现,不是“奇数维向量在数学上绝对不能带位置信息”。

跟练与练习

原视频练习

编者练习

d=6d=6 的向量写出 RoPE 算子的块结构,并说明共有几个频率。

查看参考答案

共有三组二维坐标对,因此有三个频率:
Rm=diag(R(mθ0),R(mθ1),R(mθ2)).R_m=\operatorname{diag} \bigl(R(m\theta_0),R(m\theta_1),R(m\theta_2)\bigr).
矩阵尺寸为 6×66\times6,非零元素只出现在三个 2×22\times2 对角块内。

常见误区

  • 高维 RoPE 不是一般意义上的任意高维旋转。
  • 每个二维对可以有不同频率,但同一对的两个坐标共享一个角度。
  • 块之间相互独立,不代表 attention head 其他线性层也不混合维度。
  • “奇数维不能用”应收窄为标准 rotary 子维度必须为偶数。

本课小结

  • RoPE 把高维向量分成多个二维子空间。
  • 多个二维旋转块组成块对角算子。
  • 这种结构同时保留相对位置代数与高效实现。
  • 奇数总维度可以通过选择偶数 rotary 子空间处理剩余坐标。
04

主题讲解 · 03:17

为什么加法式位置编码暴露绝对位置

学习目标

  • 写出加法式位置编码进入 query、key 的位置。
  • 展开单个 attention logit 的四类项。
  • 判断表达式是否只依赖相对位置 jij-i
  • 区分“公式暴露绝对索引”与“数值必然变化”。

前置与衔接

本课讨论的是经典正余弦位置向量与 token 表示直接相加的方案。

它与后续 RoPE 的乘法式旋转形成对照。

核心讲解

1. 什么叫绝对位置依赖

假设相同内容从位置 i,ji,j 整体移动到 i+Δ,j+Δi+\Delta,j+\Delta

相对距离仍是 jij-i

若位置部分仍随 iijj 各自改变,就暴露了绝对位置。

图 1

同一内容移动到不同绝对位置时,加法式位置编码会换成不同的位置向量。

原视频 · 00:20 ↗

2. 位置向量先与内容相加

令内容表示为 xix_i,位置向量为 pip_i

加法式方案先形成

hi=xi+pi.h_i=x_i+p_i.

再投影得到

qi=Wqhi,kj=Wkhj.q_i=W_qh_i,\qquad k_j=W_kh_j.
图 2

输入 x_i 与位置向量 p_i 相加后,再分别通过 query 和 key 投影。

原视频 · 01:20 ↗

3. 写出单个注意力 logit

忽略缩放常数时,位置 ii 对位置 jj 的 logit 是

sij=qiTkj.s_{ij}=q_i^Tk_j.

代入投影:

sij=(xi+pi)TWqTWk(xj+pj).s_{ij}=(x_i+p_i)^TW_q^TW_k(x_j+p_j).
图 3

位置注入后的注意力 logit 可写为 (x_i+p_i)ᵀW_qᵀW_k(x_j+p_j)。

原视频 · 01:40 ↗

M=WqTWkM=W_q^TW_k,完整展开得到

sij=xiTMxj+xiTMpj+piTMxj+piTMpj.\begin{aligned} s_{ij}={}&x_i^TMx_j+x_i^TMp_j\\ &+p_i^TMx_j+p_i^TMp_j. \end{aligned}
图 4

展开后得到内容—内容、内容—位置、位置—内容和位置—位置四类项。

原视频 · 02:20 ↗

四项分别是内容—内容、内容—位置、位置—内容、位置—位置。

后三类都让 pip_ipjp_j 单独进入表达式。

4. 为什么不能只写成位置差

正余弦位置向量自身确实包含丰富的三角结构。

但经过一般矩阵 MM 与内容交叉后,整个 sijs_{ij} 并不会自动化成只含 jij-i 的函数。

若整体平移,pi,pjp_i,p_j 被替换为 pi+Δ,pj+Δp_{i+\Delta},p_{j+\Delta}

图 5

内容整体移动后,参与计算的位置向量由 p_i、p_j 改为新的绝对位置向量。

原视频 · 03:00 ↗

因此这个参数化显式允许模型使用绝对位置。

5. 一个必要的措辞边界

“依赖绝对位置”描述的是模型表达式可见哪些变量。

它不意味着每一次移动都保证输出数值变化。

特殊权重、特殊内容或数值抵消可能让某个样本恰好不变。

严谨结论是:一般情况下,该结构不具备由参数化保证的共同平移不变性。

RoPE 则直接把位置部分组织为 RiTRj=RjiR_i^TR_j=R_{j-i},从结构上暴露位置差。

跟练与练习

原视频练习

编者练习

若去掉所有包含 pi,pjp_i,p_j 的三项,只保留 xiTMxjx_i^TMx_j,模型还具有位置信息吗?

查看参考答案

不具有来自这套位置编码的位置信息。
xiTMxjx_i^TMx_j 只比较内容表示;若内容表示本身没有其他位置来源,交换 token 位置不会由此项被感知。
这也说明位置项虽然会暴露绝对索引,却是打破纯内容置换对称性的必要来源之一。

常见误区

  • 正余弦函数含差角恒等式,不等于任意投影后的 attention 自动只依赖差值。
  • “绝对位置相关”不等于每个样本平移后数值必然不同。
  • pip_ipjp_j 是不同位置向量,不能都简写成同一个 pp
  • 本课比较参数化结构,不是在断言加法式编码在所有任务上都劣于 RoPE。

本课小结

  • 加法式位置编码在投影前把 pip_i 注入内容。
  • attention 展开后有三类显式位置项。
  • 一般权重下,这些项分别依赖 iijj,而非只依赖 jij-i
  • RoPE 的价值之一是把位置组合结构直接限制为相对旋转。
05

主题讲解 · 03:26

RoPE 为什么不需要显式旋转矩阵乘法

学习目标

  • 从块对角结构解释稠密矩阵为何没有必要。
  • 将单个二维旋转改写成逐元素 cos/sin 组合。
  • 说明 rotate-half 类实现与矩阵形式的等价性。
  • 准确理解“不需要矩阵乘”并非“不需要计算”。

前置与衔接

上一课组已把 RoPE 写成多个二维旋转块。

本课进一步把数学矩阵改写为实际张量算子。

核心讲解

1. 频率按二维坐标对组织

每个二维对共享一个位置相关角度。

图 1

位置频率按二维坐标对组织,每一对共享同一个旋转角频率。

原视频 · 00:20 ↗

对位置 ii、第 rr 对坐标,角度可记为

ϕi,r=iθr.\phi_{i,r}=i\theta_r.

2. 大矩阵实际上非常稀疏

高维旋转写成

Ri=diag(R(ϕi,0),,R(ϕi,k1)).R_i=\operatorname{diag} \bigl(R(\phi_{i,0}),\ldots,R(\phi_{i,k-1})\bigr).
图 2

高维 RoPE 矩阵由多个 2×2 旋转块沿对角线组成。

原视频 · 01:20 ↗

2×22\times2 对角块外,其余位置全为零。

如果把它当普通 d×dd\times d 稠密矩阵做 GEMM,会计算大量已知为零的乘加。

图 3

第 i 个位置在第 r 个二维子空间中的旋转角由 i 与频率 θ_r 共同决定。

原视频 · 01:40 ↗

3. 单个二维块只需四个乘法与两个加法

对一对坐标 (x,y)(x,y)

R(ϕ)[xy]=[xcosϕysinϕxsinϕ+ycosϕ].R(\phi) \begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix} x\cos\phi-y\sin\phi\\ x\sin\phi+y\cos\phi \end{bmatrix}.
图 4

每个二维块只需计算两个坐标的 cos 与 sin 线性组合。

原视频 · 02:20 ↗

所有坐标对都可以并行执行同一模式。

4. 改写成 rotate-half 形式

定义

rot(x,y)=(y,x).\operatorname{rot}(x,y)=(-y,x).

则二维旋转等价于

R(ϕ)[xy]=cosϕ[xy]+sinϕ[yx].R(\phi) \begin{bmatrix}x\\y\end{bmatrix} =\cos\phi \begin{bmatrix}x\\y\end{bmatrix} +\sin\phi \begin{bmatrix}-y\\x\end{bmatrix}.
图 5

旋转可改写为 cosθ·[x,y]ᵀ + sinθ·[-y,x]ᵀ,无需显式构造稠密矩阵。

原视频 · 03:00 ↗

张量实现只需预先得到 cos、sin,做坐标重排、符号翻转、逐元素乘法与加法。

不必在内存中物化一个稠密 RiR_i

5. “没有矩阵乘算子”的准确含义

数学上,结果仍等价于矩阵—向量乘法。

工程上,不调用通用稠密矩阵乘内核。

计算并没有消失:仍有三角值读取、逐元素乘法、加法和数据重排。

实际性能还取决于内存布局、kernel fusion、广播方式和硬件实现。

因此最准确的说法是“避免显式稠密旋转矩阵与通用 GEMM”。

跟练与练习

原视频练习

编者练习

(x,y)=(2,1)(x,y)=(2,1)ϕ=π/2\phi=\pi/2,分别用矩阵式和 rotate-half 式计算输出。

查看参考答案

矩阵式:
[0110][21]=[12].\begin{bmatrix}0&-1\\1&0\end{bmatrix} \begin{bmatrix}2\\1\end{bmatrix} =\begin{bmatrix}-1\\2\end{bmatrix}.
rotate-half 式中 cosϕ=0\cos\phi=0sinϕ=1\sin\phi=1,因此输出就是 (y,x)=(1,2)(-y,x)=(-1,2)

常见误区

  • 不显式构造矩阵,不代表数学上不存在对应线性变换。
  • RoPE 不是完全零开销,它仍需逐元素运算与数据访问。
  • 块对角矩阵不是稠密矩阵,复杂度估计不能直接按 d2d^2 套用。
  • rotate-half 的具体切片取决于坐标布局,相邻配对和前后半区配对写法不同。

本课小结

  • RoPE 大矩阵由独立二维旋转块组成。
  • 每个块都能改写成 cos/sin 与坐标重排的组合。
  • 实现可避免物化稠密矩阵和通用矩阵乘。
  • 后续需要进一步比较不同模型如何选择坐标布局。
06

主题讲解 · 03:16

两条旋转恒等式如何导出相对位置

学习目标

  • 写出旋转后 query 与 key 的注意力内积。
  • 证明 R(θ)T=R(θ)R(\theta)^T=R(-\theta)
  • 证明 R(α)R(β)=R(α+β)R(\alpha)R(\beta)=R(\alpha+\beta)
  • 推导位置算子只依赖 jij-i 的结论。

前置与衔接

前几课已建立二维旋转、多维块对角结构和逐元素实现。

本课回答 RoPE 最关键的问题:为什么从两个绝对位置能得到一个相对位置差。

核心讲解

1. 从旋转后的内积开始

令位置 ii 的 query 为 qiq_i,位置 jj 的 key 为 kjk_j

旋转后它们是 RiqiR_iq_iRjkjR_jk_j

图 1

位置 i、j 的 query 和 key 分别旋转后,内积中出现 R_iᵀR_j。

原视频 · 00:20 ↗

内积为

(Riqi)T(Rjkj)=qiTRiTRjkj.(R_iq_i)^T(R_jk_j)=q_i^TR_i^TR_jk_j.

因此关键不在两个旋转各自是什么,而在乘积 RiTRjR_i^TR_j

2. 转置等于反向旋转

二维旋转矩阵是

R(θ)=[cosθsinθsinθcosθ].R(\theta)= \begin{bmatrix} \cos\theta&-\sin\theta\\ \sin\theta&\cos\theta \end{bmatrix}.

转置后

R(θ)T=[cosθsinθsinθcosθ]=R(θ).R(\theta)^T= \begin{bmatrix} \cos\theta&\sin\theta\\ -\sin\theta&\cos\theta \end{bmatrix}=R(-\theta).
图 2

二维旋转矩阵满足 R(θ)ᵀ=R(-θ)。

原视频 · 01:20 ↗

几何上,正向旋转的逆操作就是反向旋转。

3. 连续旋转等于角度相加

先转 β\beta,再转 α\alpha

R(α)R(β)=R(α+β).R(\alpha)R(\beta)=R(\alpha+\beta).
图 3

连续旋转可合成为角度相加:R(α)R(β)=R(α+β)。

原视频 · 02:00 ↗

这可由矩阵乘法与和角公式验证,也可由几何直接理解。

4. 绝对角度在内积中相减

对一个频率 θ\theta,令

Ri=R(iθ),Rj=R(jθ).R_i=R(i\theta),\qquad R_j=R(j\theta).

于是

RiTRj=R(iθ)R(jθ)=R((ji)θ).\begin{aligned} R_i^TR_j &=R(-i\theta)R(j\theta)\\ &=R((j-i)\theta). \end{aligned}
图 4

R(iθ)ᵀR(jθ)=R((j-i)θ),绝对角度在乘积中相减。

原视频 · 02:20 ↗

最终 logit 的位置形式是

qiTR((ji)θ)kj.q_i^TR((j-i)\theta)k_j.

5. 多维情形逐块成立

偶数 rotary 维度由多个二维块组成。

图 5

在任意偶数 rotary 维度中,每个二维块都独立保留相同的相对角性质。

原视频 · 03:00 ↗

rr 个块得到 R((ji)θr)R((j-i)\theta_r)

所以完整算子仍只由 jij-i 与一组频率共同决定。

6. “相对位置”结论的边界

这里证明的是 RoPE 位置算子在 query-key 内积中的形式只依赖相对偏移。

标量注意力仍取决于 qi,kjq_i,k_j 的内容。

因果 mask、序列边界和其他模块也可能破坏整套系统层面的平移对称。

因此不要把结论扩大为“任何移动都让完整模型输出严格不变”。

跟练与练习

原视频练习

编者练习

若位置 i=3i=3j=8j=8,频率为 θ\theta,内积中的位置旋转是多少?两位置同时加 10 后呢?

查看参考答案

原相对偏移为 83=58-3=5,所以位置旋转为 R(5θ)R(5\theta)
共同平移后偏移为 (8+10)(3+10)=5(8+10)-(3+10)=5,仍是 R(5θ)R(5\theta)

常见误区

  • RiTRjR_i^TR_j 的顺序决定结果是 jij-i,不可随意交换。
  • 转置等于负角依赖旋转矩阵的正交结构。
  • 同一相对位置只保证使用同一位置算子,不保证标量分数相同。
  • ASR 中反复出现的“决斗位置”应按标题与板书校正为“绝对位置”。

本课小结

  • 旋转转置对应反向旋转。
  • 旋转乘积对应角度相加。
  • 两者组合让 RiTRjR_i^TR_j 化为 RjiR_{j-i}
  • 这就是 RoPE 在 attention 内积中编码相对位置的代数核心。
07

主题讲解 · 03:26

RoPE 频率底数如何影响长距离旋转

学习目标

  • 读懂 θr=base2r/d\theta_r=base^{-2r/d} 中各变量。
  • 判断增大 base 对不同频率维度的影响。
  • 用累计相位解释长上下文中的旋转速度。
  • 区分外推直觉与可靠的性能保证。

前置与衔接

上一课说明 attention 中出现 R((ji)θr)R((j-i)\theta_r)

本课固定相对距离,考察频率 θr\theta_r 如何改变累计旋转角。

核心讲解

1. 相对距离乘上频率

rr 个二维对的位置角是

ϕr=(ji)θr.\phi_r=(j-i)\theta_r.
图 1

RoPE 注意力中的位置部分通过 R((j-i)θ_r) 依赖相对距离。

原视频 · 00:20 ↗

距离越长,累计相位通常越大。

2. 频率由底数控制

视频板书采用

θr=base2r/d.\theta_r=base^{-2r/d}.
图 2

第 r 个二维子空间的频率按 θ_r=base^{-2r/d} 变化。

原视频 · 00:40 ↗

dd 是 rotary 维度,rr 是二维频率对的编号。

r>0r>0 时,增大 base 会减小 θr\theta_r

r=0r=0θ0=1\theta_0=1,不随 base 改变。

所以“所有频率统一变小”并不严格成立。

3. 多个坐标对覆盖多个尺度

图 3

不同二维坐标对使用不同频率,因此随距离积累出不同旋转速度。

原视频 · 01:20 ↗

高频对在较短距离内就绕过较大角度。

低频对随距离变化更慢,可表达更长尺度的相对关系。

RoPE 不是单一周期,而是一组频率共同作用。

4. 增大底数会让多数低频对转得更慢

在相同 r>0r>0 与相同距离下:

baseθrjiθr.base\uparrow\quad\Rightarrow\quad \theta_r\downarrow\quad\Rightarrow\quad |j-i|\theta_r\downarrow.
图 4

在 r>0 的频率对上,增大 base 会减小 θ_r,使同一距离下的旋转更慢。

原视频 · 02:20 ↗

这会把某些频率维度的明显相位变化推向更长距离。

5. 为什么它可能帮助长度外推

训练长度之外,快速旋转的相位可能经历更多周期与振荡。

视频用曲线说明,降低部分频率可让相关结构在更远距离上变化得更平缓。

图 5

视频用振荡曲线说明较慢旋转可能把可用相关结构推向更长距离。

原视频 · 03:00 ↗

这是有用的机制直觉,但不是普遍定理。

模型质量还受训练长度、频率重标定方案、位置分布、attention pattern 与微调策略影响。

单纯把 base 调得越大也不保证越好;过慢旋转可能压缩短距离分辨率。

视频结尾提到“调整 base frequency”的方法,但字幕不足以可靠确认具体论文或方法名,因此本稿不做归属断言。

跟练与练习

原视频练习

编者练习

固定 d=8,r=2d=8,r=2,比较 base=104base=10^4base=106base=10^6θr\theta_r 的大小。

查看参考答案

此时指数为 2r/d=1/2-2r/d=-1/2
θr(104)=102,θr(106)=103.\theta_r(10^4)=10^{-2},\qquad \theta_r(10^6)=10^{-3}.
底数从 10410^4 增到 10610^6 后,这个频率缩小为原来的十分之一。

常见误区

  • 增大 base 不会改变 r=0r=0θ0\theta_0
  • 慢旋转是外推机制的一部分,不是效果保证。
  • 周期更长不等于所有距离上的位置区分都更强。
  • 讨论的是一组频率,不能只画单条曲线就概括整个 head。

本课小结

  • 相对距离通过 jiθr|j-i|\theta_r 变成累计相位。
  • 增大 base 会降低多数 r>0r>0 频率。
  • 较慢相位变化可能把有效尺度推向更长上下文。
  • 实际外推需要联合评估频率方案与训练条件。
08

主题讲解 · 03:31

同一旋转的两种坐标布局:原始 RoPE 与 Llama

学习目标

  • 识别相邻坐标配对与前后半区配对。
  • 用坐标置换解释两个矩阵外观为何不同。
  • 验证重排后仍满足 RoPE 的两条恒等式。
  • 避免把某个库版本的代码写成永久规范。

前置与衔接

二维旋转可以作用于任意选定的两个坐标。

关键不是坐标在向量中的物理相邻性,而是 cos、sin 与 rotate-half 使用同一配对约定。

核心讲解

1. 原始块对角布局:相邻配对

常见论文矩阵把

(x0,x1),(x2,x3),(x_0,x_1),(x_2,x_3),\ldots

组成二维对。

图 1

原始块对角写法把相邻坐标组成二维旋转对。

原视频 · 00:40 ↗

矩阵非零项集中在相邻的 2×22\times2 对角块中。

2. 视频中的 Llama 布局:跨半区配对

另一种布局先把向量分为前半与后半,再对应配对:

(x0,xd/2),(x1,xd/2+1),(x_0,x_{d/2}),(x_1,x_{d/2+1}),\ldots
图 2

视频中的 Llama 写法把前半维与后半维对应配对,矩阵非零块随坐标重排。

原视频 · 01:20 ↗

若按原坐标顺序画矩阵,非零块看起来像分布在四个大区域,而不是紧邻的小方块。

3. 两者相差一个坐标置换

PP 为把相邻配对顺序改成半区配对顺序的置换矩阵。

两个旋转算子可写成

Rhalf(θ)=PTRadj(θ)P.R_{half}(\theta)=P^TR_{adj}(\theta)P.

置换只改变坐标编号,不改变每个二维平面内的旋转。

因此只要输入重排、cos/sin 排列与 rotate-half 约定一致,结果在对应坐标系中等价。

图 3

两种布局都可通过重排、符号翻转和逐元素 cos/sin 运算实现。

原视频 · 01:40 ↗

4. 转置性质仍成立

对重排后的算子:

Rhalf(θ)T=(PTRadj(θ)P)T=PTRadj(θ)TP=PTRadj(θ)P=Rhalf(θ).\begin{aligned} R_{half}(\theta)^T &=(P^TR_{adj}(\theta)P)^T\\ &=P^TR_{adj}(\theta)^TP\\ &=P^TR_{adj}(-\theta)P\\ &=R_{half}(-\theta). \end{aligned}
图 4

重排后的旋转算子仍满足转置等于负角旋转。

原视频 · 02:20 ↗

5. 合成性质也仍成立

因为置换矩阵满足 PPT=IPP^T=I

Rhalf(α)Rhalf(β)=PTRadj(α)PPTRadj(β)P=PTRadj(α+β)P=Rhalf(α+β).\begin{aligned} R_{half}(\alpha)R_{half}(\beta) &=P^TR_{adj}(\alpha)PP^TR_{adj}(\beta)P\\ &=P^TR_{adj}(\alpha+\beta)P\\ &=R_{half}(\alpha+\beta). \end{aligned}
图 5

重排后的旋转算子仍满足角度可加的合成性质。

原视频 · 03:00 ↗

于是 RmTRn=RnmR_m^TR_n=R_{n-m} 的核心相对位置推导保持不变。

6. 实现版本边界

本课依据视频中展示的 transformers Llama 实现来解释布局。

代码库会演化,不应把具体文件行号、缓存形状或辅助函数签名视为永久 API。

稳定知识是:检查坐标如何配对、cos/sin 如何排列、rotate-half 如何重排,并验证三者一致。

跟练与练习

原视频练习

编者练习

对四维向量 (a,b,c,d)(a,b,c,d),分别写出相邻配对和半区配对中的二维对。

查看参考答案

相邻配对是 (a,b)(a,b)(c,d)(c,d)
半区配对是 (a,c)(a,c)(b,d)(b,d)
两者可通过把坐标顺序从 (a,b,c,d)(a,b,c,d) 置换为 (a,c,b,d)(a,c,b,d) 相互转换。

常见误区

  • 矩阵外观不同不等于编码原理不同。
  • 只改 rotate-half 而不改 cos/sin 排列会破坏配对一致性。
  • 坐标置换是可逆重编号,不会凭空增加或删除信息。
  • 视频中的代码快照不能替代对当前库版本的实际检查。

本课小结

  • 原始写法常用相邻坐标对。
  • 视频中的 Llama 写法使用前后半区对应坐标对。
  • 两者由置换相似变换联系。
  • 转置与合成性质在坐标重排后保持,因此相对位置机制不变。
09

主题讲解 · 03:38

从 RoFormer 到 Llama:读懂两种 rotate-half 实现

学习目标

  • 按投影、分头、旋转、打分的顺序阅读 RoPE 代码。
  • 看懂相邻偶奇切片构造的 (y,x)(-y,x)
  • 看懂前后半区切片构造的 rotate-half。
  • 将代码操作还原成同一个二维旋转公式。

前置与衔接

上一课从矩阵层面说明两种布局相差坐标置换。

本课进入视频展示的代码快照,练习从张量切片读回数学。

核心讲解

1. 不要从 rotate-half 孤立开读

视频检查的 RoFormer 路径先生成 query,再整理多头形状。

图 1

视频检查的 RoFormer 实现先完成 query 投影与多头形状整理,再应用旋转。

原视频 · 00:20 ↗

一个稳定的阅读顺序是:

  1. 确认最后一维是不是 head dimension。
  2. 确认 rotary dimension 覆盖哪些坐标。
  3. 确认 cos、sin 的 shape 与广播轴。
  4. 确认 rotate-half 如何配对坐标。
  5. 最后检查 query、key 是否使用同一约定。

2. RoFormer 快照中的相邻配对

视频展示的实现用偶数位和奇数位切片:

xeven=(x0,x2,),xodd=(x1,x3,).x_{even}=(x_0,x_2,\ldots),\qquad x_{odd}=(x_1,x_3,\ldots).
图 2

RoFormer 布局将偶数位与奇数位组成相邻二维坐标对。

原视频 · 01:00 ↗

对每对 (x2r,x2r+1)(x_{2r},x_{2r+1}),重排项应等价于

(x2r+1,x2r).(-x_{2r+1},x_{2r}).

3. 与 cos、sin 合成旋转

最终结构是

x=xcosϕ+operatornamerotate(x)sinϕ.x'=x\odot\cos\phi+operatorname{rotate}(x)\odot\sin\phi.
图 3

相邻配对通过坐标交换与一侧取负构造 [-y,x],再与 cos/sin 逐元素组合。

原视频 · 01:20 ↗

对单个二维对,这就是

(x,y)(xcosϕysinϕ, xsinϕ+ycosϕ).(x,y)\mapsto(x\cos\phi-y\sin\phi,\ x\sin\phi+y\cos\phi).

\odot 表示逐元素乘法,不是通用矩阵乘。

4. Llama 快照中的前后半区配对

若最后一维为 dd,先切成

x1=x[...,:d/2],x2=x[...,d/2:].x_1=x[..., :d/2],\qquad x_2=x[..., d/2:].

rotate-half 返回的核心结构是

(x2,x1).(-x_2,x_1).
图 4

视频中的 Llama 实现把向量分成前后两半,rotate_half 交换两半并给一半取负。

原视频 · 02:40 ↗

于是二维对变成 (xr,xr+d/2)(x_r,x_{r+d/2})

只要 cos、sin 也按相同半区方式重复或排列,旋转公式仍完全一致。

5. 用 shape ledger 防止读错

设 query shape 为

[B,H,L,D].[B,H,L,D].

rotate-half 应只重排最后一维 DD,不能误切 batch、head 或 sequence 轴。

cos、sin 必须能广播到同一 shape;不同库可能保存为 [L,D][L,D][1,1,L,D][1,1,L,D] 或其他可广播形式。

视频以 head dimension 128 举例,但这是该示例的参数,不是 Llama 永恒固定值。

同样,具体源码路径与函数签名属于版本快照;稳定结论是坐标配对与代数等价性。

跟练与练习

原视频练习

编者练习

输入 x=(1,2,3,4)x=(1,2,3,4)。写出相邻配对与半区配对各自的 rotate-half 输出。

查看参考答案

相邻配对为 (1,2),(3,4)(1,2),(3,4),所以输出是 (2,1,4,3)(-2,1,-4,3)
半区配对为 (1,3),(2,4)(1,3),(2,4),按前后半拼接形式输出是 (3,4,1,2)(-3,-4,1,2)
两者数值顺序不同,但都在各自约定的二维对内执行 (y,x)(-y,x)

常见误区

  • rotate-half 不是把整个向量循环右移一位。
  • 相邻布局与半区布局的 cos/sin 排列不能混用。
  • 示例中的 128 维不是所有模型的固定 head dimension。
  • 源码文件名和实现细节会随 transformers 版本变化。

本课小结

  • 读代码应先确认 shape 与轴语义。
  • RoFormer 快照采用相邻偶奇坐标配对。
  • Llama 快照采用前后半区坐标配对。
  • 两种 rotate-half 都实现二维 (y,x)(-y,x),并与 cos/sin 合成同一旋转。
10

主题讲解 · 03:36

什么样的矩阵族能编码相对位置

学习目标

  • RmTRnR_m^TR_n 抽象 RoPE 的核心代数契约。
  • 区分充分构造、数学必要条件与工程偏好。
  • 理解正交群表示为何自然产生位置差。
  • 判断一个候选算子族是否保留相对位置。

前置与衔接

标准 RoPE 使用二维旋转块。

本课不再问“标准矩阵长什么样”,而问“哪些性质真正让绝对位置相减”。

核心讲解

1. 从一般位置算子开始

设位置 mm 的 query 使用 RmR_m,位置 nn 的 key 使用 RnR_n

图 1

若位置 m、n 分别使用算子 R_m、R_n,注意力内积包含 R_mᵀR_n。

原视频 · 00:20 ↗

内积位置部分总是

RmTRn.R_m^TR_n.

目标是让它只依赖相对偏移 nmn-m

图 2

m、n 是 token 的位置索引,目标是让算子乘积只依赖位置差 n-m。

原视频 · 01:00 ↗

因此最直接的契约是

RmTRn=F(nm)R_m^TR_n=F(n-m)

对某个只接收差值的算子函数 FF 成立。

2. 标准旋转给出一组充分性质

二维旋转满足

R(θ)T=R(θ),R(\theta)^T=R(-\theta),

以及

R(α)R(β)=R(α+β).R(\alpha)R(\beta)=R(\alpha+\beta).
图 3

标准旋转同时满足 R(θ)ᵀ=R(-θ) 与 R(α)R(β)=R(α+β)。

原视频 · 01:40 ↗

Rm=R(mθ)R_m=R(m\theta),立即得到

RmTRn=R((nm)θ).R_m^TR_n=R((n-m)\theta).
图 4

组合两条性质后,R_mᵀR_n 可化为仅由 n-m 决定的算子。

原视频 · 02:20 ↗

这说明标准二维旋转是一种简单而漂亮的充分构造。

3. 更一般的数学结构

若算子族满足

R(a+b)=R(a)R(b)R(a+b)=R(a)R(b)

且每个 R(a)R(a) 正交,那么

R(a)T=R(a)1=R(a).R(a)^T=R(a)^{-1}=R(-a).

于是它构成整数平移群到正交变换群的表示。

这时

R(m)TR(n)=R(nm).R(m)^TR(n)=R(n-m).

二维平面旋转只是这类群表示中最常用的一种。

从这个角度看,“必须是二维旋转矩阵”不是普遍必要条件。

高维正交表示、多个不可约块或其他等价参数化都可能满足同一契约。

4. 数学条件与工程条件必须分开

图 5

视频列出二维旋转性质与硬件友好性;正文进一步区分数学条件和工程选择。

原视频 · 03:00 ↗

数学上,核心是位置算子组合只留下差值,并最好保持内积尺度稳定。

工程上,还希望:

  • 参数与预计算成本低。
  • 能用逐元素算子或融合 kernel 实现。
  • 内存访问规则,易于缓存。
  • 与 attention head shape 自然兼容。

硬件友好非常重要,但不是“编码相对位置”的数学必要条件。

视频还提到四元数等扩展方向;字幕没有给出可核验论文信息,本稿只保留为开放探索,不做具体文献归属。

5. 一个实用判定流程

面对候选 RmR_m,依次检查:

  1. R0R_0 是否为单位算子。
  2. RmR_m 是否可逆,逆是否对应 RmR_{-m}
  3. RmRnR_mR_n 是否等于 Rm+nR_{m+n}
  4. RmTRnR_m^TR_n 是否只含 nmn-m
  5. 数值范数、实现开销与稳定性是否可接受。

前四项回答数学正确性,第五项回答工程可用性。

跟练与练习

原视频练习

编者练习

候选算子 Rm=cmIR_m=c^mI 能否让 RmTRnR_m^TR_n 只依赖 nmn-m?在实数 cc 下何时还能保持范数?

查看参考答案

RmTRn=cm+nI,R_m^TR_n=c^{m+n}I,
一般依赖 m+nm+n,而不是 nmn-m,所以不满足目标。
若要保持范数,实数 cc 还必须满足 c=1|c|=1;但即便 c=1c=-1,仍需按离散索引仔细检查它表达的是奇偶差还是和。

常见误区

  • 二维旋转是经典充分构造,不是唯一数学可能。
  • 硬件高效是工程目标,不是相对位置成立的逻辑前提。
  • 只满足合成律而不检查转置或逆,不足以推出 RmTRn=RnmR_m^TR_n=R_{n-m}
  • 提到四元数不等于已经证明某个具体方案优于标准 RoPE。

本课小结

  • 相对位置的核心契约是 RmTRnR_m^TR_n 只依赖 nmn-m
  • 正交群表示自然满足这一契约。
  • 标准二维旋转是结构简单、实现高效的经典选择。
  • 评估新矩阵族时应把数学正确性与工程效率分别验证。
11

主题讲解 · 01:18

零相对距离为什么对应单位旋转

学习目标

  • 从 attention 主对角线识别零相对距离。
  • 直接计算二维 R(0)R(0)
  • 推广到高维块对角 R0R_0
  • 理解单位元在位置算子群中的作用。

前置与衔接

上一课得到一般关系

RmTRn=Rnm.R_m^TR_n=R_{n-m}.

本课只考察最简单却很关键的特例 m=nm=n

核心讲解

1. attention 主对角线比较同一位置

在注意力矩阵中,第 nn 行第 nn 列比较位置 nn 的 query 与位置 nn 的 key。

图 1

关注同一位置的 query 与 key 时,两个位置索引相同。

原视频 · 00:00 ↗

此时两个位置索引相同。

2. 相对位移为零

nn=0.n-n=0.
图 2

同一位置 n 与自身的相对位移为 n-n=0。

原视频 · 00:20 ↗

所以位置算子乘积化为

RnTRn=R0.R_n^TR_n=R_0.

RnR_n 正交,左边也直接等于单位阵 II

3. 从二维旋转直接代入

标准旋转矩阵为

R(ϕ)=[cosϕsinϕsinϕcosϕ].R(\phi)= \begin{bmatrix} \cos\phi&-\sin\phi\\ \sin\phi&\cos\phi \end{bmatrix}.

相对距离为零时,每个频率的角度都是

0θr=0.0\cdot\theta_r=0.
图 3

相对距离为零时,每个二维块的旋转角都是 0。

原视频 · 00:40 ↗

代入 cos0=1\cos0=1sin0=0\sin0=0

R(0)=[1001]=I2.R(0)= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}=I_2.
图 4

由于 cos0=1、sin0=0,所有二维块均为单位阵,因此 R_0=I。

原视频 · 01:00 ↗

4. 高维块对角情形

若 rotary 维度为 d=2kd=2k

R0=diag(I2,I2,,I2)=Id.R_0=\operatorname{diag}(I_2,I_2,\ldots,I_2)=I_d.

每个二维对都保持原值,因此整个向量不发生位置旋转。

5. 几何解释

同一点与自身的相对距离为零。

零角旋转不改变方向,也不改变长度。

所以单位阵不是人为补丁,而是“什么都不做”这一变换的唯一自然表示。

6. 群结构解释

位置平移的单位元是 0。

RR 保持加法结构:

R(a+b)=R(a)R(b),R(a+b)=R(a)R(b),

R(0)=R(0+0)=R(0)R(0).R(0)=R(0+0)=R(0)R(0).

R(0)R(0) 可逆时,两边消去一个 R(0)R(0),得到 R(0)=IR(0)=I

这说明单位旋转不仅是三角函数巧合,也是群表示必然保留单位元的结果。

7. 它不代表对角 attention 等于 1

R0=IR_0=I 只说明位置算子没有额外旋转。

主对角线的标量 logit 仍是

qnTkn/dk,q_n^Tk_n/\sqrt{d_k},

其数值由内容、投影与缩放决定,并不固定为 1。

跟练与练习

原视频练习

编者练习

证明对任意正交 RnR_n,都有 RnTRn=IR_n^TR_n=I,并说明这与 R0R_0 的关系。

查看参考答案

正交矩阵定义就是
RnTRn=I.R_n^TR_n=I.
RoPE 又要求 RmTRn=RnmR_m^TR_n=R_{n-m}
m=nm=n,右侧为 R0R_0,因此 R0=IR_0=I

常见误区

  • R0=IR_0=I 不等于主对角线 attention 分数为 1。
  • 零相对距离说的是位置差,不是 query 或 key 向量为零。
  • 单位阵尺寸随 rotary 维度变化,不总是 2×22\times2
  • 因果 mask 通常保留主对角线,但 mask 是另一个独立机制。

本课小结

  • 自注意力主对角线对应 nn=0n-n=0
  • 零角二维旋转是 I2I_2
  • 多个单位块组成高维单位阵 IdI_d
  • R0=IR_0=I 是旋转几何、正交性与群表示共同给出的结论。
12

主题讲解 · 02:55

沿对角线读懂含 RoPE 的注意力矩阵

学习目标

  • 写出注意力矩阵单个元素的 RoPE 形式。
  • 解释为什么同一对角线共享相对旋转算子。
  • 区分位置算子图与真实标量热力图。
  • 正确处理缩放与因果 mask。

前置与衔接

前课已证明

RmTRn=Rnm.R_m^TR_n=R_{n-m}.

本课把这个一维索引差放回二维 attention 矩阵观察。

核心讲解

1. 先看结构总览

视频把不同相对位移画成不同颜色的对角带。

图 1

含 RoPE 的注意力矩阵可按相对位移分成 R_0、R_1、R_2、R_{-1} 等对角带。

原视频 · 00:20 ↗

主对角线标为 R0R_0,相邻对角线依次是 R1,R2R_1,R_2R1,R2R_{-1},R_{-2}

2. 缩放和 mask 仍然存在

标准 attention logit 仍除以 dk\sqrt{d_k}

图 2

RoPE 不改变除以 √d_k 的缩放;右上区域是否被屏蔽取决于注意力掩码。

原视频 · 00:40 ↗

是否把右上三角置为 -\infty 取决于注意力类型:

  • 双向 attention 通常不使用因果上三角 mask。
  • 自回归 attention 通常屏蔽未来位置。

ASR 在此处疑似把“BERT 和 GPT”识别错;结合板书语境,本稿只保留双向与因果两类结构差异,不依赖该词级转写。

3. 单个矩阵元素

令第 mm 行对应 query qmq_m,第 nn 列对应 key knk_n

图 3

第 m 行、第 n 列元素来自旋转后 query 与 key 的内积。

原视频 · 01:20 ↗

旋转后的未掩码分数是

Smn=(Rmqm)T(Rnkn)dk.S_{mn}=\frac{(R_mq_m)^T(R_nk_n)}{\sqrt{d_k}}.

整理得

Smn=qmTRmTRnkndk.S_{mn}=\frac{q_m^TR_m^TR_nk_n}{\sqrt{d_k}}.

4. 化成相对旋转

利用转置和合成性质:

Smn=qmTRnmkndk.S_{mn}=\frac{q_m^TR_{n-m}k_n}{\sqrt{d_k}}.
图 4

利用旋转恒等式,单个元素的位置算子可化为 R(n-m)。

原视频 · 01:40 ↗

这说明矩阵坐标 (m,n)(m,n) 的位置算子只由 nmn-m 决定。

5. 为什么形成对角带

二维矩阵上,满足 nm=cn-m=c 的格点落在同一条对角线上。

例如:

  • nm=0n-m=0 是主对角线。
  • nm=1n-m=1 是紧邻的一条上对角线。
  • nm=1n-m=-1 是紧邻的一条下对角线。
图 5

主对角线满足 n-m=0,因此每个位置都使用 R_0;标量分数仍由各自 q_m、k_m 决定。

原视频 · 02:20 ↗

所以同一对角线共享同一个相对旋转算子 RcR_c

6. 共享算子不等于共享分数

即使两个格点都有同一 nmn-m,它们的 qmq_mknk_n 一般不同。

因此

qmTRcknq_m^TR_ck_n

仍会产生不同标量。

彩色对角带更准确地说是“位置算子结构图”,不是实际 attention score 一定同色同值的热力图。

7. 可视化时的正确分层

可以分别画三层:

  1. 相对位移矩阵 Dmn=nmD_{mn}=n-m
  2. 位置算子标签矩阵 RDmnR_{D_{mn}}
  3. 真实标量分数矩阵 SmnS_{mn},再叠加 mask 与 softmax。

把三者混成一张图最容易产生“同对角线同分数”的误解。

跟练与练习

原视频练习

编者练习

4×44\times4 矩阵中列出所有满足 nm=1n-m=1 的零基索引 (m,n)(m,n)

查看参考答案

合法索引为
(0,1),(1,2),(2,3).(0,1),(1,2),(2,3).
它们位于紧邻主对角线的上对角线,共享位置算子 R1R_1,但标量分数通常不同。

常见误区

  • 同一对角线共享 RcR_c,不共享同一个标量 attention 分数。
  • RoPE 不会替代 1/dk1/\sqrt{d_k} 缩放。
  • 因果上三角 mask 与 RoPE 是独立设计。
  • 图中的 RcR_c 是算子标签,不是 softmax 后概率。

本课小结

  • 单个分数位置项可写成 RnmR_{n-m}
  • 固定 nmn-m 的元素形成矩阵对角带。
  • 对角带显示相对位置算子结构,而非相同分数。
  • 正确可视化要分开相对位移、算子、标量分数和 mask。
13

主题讲解 · 01:54

平移 token 后,RoPE 为什么保留相对位置

学习目标

  • 用共同平移不改变距离建立直觉。
  • nmn-m 的代数式严格证明位置算子不变。
  • 从 attention 矩阵对角带理解共同平移。
  • 说明该不变性的适用范围与系统边界。

前置与衔接

上一课已看到固定相对位移对应同一对角带。

本课把“沿对角线移动”解释为两个 token 位置同时平移。

核心讲解

1. 从距离类比开始

视频用引力只依赖两点距离作类比。

图 1

视频用只依赖两点距离的引力关系类比只依赖相对位置的注意力。

原视频 · 00:00 ↗

若两点坐标分别为 m,nm,n,同时加上位移 Δ\Delta

m=m+Δ,n=n+Δ.m'=m+\Delta,\qquad n'=n+\Delta.

它们的距离差满足

nm=(n+Δ)(m+Δ)=nm.n'-m'=(n+\Delta)-(m+\Delta)=n-m.
图 2

两点同时平移相同位移后,二者距离不变。

原视频 · 00:20 ↗

类比的有效部分是“共同平移消去”。

attention 不是物理引力,不能把力的其他性质照搬过来。

2. RoPE 内积显式只含位置差

对位置 m,nm,n

(Rmqm)T(Rnkn)=qmTRmTRnkn.(R_mq_m)^T(R_nk_n)=q_m^TR_m^TR_nk_n.

标准旋转给出

RmTRn=R((nm)θ).R_m^TR_n=R((n-m)\theta).
图 3

RoPE 内积中的位置算子写成 R((n-m)θ),只显式依赖位置差。

原视频 · 00:40 ↗

共同平移后:

Rm+ΔTRn+Δ=R(((n+Δ)(m+Δ))θ)=R((nm)θ).R_{m+\Delta}^TR_{n+\Delta} =R(((n+\Delta)-(m+\Delta))\theta) =R((n-m)\theta).

所以位置算子完全相同。

3. 两条恒等式是代数原因

图 4

转置取负角与旋转角可加两条性质共同导出相对位置形式。

原视频 · 01:00 ↗

推导依赖

R(ϕ)T=R(ϕ)R(\phi)^T=R(-\phi)

R(α)R(β)=R(α+β).R(\alpha)R(\beta)=R(\alpha+\beta).

第一条把 query 位置角变成负号,第二条将它与 key 位置角相加,最终得到差值。

4. attention 矩阵中的平移

格点 (m,n)(m,n) 与共同平移后的 (m+Δ,n+Δ)(m+\Delta,n+\Delta) 位于同一条平行于主对角线的线上。

图 5

注意力矩阵中同一相对位移对应同一条旋转算子对角带。

原视频 · 01:40 ↗

因为两点有同一个 nmn-m,所以使用同一位置算子 RnmR_{n-m}

这就是矩阵视角下的平移不变性。

5. 哪些东西保持不变

严格保持的是 RoPE 对该 query-key 对施加的相对旋转算子。

如果平移前后比较的是同一内容向量,且没有其他变化,那么位置因素相同。

但真实系统还可能变化:

  • 移动后靠近或越过序列边界。
  • 因果 mask 的可见集合发生改变。
  • padding、特殊 token 或分段位置重置不同。
  • 上下文内容本身并非完全共同平移。

因此不要把局部位置算子不变扩大成完整模型输出在所有场景严格不变。

6. 与绝对位置编码的对照

加法式编码一般会把 pm,pnp_m,p_n 分别注入表达式。

共同平移后它们变成 pm+Δ,pn+Δp_{m+\Delta},p_{n+\Delta}

RoPE 则先通过旋转乘积把位置组合成 nmn-m,再进入内容内积。

两者差异来自参数化方式,不只是训练后模型“是否学会忽略位置”。

跟练与练习

原视频练习

编者练习

原索引为 (m,n)=(4,9)(m,n)=(4,9)。分别共同平移 +3+32-2,验证相对位置算子不变。

查看参考答案

原差值为 94=59-4=5,使用 R(5θ)R(5\theta)
平移 +3+3 后为 (7,12)(7,12),差值仍为 5。
平移 2-2 后为 (2,7)(2,7),差值也仍为 5。
三种情况的位置算子都是 R(5θ)R(5\theta)

常见误区

  • 平移不变性针对两个位置共同加同一个位移。
  • 只移动一个位置会改变 nmn-m
  • 同一位置算子不保证不同内容对的标量分数相同。
  • 引力只是距离不变的类比,不是 attention 的物理模型。
  • mask 与边界可能让完整系统不具备同样的对称性。

本课小结

  • 共同平移会在位置差中完全消去。
  • RoPE 内积的位置算子显式写成 RnmR_{n-m}
  • attention 矩阵中,共同平移对应沿同一对角带移动。
  • 该结论应限定在 RoPE 位置因素,不应无条件扩展到完整模型输出。
14

主题讲解 · 02:18

用相对位移对角带可视化含 RoPE 的 Transformer

学习目标

  • 将旋转后 query-key 内积化成相对旋转形式。
  • 用具体索引解释 RnmR_{n-m} 的正负号。
  • 把相对位移映射到注意力矩阵对角带。
  • 区分 RoPE 结构、因果 mask 与简化 Transformer 图。

前置与衔接

需要知道 RmTRn=RnmR_m^TR_n=R_{n-m},以及注意力矩阵第 mm 行对应 query、第 nn 列对应 key。

本课把抽象公式变成一张带颜色的矩阵流图。

核心讲解

1. 普通内积中多了相对旋转算子

旋转后的 query 与 key 内积为

Rmqm,Rnkn=qmTRmTRnkn.\langle R_mq_m,R_nk_n\rangle =q_m^TR_m^TR_nk_n.

利用 RoPE 性质:

qmTRmTRnkn=qmTRnmkn.q_m^TR_m^TR_nk_n=q_m^TR_{n-m}k_n.
图 1

含 RoPE 的 query-key 内积可化为普通向量内积中多一个相对旋转算子。

原视频 · 00:20 ↗

可视化时不必画出两个绝对旋转,只需给格点标注 RnmR_{n-m}

2. 用 Q3 与 K2 检查符号

视频示例取 query 位置 3、key 位置 2:

R3q3,R2k2.\langle R_3q_3,R_2k_2\rangle.
图 2

位置 3 的 query 与位置 2 的 key 分别乘 R3、R2 后再做内积。

原视频 · 00:40 ↗

展开得到

q3TR3TR2k2=q3TR23k2=q3TR1k2.q_3^TR_3^TR_2k_2 =q_3^TR_{2-3}k_2 =q_3^TR_{-1}k_2.
图 3

R3ᵀR2 化为 R_{2-3}=R_{-1},可先旋转 key 再与 query 做普通内积。

原视频 · 01:00 ↗

这同时提供一个符号自检:采用“行是 query、列是 key”时,相对偏移是列索引减行索引。

3. 为什么同一对角线使用同一种颜色

矩阵中满足 nm=cn-m=c 的所有位置落在同一对角线。

因此:

  • 主对角线使用 R0=IR_0=I
  • 第一条上对角线使用 R1R_1
  • 第一条下对角线使用 R1R_{-1}

颜色表示同一相对旋转算子,不表示 attention 标量相同。

不同格点的 qm,knq_m,k_n 不同,所以分数仍可不同。

4. GPT 与 BERT 的差别来自 mask

图 4

GPT 的因果掩码只保留下三角相对位移带,BERT 的双向注意力可显示两侧对角带。

原视频 · 01:40 ↗

视频上半部分画 GPT 风格 decoder-only attention。

未来位置被因果 mask 屏蔽,因此右上区域为 -\infty,只保留允许访问的相对位移带。

下半部分画 BERT 风格双向 attention,不使用同样的因果上三角 mask,所以正负相对位移两侧都可见。

RoPE 只决定格点使用哪个 RnmR_{n-m};mask 决定该格点是否参与 softmax。

二者是独立机制。

5. 对角线与数轴的对应

图 5

以主对角线 R0 为零点,右侧对应正偏移,左侧对应负偏移。

原视频 · 02:00 ↗

把主对角线看成数轴零点。

沿列方向增加 nn,偏移变为 R1,R2,R_1,R_2,\ldots

沿行方向增加 mm,偏移变为 R1,R2,R_{-1},R_{-2},\ldots

若你的矩阵约定把 query/key 轴对调,正负号也会对调;必须先写出索引定义再上色。

6. 简图没有展示的模块

图中重点是 attention 的位置结构,因此省略或弱化了:

  • Q、K、V 的线性投影细节。
  • 多头 reshape 与输出投影。
  • 残差加法。
  • LayerNorm 或 RMSNorm。
  • FFN 激活与门控。

这些模块仍存在于真实模型中。

残差是跨子层的加法旁路;LayerNorm/RMSNorm 是归一化算子;RoPE 是作用于 query/key 特征对的位置变换,三者不能用同一颜色或同一矩阵语义代替。

跟练与练习

原视频练习

编者练习

在“行是 query、列是 key”的约定下,第 4 行第 1 列应标注哪个相对旋转?它位于主对角线哪一侧?

查看参考答案

相对偏移为
nm=14=3,n-m=1-4=-3,
所以标注 R3R_{-3}
它位于主对角线下方,因为行索引大于列索引。

常见误区

  • 对角带颜色表示相对旋转算子,不表示相同 attention 数值。
  • RnmR_{n-m} 的正负号取决于 query/key 轴约定。
  • GPT 右上角不可见来自因果 mask,不是 RoPE 把它删除。
  • BERT 双向可见不等于所有格点权重相等。
  • 简图省略残差与归一化,不代表它们与 RoPE 是同一机制。

本课小结

  • 两个绝对旋转在内积中合成为 RnmR_{n-m}
  • 固定相对位移形成注意力矩阵对角带。
  • 具体 Q3、K2 示例对应 R1R_{-1}
  • GPT 与 BERT 的可见区域差别来自 mask。
  • 可视化必须分开位置算子、标量分数和被屏蔽区域。
15

单元综合

从二维旋转到相对位置:RoPE 的代数与实现

单元能力目标

完成本单元后,应能从二维几何、复数乘法、高维分块、attention 内积和代码布局五个层次解释 RoPE。

具体需要做到:

  • 从欧拉公式推导标准二维旋转矩阵;
  • 用旋转复合重建正余弦和差角公式;
  • 把 RoPE 从二维推广到任意偶数 rotary 子空间;
  • 证明 RmRn=RnmR_m^\top R_n=R_{n-m}
  • 说明加法位置编码为何一般保留绝对位置交叉项;
  • 在不物化稠密矩阵的前提下写出 RoPE 的逐元素实现;
  • 判断相邻偶奇配对与 Llama 前后半区配对是否实现同一旋转;
  • 解释频率 base 与长距离相位累积的关系;
  • 沿 attention 矩阵对角带读出相对位移;
  • 区分 RoPE 位置因子的平移不变性与整个 Transformer 输出的不变性。

概念连接

1. 复数乘法就是二维旋转

把二维向量 (x,y)(x,y) 表示为复数

z=x+iy.z=x+iy.

欧拉公式给出

eiθ=cosθ+isinθ.e^{i\theta}=\cos\theta+i\sin\theta.

两者相乘:

zeiθ=(xcosθysinθ)+i(xsinθ+ycosθ).ze^{i\theta}=(x\cos\theta-y\sin\theta)+i(x\sin\theta+y\cos\theta).

写成实向量形式就是

Rθ[xy]=[cosθsinθsinθcosθ][xy].R_\theta\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}.

所以复数乘以单位模复数,与平面向量逆时针旋转是同一件事。

2. 和差角公式来自旋转复合

先旋转 α\alpha,再旋转 β\beta,总角度为 α+β\alpha+\beta

RαRβ=Rα+β.R_\alpha R_\beta=R_{\alpha+\beta}.

比较矩阵元素或复数实虚部,就得到

cos(α+β)=cosαcosβsinαsinβ,\cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta,
sin(α+β)=sinαcosβ+cosαsinβ.\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta.

ββ\beta\mapsto-\beta 就得到差角公式。

RoPE 的相对位置不是额外巧合,而是这个旋转复合结构在 attention 内积中的直接结果。

3. 正交性保留范数和点积几何

标准旋转矩阵满足

RθRθ=I.R_\theta^\top R_\theta=I.

因此

Rθx2=x2.\|R_\theta x\|_2=\|x\|_2.

旋转只改变方向,不改变长度。

同时

Rθ=Rθ.R_\theta^\top=R_{-\theta}.

这一反向旋转性质是两个绝对旋转在内积中抵消为相对旋转的关键。

4. 高维 RoPE 是多个二维子空间的直和

对偶数 rotary 维度 drd_r,把向量分成 dr/2d_r/2 对坐标。

rr 对使用频率 θr\theta_r,位置 mm 的旋转角为 mθrm\theta_r

整体算子是块对角矩阵:

Rm=diag(Rmθ0,Rmθ1,,Rmθdr/21).R_m=\operatorname{diag}\left(R_{m\theta_0},R_{m\theta_1},\ldots,R_{m\theta_{d_r/2-1}}\right).

每个二维块都满足正交性和复合性,所以整个块对角矩阵也满足。

5. 奇数维的精确边界

标准旋转块每次消耗两个坐标,所以 rotary 子空间维度应为偶数。

若模型总 head dimension 为奇数,不代表整个向量无法使用 RoPE。

可以选择一个偶数维 rotary 子空间,剩余坐标保持不旋转或按具体架构处理。

需限定的是“成对旋转的部分必须为偶数维”,不是“总维度为奇数就完全不能用”。

6. 位置 m 与 n 在内积中只留下差

对未加位置的 query/key 向量 qm,knq_m,k_n,旋转后内积为

Rmqm,Rnkn=qmRmRnkn.\langle R_mq_m,R_nk_n\rangle=q_m^\top R_m^\top R_nk_n.

Rm=RmR_m^\top=R_{-m}

以及

RmRn=Rnm,R_{-m}R_n=R_{n-m},

得到

Rmqm,Rnkn=qmRnmkn.\langle R_mq_m,R_nk_n\rangle=q_m^\top R_{n-m}k_n.

位置算子只依赖相对位移 nmn-m

7. 零相对位移必然是单位旋转

n=mn=m 时,

RmRm=R0=I.R_m^\top R_m=R_0=I.

在二维块中,这由

cos0=1,sin0=0\cos0=1,\qquad\sin0=0

直接得到。

在 attention 矩阵中,主对角线 m=nm=n 对应零位移算子 II

这不意味主对角线的标量分数都是 1;分数仍由内容向量 qm,kmq_m,k_m 决定。

8. 加法位置编码一般保留绝对项

若在投影前做

xi=xi+pi,x_i'=x_i+p_i,

则 attention 内积展开为

(WQ(xi+pi))(WK(xj+pj)).\bigl(W_Q(x_i+p_i)\bigr)^\top\bigl(W_K(x_j+p_j)\bigr).

其中包含:

  • 内容—内容项;
  • 内容—位置与位置—内容交叉项;
  • 位置—位置项。

在一般的 WQ,WKW_Q,W_K 下,这些项可分别依赖 iijj,不会自动化成只依赖 jij-i

RoPE 则把位置结合直接约束为 RmRnR_m^\top R_n

9. RoPE 不需要物化稠密旋转矩阵

对一对坐标 (x,y)(x,y),旋转后为

x=xcosϕysinϕ,x'=x\cos\phi-y\sin\phi,
y=xsinϕ+ycosϕ.y'=x\sin\phi+y\cos\phi.

高维 RoPE 只是对多对坐标并行执行这组逐元素运算。

因此实现通常只需:

  • 预计算或按需产生 cos/sin;
  • 按配对布局取出伴随坐标;
  • 做逐元素乘加。

不需构造 dr×drd_r\times d_r 稠密矩阵,也不需调用通用矩阵乘。

10. rotate-half 是将 (x,y) 变为 (-y,x)

可将二维旋转写为

Rϕ[xy]=[xy]cosϕ+[yx]sinϕ.R_\phi\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}x\\y\end{bmatrix}\cos\phi+\begin{bmatrix}-y\\x\end{bmatrix}\sin\phi.

代码中常见的 rotate_half 就在构造 (y,x)(-y,x)

判断实现是否正确时,不能只看一个切片或负号,必须同时检查:

  • 坐标如何配对;
  • cos/sin 如何沿维度排列;
  • rotate-half 的输出如何与 sin 相乘;
  • 最终如何与原坐标 cos 项相加。

11. 相邻配对与前后半区配对

原始 RoPE 常把

x0x1,x2x3,x_0\leftrightarrow x_1,\quad x_2\leftrightarrow x_3,\ldots

作为二维对。

Llama 系实现的某些版本把前半区与后半区配对:

xrxr+dr/2.x_r\leftrightarrow x_{r+d_r/2}.

两种布局通过坐标置换 PP 联系:

Rm=PRmP.R_m'=PR_mP^\top.

因为置换矩阵正交,所以

RmRn=PRnmP.R_m'^\top R_n'=P R_{n-m}P^\top.

相对旋转契约保持不变。

因此“索引排列不同”不等于“RoPE 数学不同”,但两套 cos/sin 布局与 rotate-half 不能随意混用。

12. 频率序列控制不同子空间的旋转速度

常见频率形式可写为

θr=base2r/dr.\theta_r=\mathrm{base}^{-2r/d_r}.

位置 mm 的相位是 mθrm\theta_r,相对位移 Δ\Delta 对应 Δθr\Delta\theta_r

当 base 增大时:

  • r=0r=0 的最高频项在这一常见式子下仍为 1;
  • 多数 r>0r>0 频率降低;
  • 对同一位移的累计相位变慢;
  • 有效尺度可能向更长上下文移动。

但这不是一条无条件的外推保证。还需结合训练长度、频率缩放方法、微调方式和评测任务验证。

13. 一条对角带对应固定相对位移

attention 分数矩阵的行表示 query 位置 mm,列表示 key 位置 nn

位置算子是

Rnm.R_{n-m}.

因此,所有满足 nm=Δn-m=\Delta 的矩阵元素位于同一条对角带,并共享相同的相对位置算子 RΔR_\Delta

例如 query 位置 3 与 key 位置 2 对应

R23=R1.R_{2-3}=R_{-1}.

但即使两个元素在同一对角带,它们的 qm,knq_m,k_n 内容不同,标量分数也一般不同。

14. 共同平移在位置差中抵消

将 query 和 key 位置同时平移 ss,新的差为

(n+s)(m+s)=nm.(n+s)-(m+s)=n-m.

所以位置算子仍是

R(n+s)(m+s)=Rnm.R_{(n+s)-(m+s)}=R_{n-m}.

在 attention 矩阵中,这可视为同一相对位移模式沿对角带移动。

这个结论针对 RoPE 位置因子。完整模型的输出还受 token 内容、causal/padding mask、边界、截断、特殊 token 和数值误差影响,不能无条件称为完全平移不变。

15. Mask 决定可见区,RoPE 决定位置结合方式

RoPE 把某个可计算的 query-key 对的位置关系写成 RnmR_{n-m}

attention mask 则决定这个对是否可见。

  • decoder-only causal mask 通常只允许 nmn\le m
  • 双向 encoder 通常允许更完整的 query-key 组合;
  • padding 或局部窗口还会进一步缩小可见区。

所以 GPT 与 BERT 类图像的上三角差异来自 mask,不是 RnmR_{n-m} 代数本身变了。

16. 更一般的相对位置矩阵族

若要将一个矩阵族 RmR_m 用作同类位置编码,核心契约是

RmRn=F(nm)R_m^\top R_n=F(n-m)

只依赖位置差。

一种自然构造是将整数加法群表示为正交矩阵:

Rm+n=RmRn,Rm=Rm,R0=I.R_{m+n}=R_mR_n,\qquad R_m^\top=R_{-m},\qquad R_0=I.

标准二维旋转是结构简单、数值稳定且实现高效的经典选择。

其他矩阵族即使满足数学契约,仍需分别验证范数稳定性、可表达频谱、算子成本和硬件友好性。

对比与决策

1. 先判断目标是否只依赖相对位移

  • 若需要 attention 位置因子显式化为 nmn-m,检查 RmRnR_m^\top R_n
  • 若使用加法位置编码,不要在未展开交叉项前宣称只依赖相对距离。
  • 若分析整个模型,还需加入 mask、边界和内容变化,不能只看 RoPE 子式。

2. 读代码时先建立配对表

对任意 RoPE 实现,依次检查:

  1. rotary dimension 是多少;
  2. 哪两个坐标组成一对;
  3. 每对对应哪个频率;
  4. cos/sin 如何 broadcast;
  5. rotate-half 如何产生 (y,x)(-y,x)
  6. position IDs 是否与缓存或分块位置一致。

只有配对、频率和重排同时一致,才能说两段代码实现同一旋转。

3. 频率 base 只是长上下文设计的一部分

  • 增大 base 通常会降低多数旋转频率;
  • 慢频率能缓解长距离相位过快绕圈的问题;
  • 但训练分布、外推策略、频率缩放、任务类型与实现细节都会影响结果。

因此不把“base 更大”当作单调有效的质量开关。

4. 可视化时分开四个对象

  1. 索引差 nmn-m
  2. 位置算子 RnmR_{n-m}
  3. 内容相关的标量分数 qmRnmknq_m^\top R_{n-m}k_n
  4. mask 后是否可见。

对角带共享的是前两者,不是必然共享同一分数;被 mask 的元素即使有可定义的旋转算子,也不参与最终 attention。

综合训练

编者练习 1

设二维 query 位于 m=3m=3,key 位于 n=8n=8,单位位置角为 θ\theta。化简 (R3θq)(R8θk)(R_{3\theta}q)^\top(R_{8\theta}k)

查看参考答案

(R3θq)(R8θk)=qR3θR8θk=qR3θR8θk=qR5θk.(R_{3\theta}q)^\top(R_{8\theta}k)=q^\top R_{3\theta}^\top R_{8\theta}k=q^\top R_{-3\theta}R_{8\theta}k=q^\top R_{5\theta}k.
两个绝对位置只通过差 83=58-3=5 进入位置算子。

编者练习 2

对向量 (1,2)(1,2),角度 ϕ=π/2\phi=\pi/2,分别用旋转矩阵和 rotate_half 形式计算结果。

查看参考答案

矩阵旋转为
[0110][12]=[21].\begin{bmatrix}0&-1\\1&0\end{bmatrix}\begin{bmatrix}1\\2\end{bmatrix}=\begin{bmatrix}-2\\1\end{bmatrix}.
rotate_half(1,2)=(-2,1)。由于 cos(π/2)=0,sin(π/2)=1\cos(\pi/2)=0,\sin(\pi/2)=1
(1,2)cos(π/2)+(2,1)sin(π/2)=(2,1).(1,2)\cos(\pi/2)+(-2,1)\sin(\pi/2)=(-2,1).
两种形式一致。

编者练习 3

两种实现分别使用相邻配对与前后半区配对。什么条件下可以认为它们数学等价?什么情况下不能直接混用权重或缓存?

查看参考答案

若存在固定置换 PP,且坐标、cos/sin 频率与 rotate-half 同步变换,则 Rm=PRmPR_m'=PR_mP^\top,两者实现同构的旋转表示。
但某套布局训练出的权重、已旋转 K 缓存或 cos/sin 排列,若没有施加对应置换,不能直接交给另一套布局解读。

编者练习 4

对一个 attention 矩阵元素 (m,n)=(5,2)(m,n)=(5,2),说明它位于哪条相对位移对角带;再将 query 和 key 位置同时加 7,检查结果。

查看参考答案

原位移为
Δ=nm=25=3.\Delta=n-m=2-5=-3.
共同平移后,(m,n)=(12,9)(m',n')=(12,9),仍有
Δ=912=3.\Delta'=9-12=-3.
因此位置算子均为 R3R_{-3}。但若平移后 token 内容、mask 或边界条件发生变化,完整 attention 分数/输出不一定保持。

进入下一单元前

  • 已能在复数、二维矩阵与 rotate_half 三种表示之间互相转换。
  • 已能证明 RmRn=RnmR_m^\top R_n=R_{n-m},并解释 R0=IR_0=I
  • 已能把多维 RoPE 看作独立二维旋转块的直和。
  • 已能区分相邻坐标配对与 Llama 前后半区配对。
  • 已能沿 attention 矩阵对角带读取固定相对位移。
  • 已能分开 RoPE 位置算子、内容分数与 mask 可见区。
  • 已能说明 base 增大为何使多数频率变慢,也能陈述其外推边界。
  • 若仍把奇数总维度理解为完全无法使用 RoPE,回看 P03。
  • 若仍把坐标排列差异理解为数学机制不同,回看 P08、P09。
  • 若仍把对角带理解为相同标量分数,回看 P12、P126。
  • 若仍把 RoPE 位置因子的平移不变性扩展为完整模型的无条件不变性,回看 P13。