Week3-理解 Transformer 的位置编码:从绝对位置到旋转位置(RoPE)

理解 Transformer 的位置编码:从绝对位置到旋转位置(RoPE)

https://www.bilibili.com/video/BV1Aw4m1i7Qh?spm_id_from=333.788.videopod.episodes&vd_source=a7cf44ac2fdb9993ed1896efa6c82bb5&p=2

本文将从 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 模型的关键技术之一。

posted @ 2025-06-06 11:43  SIo_2  阅读(2014)  评论(0)    收藏  举报