常用位置编码技术对比分析
位置编码是Transformer架构的核心组件之一,用于为模型提供序列中词汇的顺序信息。
核心问题:为什么需要位置编码?
原始的Transformer模型的自注意力机制本质上是排列不变的。这意味着打乱输入序列的顺序,其输出的集合是不会改变的(尽管顺序也打乱了),模型自身无法感知词的先后顺序。因此,必须显式地向模型注入位置信息。
主流位置编码技术分类与对比
目前主流的位置编码技术可以分为三大类:绝对位置编码、相对位置编码和旋转位置编码(RoPE)(其思想独特,可自成一类)。此外,还有为了解决长上下文问题而衍生的外推(Extrapolation)和插值(Interpolation) 技术。
下面逐一进行分析。
1. 绝对位置编码 (Absolute Positional Encoding)
这类编码为每个位置生成一个独一无二的编码向量,然后与词向量相加。
-
经典正弦编码 (Sinusoidal)
- 提出: 由原始论文《Attention Is All You Need》提出。
- 原理: 使用不同频率的正弦和余弦函数来生成位置编码。
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))- 其中
pos是位置,i是维度。
- 优点:
- 确定性: 无需学习参数,直接计算得出。
- 外推性: 理论上可以处理比训练时更长的序列(但由于注意力权重的变化,实际效果不好)。
- 缺点:
- 绝对性: 主要编码了绝对位置,对 token 之间的相对关系捕捉不够直接。
- 使用模型: 原始Transformer,早期GPT。
-
可学习绝对编码 (Learned)
- 原理: 将一个可训练的矩阵(
max_length × d_model)作为位置编码,随模型一起训练。 - 优点:
- 灵活性: 让模型自己学习最适合任务的位置表示。
- 缺点:
- 长度固定: 模型只能处理训练时见过的最大长度的序列,完全没有外推能力。
- 可能过拟合训练长度的位置信息。
- 使用模型: BERT,早期T5。
- 原理: 将一个可训练的矩阵(
2. 相对位置编码 (Relative Positional Encoding)
这类编码不关注每个位置的绝对坐标,而是关注序列中任意两个 token 之间的相对距离。这更符合语言学的直觉(例如,“主谓一致”只与词之间的相对距离有关)。
- 经典实现 (如 T5/DeBERTa式)
- 原理: 不再将位置编码加到词向量上,而是修改了注意力分数的计算过程,在
Softmax之前注入一个与相对位置(i-j)相关的偏置项。Attention = Softmax(QK^T / sqrt(d_k) + B) V- 其中
B是一个根据查询位置i和键位置j的相对距离(i-j)查表得到的标量偏置。
- 优点:
- 更好的归纳偏置: 直接建模相对关系,通常效果优于绝对位置编码。
- 更好的外推潜力: 因为模型学习的是距离的概念,对于稍长一点的序列,相对距离如果见过,可能有一定泛化能力。
- 缺点:
- 实现相对复杂。
- 使用模型: T5, DeBERTa。
- 原理: 不再将位置编码加到词向量上,而是修改了注意力分数的计算过程,在
3. 旋转位置编码 (RoPE - Rotary Positional Embedding) - 当前主流
RoPE 是近年来最成功、应用最广泛的位置编码方案,巧妙地将绝对位置信息通过旋转的方式融入了相对位置的信息。
- 原理:
- 它的核心思想是:通过旋转矩阵对查询(Q)和键(K)向量在二维子空间上进行旋转,旋转的角度取决于其绝对位置。
- 对于位置为
m的 token,它的 Q 和 K 向量会被一个角度为mθ的旋转矩阵变换。 - 神奇之处: 变换后,两个向量在注意力机制中的点积
(Q_m)^T K_n结果只会依赖于相对位置 (m-n)。这就同时拥有了绝对位置的形式和相对位置的内核。
- 优点:
- 卓越的外推性能: 由于其数学形式,RoPE在长度外推方面表现出了惊人的潜力(通过一些技巧如线性缩放,可以在训练后处理更长的序列)。
- 可逆性: 旋转操作是保范数的、可逆的,数值稳定性好。
- 随着距离增加,依赖性自然衰减: 旋转机制使得相距很远的 token 的点积值在理论上会变小,这与直觉相符。
- 缺点:
- 理论相对复杂,理解和实现有一定门槛。
- 使用模型: 几乎所有当前最先进的LLM,包括 LLaMA (1/2/3), GPT-NeoX, PaLM, ChatGLM, 百川, 通义千问等。
对比总结表
| 编码类型 | 代表技术 | 核心思想 | 优点 | 缺点 | 代表模型 |
|---|---|---|---|---|---|
| 绝对位置 | 正弦函数 (Sinusoidal) | 用三角函数为每个位置生成唯一编码 | 无需学习,有一定外推性 | 相对关系捕捉间接 | 原始Transformer |
| 可学习嵌入 (Learned) | 训练一个位置嵌入矩阵 | 灵活,可能学到有用模式 | 完全无法外推,长度固定 | BERT, T5 (早期) | |
| 相对位置 | T5/DeBERTa 式偏置 | 在注意力分数中加入与相对距离相关的偏置 | 直接建模相对关系,效果好 | 实现稍复杂,外推能力有限 | T5, DeBERTa |
| 旋转位置 (RoPE) | 旋转位置编码 (RoPE) | 通过旋转矩阵注入绝对位置,实现相对位置效果 | 外推性强、稳定性好、成为事实标准 | 理论较复杂 | LLaMA, GPT-J, PaLM, 几乎所有新SOTA模型 |
前沿发展与挑战:长上下文与外推
随着模型处理更长上下文的需求激增(如处理整本书、长代码文件),如何让位置编码适应远超训练长度的序列成为了研究热点。这主要围绕 RoPE 展开:
-
外推 (Extrapolation):
- 问题: 直接让一个用 2k 长度训练的 RoPE 模型处理 8k 的序列,效果会急剧下降,因为模型没见过这么大的位置索引对应的旋转角度。
- 解决方案: 位置插值 (Position Interpolation, PI) 是当前最有效且主流的方法。它不是直接使用巨大的位置索引(如 8000),而是将位置索引线性缩放到训练范围内(例如,将 8000 缩放为 8000 / (8000/2048) = 2048)。这样,所有位置索引都在模型“见过”的范围内,虽然密度增加了,但效果远好于直接外推。
- 代表技术: NTK-aware 插值、YaRN 等更先进的插值方法,它们在缩放时考虑了高频和低频信息的保留,比简单的线性插值(PI)效果更好。目前,YaRN 及其变体是处理长上下文的事实标准。
-
放弃位置编码?:
- 也有一些研究尝试让模型完全不依赖位置编码(如 Attention with Linear Biases - ALiBi),通过在注意力分数上添加一个与距离成比例的负偏置来惩罚远距离的 token。它在长文本外推上表现非常出色,但目前在通用性能上仍被认为略逊于 RoPE。
结论
- 当前绝对主流: RoPE 因其出色的性能和强大的外推潜力,已成为大语言模型位置编码的事实标准。选择新技术时,应优先考虑基于 RoPE 的模型。
- 处理长文本: 如果需要处理远超训练长度的文本,应关注采用了位置插值技术(如 PI, NTK-aware, YaRN)的模型。这些技术可以低成本地扩展模型上下文窗口。
- 相对位置的价值: 相对位置编码的思想(如 T5/DeBERTa 的偏置)在特定架构(如编码器模型)中仍然非常有效,并非过时技术。
- 可学习绝对编码: 除非有非常特殊的理由(且序列长度绝对固定),否则在新项目中选择可学习绝对编码的意义不大。
总而言之,位置编码技术的发展脉络是从绝对位置到相对位置,最终由 RoPE 以其优雅的数学形式和强大的实践效果实现了统一,并正在通过插值技术不断突破长上下文的边界。
本文来自博客园,作者:Jcpeng_std,转载请注明原文链接:https://www.cnblogs.com/JCpeng/p/19048756

浙公网安备 33010602011771号