Skip to content

Position Encoding

Position Encoding(位置编码)是 Transformer 架构中不可或缺的组成部分。由于 Self-Attention 本身是置换不变的(permutation invariant),不能区分词的先后顺序,因此需要额外的位置信息来补充顺序特征。从原版 Transformer 的正弦/余弦位置编码到 RoPE(旋转位置编码)、ALiBi 和长上下文扩展技术,位置编码经历了显著的演进。

核心问题

为什么需要位置编码

Self-Attention 的计算是置换不变的:

输入: [A, B, C] 和 [B, A, C]
产生的 Attention 矩阵完全相同

问题: 语言是有序的,"狗咬人" ≠ "人咬狗"
解决: 为每个位置添加唯一的位置信息

主要方法

1. 绝对位置编码 (Absolute Position Encoding)

正弦/余弦位置编码 (Sinusoidal)

原版 Transformer 采用的方法:

python
PE(pos, 2i)   = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))

其中:
- pos: 位置索引
- i: 维度索引
- d: 模型维度

特点

  • 固定函数,不需学习
  • 可以外推到更长序列
  • 位置之间有确定的几何关系

可学习位置编码 (Learned)

BERT、GPT 等采用的方法:

python
# 每个位置有一个可训练的向量
position_embeddings = nn.Embedding(max_seq_len, d_model)

特点

  • 灵活性高,可以学习任意模式
  • 受限于 max_seq_len,难以外推
  • 需要更多训练数据

2. 相对位置编码 (Relative Position Encoding)

RoPE (Rotary Position Embedding)

当前主流模型的标准方案(Llama、Qwen、DeepSeek 等):

python
# 将 Q 和 K 的每对维度旋转一个角度
# 角度与位置相关

q_rot = rotate_half(q) * cos(m*θ) + rotate_half(q) * sin(m*θ)
k_rot = rotate_half(k) * cos(n*θ) + rotate_half(k) * sin(n*θ)

# 点积后自然体现相对位置信息
q_rot · k_rot = f(q, k, m-n)  # 只依赖于相对位置差

优势

  • 相对位置意识:点积后只依赖于位置差
  • 长度外推友好
  • 与 Attention 机制自然融合

ALiBi (Attention with Linear Biases)

python
# 不使用位置编码,而是在 Attention 分数上加偏置
attention_score = QK^T / √d + bias(m-n)

bias(m-n) = -|m-n| · slope  # 距离越远,惩罚越大

特点

  • 简洁高效,无需额外参数
  • 天然的长度外推能力
  • 广泛用于训练长上下文模型

3. 无位置编码方法

固定长度上下文

一些新方法尝试去掉显式位置编码:

  • Permutation Equivariant Networks: 利用结构化表示
  • State Space Models (Mamba): 隐式位置信息通过状态传递

长上下文扩展技术

问题

模型在训练时只见过短序列,如何处理更长的输入?

解决方案

方法原理效果
NTK-aware插值位置编码可扩展到 2-4x
YaRN温度缩放 + 频率拆分可扩展到 8x+
PI位置插值简单但效果有限
逐步扩展分阶段训练最稳定但成本高

对比总结

方法类型参数量外推能力代表模型
Sinusoidal绝对0原版 Transformer
Learned绝对O(n·d)BERT, GPT-2
RoPE相对0Llama, Qwen, DeepSeek
ALiBi相对0很好BLOOM, MPT
NoPE0-实验性方法

Synthesis

位置编码是 Transformer 架构中"看似简单却至关重要"的组成部分。从最初的固定正弦函数到 RoPE 的旋转矩阵表示,这一领域的演进体现了从"绝对"到"相对"、从"显式"到"隐式"的趋势。RoPE 已成为当前主流模型的标准选择,而长上下文扩展技术(YaRN、NTK-aware)则是解决实际应用中常见的长文档处理问题的关键。

Sources

  • "Attention Is All You Need" (Vaswani et al., 2017)
  • "RoFormer: Enhanced Transformer with Rotary Position Embedding" (Su et al., 2022)
  • "ALiBi: Press et al., 2021"
  • "YaRN: Efficient Context Window Extension of Large Language Models" (Peng et al., 2023)

AI Knowledge Base — 持续积累