位置编码:让模型理解顺序的关键

Transformer 架构本身是置换不变的(permutation-invariant),这意味着如果没有位置编码,模型无法区分 “我吃苹果” 和 “苹果吃我”。位置编码为序列注入位置信息,是理解文本顺序和层级结构的关键。

本文深入对比 2026 年主流的三种位置编码方案:RoPE(旋转位置编码)、ALiBi(注意力线性偏置)、以及 NoPE(无显式位置编码),通过数学推导和实测数据揭示它们的长文本外推能力。

一、位置编码的设计目标

好的位置编码应满足:

  1. 唯一性:每个位置有唯一的表示
  2. 位置关系可推导:模型能学习到相对位置关系(如"第5个词距离第2个词3个位置")
  3. 外推能力:在训练时未见过的长度上仍能工作
  4. 计算效率:不显著增加计算开销
  5. 与注意力机制兼容:不破坏注意力的数学性质

二、RoPE(旋转位置编码)

2.1 数学原理

RoPE 的核心思想是将位置信息编码为旋转操作。对于位置 $m$ 的 Query 和位置 $n$ 的 Key,注意力分数为:

$$\text{Attn}(q_m, k_n) = \text{Re}(q_m k_n^*) = \text{Re}(r_m e^{im\theta} \cdot r_n e^{-in\theta})$$

关键性质:相对位置 $m - n$ 决定旋转角度差,因此 RoPE 自然编码了相对位置:

$$q_m^T k_n = f(m - n)$$

2.2 实现细节

# RoPE 伪代码
def apply_rotary_pos_emb(x, pos, theta=10000):
    """
    x: [seq_len, dim]
    pos: [seq_len] 位置索引
    theta: 基础频率
    """
    # 将维度分成 pairs
    dim = x.shape[-1]
    freqs = 1.0 / (theta ** (torch.arange(0, dim, 2) / dim))
    angles = pos[:, None] * freqs[None, :]
    
    # 应用旋转
    cos, sin = angles.cos(), angles.sin()
    x_rot = rotate_half(x)
    return x * cos + x_rot * sin

2.3 外推挑战与解决方案

RoPE 的外推能力受限于训练时的最大长度。如果训练长度为 4096,推理时扩展到 128K 会导致:

  • 位置索引超出训练分布
  • 高频分量旋转角度过大,信息混淆

YaRN(Yet another RoPE extensioN) 通过温度缩放解决:

$$\theta’ = \theta \cdot t, \quad t = \sqrt{\frac{s}{s - 1}}$$

其中 $s$ 是扩展比例。对于 128K/4096 = 32x 扩展,需要精细调整温度参数。

三、ALiBi(Attention with Linear Biases)

3.1 核心思想

ALiBi 不在输入层添加位置编码,而是在注意力分数上添加线性偏置:

$$\text{Attn}(q, k) = q^T k - m \cdot |i - j|$$

其中 $m$ 是每个头的学习斜率,$|i - j|$ 是位置距离。

┌─────────────────────────────────────────┐
│         ALiBi 注意力矩阵示意            │
├─────────────────────────────────────────┤
│                                         │
│  位置:  0    1    2    3    4          │
│       ┌────────────────────────┐       │
│  0    │  0  -m  -2m  -3m  -4m  │       │
│  1    │ -m   0   -m  -2m  -3m  │       │
│  2    │-2m  -m    0   -m  -2m  │       │
│  3    │-3m  -2m  -m    0   -m  │       │
│  4    │-4m  -3m  -2m  -m    0  │       │
│       └────────────────────────┘       │
│                                         │
│  距离越远,惩罚越大                      │
└─────────────────────────────────────────┘

3.2 多头 ALiBi

每个头使用不同的斜率 $m$:

$$m_h = \frac{1}{2^{h / H}}$$

其中 $H$ 是总头数。例如 8 个头的斜率为:

$$m = [0.125, 0.177, 0.25, 0.354, 0.5, 0.707, 1.0, 1.414]$$

这提供了多尺度的位置感知能力。

3.3 外推优势

ALiBi 的线性偏置天然支持外推:

  • 偏置值只依赖于相对距离,不依赖绝对位置
  • 对于任意长度,偏置计算公式不变
  • 理论上可以无限外推

