Week3-理解 Transformer 的位置编码:从绝对位置到旋转位置(RoPE)
理解 Transformer 的位置编码:从绝对位置到旋转位置(RoPE)
本文将从 Transformer 原始的位置编码方法讲起,逐步引出更先进的旋转位置编码(RoPE)。结合动机、数学机制、计算效率与实际应用场景,帮助你系统理解位置编码的发展脉络。
一、为什么需要位置编码?
Transformer 是一种并行处理序列的模型架构,与传统的 RNN 不同,它没有天然的顺序处理能力。
例如:“猫吃鱼”与“鱼吃猫”,词语相同,但顺序不同,含义天差地别。为了让 Transformer 能够理解“谁在前谁在后”,我们需要引入位置编码(Positional Encoding),显式提供词在序列中的位置信息。
二、原始位置编码(Positional Encoding)
1. 编码方式
最初的 Transformer(Vaswani et al., 2017)采用了一种基于正弦和余弦函数的固定位置编码:
\(PE_{(pos,\, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right)\)
\(PE_{(pos,\, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right)\)
它通过周期函数赋予每个位置一个独特向量,然后将其加到词向量上。
2. 特点
- ✅ 计算快,不需要训练
- ❌ 不擅长外推到更长的序列
- ❌ 位置感知弱,只能表达“绝对”位置(“我喜欢吃苹果”,“小时候我喜欢吃苹果”)
- ❌ 无法直接编码词与词之间的相对距离
三、相对位置编码
为了解决“相对位置无法建模”的问题,后续研究提出了相对位置编码。
优点
- ✅ 直接建模词与词的相对距离
- ✅ 更符合自然语言结构
- ✅ 对重复结构友好
缺点
- ❌ 计算量大
- ❌ 无法使用 KV Cache
- ❌ 对部署长文本模型不友好
总结一句话:
绝对位置编码:快但相对关系差;
相对位置编码:强大但不易部署。
四、旋转位置编码 RoPE:结合两者优点
1. 基本思想
RoPE 不再加上位置向量,而是通过向量旋转方式,将位置信息编码进向量之间的点积中。
2. 数学原理
二维旋转矩阵:
\(R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & \sin\theta & \cos\theta \end{bmatrix}\)
旋转后的向量:
\(x' = R( heta \cdot pos) \cdot x\)
点积关系:
\(\langle R( heta_i) x, R( heta_j) x angle = \langle x, R( heta_i - heta_j) x angle\)
表示只和位置差相关(相对信息)。
五、RoPE 示例计算
假设一个 2 维向量 x = [1, 0],我们将其在不同位置下旋转角度(设 θ = π/8):
- 位置 i = 1,旋转角度 = π/8
- 位置 j = 3,旋转角度 = 3π/8
Python 代码:
import numpy as np
theta = np.pi / 8
x = np.array([1.0, 0.0])
R = lambda t: np.array([[np.cos(t), -np.sin(t)], [np.sin(t), np.cos(t)]])
x_i = R(theta * 1) @ x # 位置 1
x_j = R(theta * 3) @ x # 位置 3
similarity = np.dot(x_i, x_j)
print(f"点积相似度: {similarity:.4f}") # 输出约为 cos(π/4) ≈ 0.7071
说明:位置越远,旋转角度差越大,相似度越小,模型自然衰减远距注意力。
六、RoPE 的远程衰减性
qk向量中不同位置(token内位置)的元素转速不一致,低维度元素转速快(theta大),高维度元素转速慢(theta小),因此低维度元素用于建模近距离相关性(相邻token在这些维度上的差异就已经较明显了),高维度元素用于建模远距离相关性(远距离token在这些维度上的差异才能比较明显)
离得远的词,不太相关
七、RoPE怎么适应大模型长度外推
https://zhuanlan.zhihu.com/p/648701937
由于上述的高低频差异,高频分量旋转速度降幅低,低频分量旋转速度降幅高;
靠前的分组,在训练中见过非常多完整的旋转周期,位置信息得到了充分的训练,所以具有较强的外推能力。
靠后的分组,在训练中无法见到完整的旋转周期,或者见到的旋转周期非常少,训练不够充分,外推性能弱,需要进行位置插值。
八、优劣比较
| 特性 | 原始位置编码 | 相对位置编码 | RoPE |
|---|---|---|---|
| 表达相对位置 | ❌ 否 | ✅ 是 | ✅ 是 |
| 支持 KV Cache | ✅ 是 | ❌ 否 | ✅ 是 |
| 计算复杂度 | 低 | 高 | 低 |
| 长文本适应性 | 一般 | 差 | 强 |
九、应用建议
- ✅ 短文本 + 高效部署:原始位置编码
- ✅ 结构性语言分析任务:相对位置编码
- 🚀 长文本 + 需要缓存:RoPE
十、结语
RoPE 以优雅的方式解决了位置编码的效率与表达力矛盾,广泛应用于如 LLaMA、GLM、BLOOM 等大模型,是理解和构建现代 Transformer 模型的关键技术之一。

浙公网安备 33010602011771号