Skip to content

位置编码(Positional Encoding)入门

📅 主题:为什么 Transformer 需要位置编码,以及常见实现方式

一、为什么需要位置编码

在 Transformer 里,注意力机制本质上是对一组 token 做加权聚合。
如果只看 token 本身而不看顺序,模型会把句子当成“词袋”:

  • 我爱你你爱我 的 token 集合一样,但语义不同;
  • 先后顺序、距离远近都会影响句意。

所以需要给每个 token 加上“位置信息”,告诉模型:

  1. 这个 token 在序列的第几个位置;
  2. 不同 token 之间相隔多远;
  3. 顺序变化是否会改变语义关系。

位置编码就是把这些顺序信息注入到模型表示中的方法。


二、位置编码的基本思路

最常见做法是:在输入层把 词向量位置向量 相加:

x_i = token_embedding_i + position_embedding_i

其中:

  • token_embedding_i 表示第 i 个 token 的语义;
  • position_embedding_i 表示第 i 个位置的位置信息。

这样同一个词在不同位置会得到不同的最终表示,模型就能利用顺序信息。


三、经典方案:正弦/余弦位置编码

Transformer 原论文使用的是固定函数位置编码(sin/cos):

  • 偶数维:PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
  • 奇数维:PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

直观理解:

  • 不同维度对应不同频率;
  • 低频维度编码长距离趋势,高频维度编码局部细节;
  • 组合后可表达丰富的位置模式。

优点

  1. 无需学习参数:不增加可训练参数量;
  2. 可外推到更长序列:理论上能给训练时没见过的位置生成编码;
  3. 实现简单稳定

局限

  • 固定函数表达能力有限,不能直接根据任务学习“最优位置表示”。

四、可学习位置编码(Learnable PE)

另一个常见方案是把位置向量当成可训练参数:

  • 每个位置一个向量;
  • 训练过程中与模型参数一起更新。

优点

  • 更灵活,可针对任务数据学习到更适配的位置表示。

局限

  • 往往受最大训练长度约束,超过长度可能无法直接外推;
  • 需要额外参数与训练数据支撑。

很多工程实践会在“可学习能力”和“长度外推能力”之间权衡选择。


五、相对位置编码:关注“距离关系”

绝对位置编码告诉模型“我在第几位”;
而很多任务更关心“我和你相隔几位”。

相对位置编码的核心是把注意力分数与相对距离绑定,例如:

  • 近邻 token 给予不同偏置;
  • 对不同相对位移(+1、-1、+10)使用不同参数或函数。

这类方法常用于:

  • 长文本建模(更稳健的距离感知)
  • 结构化序列任务

六、RoPE:旋转位置编码(Rotary Positional Embedding)

在大模型中非常常见的方案是 RoPE
它不是把位置向量“加到输入上”,而是把位置关系通过“旋转变换”作用到 Q/K 空间:

  • 让注意力分数天然编码相对位置信息;
  • 在长上下文场景通常表现更好;
  • 易与现代 Transformer 结构结合。

你可以把它理解为:
在计算注意力相似度时,把“位置关系”直接融进 QK 匹配过程。


七、长上下文下的位置编码挑战

当上下文从 4K、8K 扩到 32K、128K 甚至更长时,位置编码会面临:

  1. 外推能力问题:训练长度之外是否还能稳定工作;
  2. 数值稳定性问题:长距离位置下相似度分布是否退化;
  3. 任务迁移问题:在长上下文推理中是否还能保持短上下文能力。

常见工程手段包括:

  • 采用更适合长序列的位置编码(如 RoPE 相关改造);
  • 上下文扩展训练或继续预训练;
  • 缓存与分块策略配合(如 KV Cache + 滑窗)。

八、位置编码在应用侧的启示

虽然业务开发者通常不直接改模型结构,但理解位置编码有助于解释很多现象:

  1. 长文问答性能波动:模型可能在超长上下文下定位关键信息变弱;
  2. “中间遗忘”问题:某些模型对开头/结尾更敏感,对中间段关注不足;
  3. RAG 注入策略:检索片段放在什么位置、顺序如何,会影响模型关注度;
  4. Prompt 结构设计:关键指令和关键证据尽量靠近问题或输出要求位置。

换句话说,位置编码不仅是模型内部细节,也会影响上层产品效果。


九、小结

  1. Transformer 的注意力本身不感知顺序,必须靠位置编码补充位置信息。
  2. 经典做法包括固定的 sin/cos 编码和可学习位置编码。
  3. 相对位置编码更强调 token 间距离关系;RoPE 是当前大模型常用方案。
  4. 长上下文能力与位置编码设计密切相关。
  5. 在实际应用中,理解位置编码有助于优化 Prompt、RAG 片段排布与长文任务表现。

掌握位置编码,你就补上了 Transformer 基础理论中非常关键的一块拼图。

Released under the MIT License.