将 $q, k \in \mathbb{R}^d $拆成两两一组(偶数维),构成复数向量: \(z = q_0 + iq_1, q_2 + iq_3, \dots\)
然后对位置 m 编码为旋转角度 $\theta m$,每个维度频率不同(类似正弦编码): \(f(q, m) = \|q\| e^{i\theta(m)} = q \cdot e^{i m \theta}\)
这表示将每个 token 的 hidden 向量绕原点旋转一个角度(不同维度频率不同),最终在 attention 点积中保留相对位置的信息: \(\text{Re}[f(q, m) f(k, n)^*] = \text{Re}[qk^* e^{i(m - n)\theta}]\)
为了避免使用复数,RoPE 实际上使用二维旋转矩阵: $$ f(q, m) = R_m q \quad \text{with } R_m = \begin{bmatrix} \cos(m\theta_0) & -\sin(m\theta_0) & & \ \sin(m\theta_0) & \cos(m\theta_0) & & \ & & \ddots & \ & & & \cos(m\theta_{d/2-1}) & -\sin(m\theta_{d/2-1}) \ & & & \sin(m\theta_{d/2-1}) & \cos(m\theta_{d/2-1}) \end{bmatrix}
$$
优点:不会改变向量模长,保持模型稳定性。
传统 RoPE 是一维的(时间位置)。但在多模态中,我们有:
因此,我们需要从一维位置编码 mm 扩展为三维位置编码 (t,h,w)(t, h, w)。
假设我们有 token 向量 $x \in \mathbb{R}^d$,将其等分为三段: \(x = x^{(t)} \parallel x^{(h)} \parallel x^{(w)} \quad \text{with } d = d_t + d_h + d_w\)
分别对时间维 tt、高度 hh、宽度 ww 应用 RoPE 旋转: \(\text{TMRoPE}(x, t, h, w) = R_t x^{(t)} \parallel R_h x^{(h)} \parallel R_w x^{(w)}\)
其中:
$R_t = \text{RoPE }$旋转矩阵对应时间位置 t;
$R_h, R_w $同理,对应图像 patch 的空间位置;
可以理解为将高维向量分成 3 份,每一部分加一个"独立方向上的旋转"。
特性 | 1D-RoPE | TMRoPE |
---|---|---|
编码维度 | 1D:时间位置 mm | 3D:时间 tt、高 hh、宽 ww |
向量处理 | 整体旋转(偶数维) | 拆分为 3 段分别旋转 |
模态支持 | 主要是文本 | 文本、音频、图像、视频 |
相对位置建模 | 时间上的相对位置 | 时空上的相对位置(视频、图像) |
编码结构 | RmqR_m q | Rtx(t)∥Rhx(h)∥Rwx(w)R_t x^{(t)} \parallel R_h x^{(h)} \parallel R_w x^{(w)} |