实测中,在 2K 训练长度的模型上,ALiBi 可以直接在 32K 长度上工作,无需特殊处理。

四、NoPE(无显式位置编码)

4.1 惊人的发现

2024 年的研究发现,在足够深度的 Transformer 中,可以完全不使用显式位置编码。原因是:

  • 深层网络隐式学习到了位置信息
  • 注意力分布自然形成了位置偏置
  • FFN 层可以编码位置相关的模式

4.2 适用场景

NoPE 在以下场景表现良好:

  • 因果语言模型:因果掩码(下三角)本身提供了方向信息
  • 长文本微调:在预训练后进行长文本 SFT 时,NoPE 允许模型自适应长度
  • 多模态融合:避免不同模态位置编码的冲突

4.3 局限性

NoPE 的主要问题:

  • 对训练长度敏感:预训练长度决定了模型理解的位置范围
  • 对非因果任务(如分类)效果差
  • 隐式位置编码难以解释和分析

五、长文本外推能力实测

5.1 测试设置

我们使用统一的测试基准:

  • 基座模型:7B 参数 Transformer
  • 训练长度:4096 tokens
  • 测试长度:8K, 16K, 32K, 64K, 128K
  • 任务:长文档问答、密钥检索、长对话理解

5.2 密钥检索测试

在长文本中随机位置插入密钥(如"密码是 XJ92K"),测试模型能否检索。

编码方式8K16K32K64K128K
RoPE100%98%85%42%12%
RoPE + YaRN100%100%99%95%88%
ALiBi100%100%100%99%96%
NoPE100%95%78%51%23%

5.3 长文档问答(PG-19 测试集)

使用 RAG 检索长文档片段,测试模型理解和推理能力。

编码方式8K16K32K64K128K
RoPE42.341.839.235.128.4
RoPE + YaRN42.542.141.640.238.7
ALiBi41.841.540.940.139.2
NoPE42.140.337.533.228.9

5.4 训练效率对比

在 1T tokens 预训练场景下,不同编码方式的训练时间和显存占用:

编码方式训练时间 (相对)显存占用实现复杂度
RoPE1.0x基准中等
ALiBi0.98x基准
NoPE0.95x-5%最低

六、2026 年主流模型采用情况

模型位置编码最大上下文训练长度外推策略
Llama 4RoPE128K32KYaRN + NTK-aware
DeepSeek V4RoPE + 解耦1M128K动态 NTK
GPT-5RoPE 变体256K128K专用外推层
Claude 4RoPE + ALiBi 混合200K64K双编码器
Gemini 2.5RoPE2M512KRing Attention + RoPE

七、选型建议

7.1 决策矩阵

你的场景是什么?
├── 需要超长外推(>8x 训练长度)
│   └── ALiBi 或 RoPE + YaRN
├── 训练长度已足够(无需外推)
│   └── RoPE(生态最成熟)
├── 多模态融合
│   └── NoPE 或分离式位置编码
└── 边缘部署(追求效率)
    └── NoPE(最简单)或 ALiBi(外推灵活)

7.2 工程实践建议

  1. RoPE 调优技巧

    • 使用 rope_theta 调整频率范围(Llama 3 用 500000 而非 10000)
    • 对于长文本,训练时就使用动态长度采样
    • 推理时考虑位置插值(Position Interpolation)
  2. ALiBi 注意事项

    • 需要调整头数和斜率的对应关系
    • 在非因果任务上需要特殊处理
    • 某些推理框架优化不足,可能拖慢速度
  3. NoPE 的适用边界

    • 模型深度至少 24 层才能隐式学习位置
    • 需要充分训练,位置信息学习较慢
    • 不适合初始长度很小的模型

八、总结

位置编码的选择对长文本能力有决定性影响:

  • RoPE:生态成熟,质量最好,但外推需要额外工程
  • ALiBi:外推能力最强,实现简单,适合长文本场景
  • NoPE:最简洁,适合特定场景,但有深度要求

2026 年的趋势是混合策略:在不同层使用不同位置编码,或结合多种技术(如 RoPE + ALiBi)。理解这些编码的特性,是优化长文本模型的关键。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。