位置编码(Positional Encoding)入门
📅 主题:为什么 Transformer 需要位置编码,以及常见实现方式
一、为什么需要位置编码
在 Transformer 里,注意力机制本质上是对一组 token 做加权聚合。
如果只看 token 本身而不看顺序,模型会把句子当成“词袋”:
我爱你和你爱我的 token 集合一样,但语义不同;- 先后顺序、距离远近都会影响句意。
所以需要给每个 token 加上“位置信息”,告诉模型:
- 这个 token 在序列的第几个位置;
- 不同 token 之间相隔多远;
- 顺序变化是否会改变语义关系。
位置编码就是把这些顺序信息注入到模型表示中的方法。
二、位置编码的基本思路
最常见做法是:在输入层把 词向量 与 位置向量 相加:
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))
直观理解:
- 不同维度对应不同频率;
- 低频维度编码长距离趋势,高频维度编码局部细节;
- 组合后可表达丰富的位置模式。
优点
- 无需学习参数:不增加可训练参数量;
- 可外推到更长序列:理论上能给训练时没见过的位置生成编码;
- 实现简单稳定。
局限
- 固定函数表达能力有限,不能直接根据任务学习“最优位置表示”。
四、可学习位置编码(Learnable PE)
另一个常见方案是把位置向量当成可训练参数:
- 每个位置一个向量;
- 训练过程中与模型参数一起更新。
优点
- 更灵活,可针对任务数据学习到更适配的位置表示。
局限
- 往往受最大训练长度约束,超过长度可能无法直接外推;
- 需要额外参数与训练数据支撑。
很多工程实践会在“可学习能力”和“长度外推能力”之间权衡选择。
五、相对位置编码:关注“距离关系”
绝对位置编码告诉模型“我在第几位”;
而很多任务更关心“我和你相隔几位”。
相对位置编码的核心是把注意力分数与相对距离绑定,例如:
- 近邻 token 给予不同偏置;
- 对不同相对位移(+1、-1、+10)使用不同参数或函数。
这类方法常用于:
- 长文本建模(更稳健的距离感知)
- 结构化序列任务
六、RoPE:旋转位置编码(Rotary Positional Embedding)
在大模型中非常常见的方案是 RoPE。
它不是把位置向量“加到输入上”,而是把位置关系通过“旋转变换”作用到 Q/K 空间:
- 让注意力分数天然编码相对位置信息;
- 在长上下文场景通常表现更好;
- 易与现代 Transformer 结构结合。
你可以把它理解为:
在计算注意力相似度时,把“位置关系”直接融进 QK 匹配过程。
七、长上下文下的位置编码挑战
当上下文从 4K、8K 扩到 32K、128K 甚至更长时,位置编码会面临:
- 外推能力问题:训练长度之外是否还能稳定工作;
- 数值稳定性问题:长距离位置下相似度分布是否退化;
- 任务迁移问题:在长上下文推理中是否还能保持短上下文能力。
常见工程手段包括:
- 采用更适合长序列的位置编码(如 RoPE 相关改造);
- 上下文扩展训练或继续预训练;
- 缓存与分块策略配合(如 KV Cache + 滑窗)。
八、位置编码在应用侧的启示
虽然业务开发者通常不直接改模型结构,但理解位置编码有助于解释很多现象:
- 长文问答性能波动:模型可能在超长上下文下定位关键信息变弱;
- “中间遗忘”问题:某些模型对开头/结尾更敏感,对中间段关注不足;
- RAG 注入策略:检索片段放在什么位置、顺序如何,会影响模型关注度;
- Prompt 结构设计:关键指令和关键证据尽量靠近问题或输出要求位置。
换句话说,位置编码不仅是模型内部细节,也会影响上层产品效果。
九、小结
- Transformer 的注意力本身不感知顺序,必须靠位置编码补充位置信息。
- 经典做法包括固定的 sin/cos 编码和可学习位置编码。
- 相对位置编码更强调 token 间距离关系;RoPE 是当前大模型常用方案。
- 长上下文能力与位置编码设计密切相关。
- 在实际应用中,理解位置编码有助于优化 Prompt、RAG 片段排布与长文任务表现。
掌握位置编码,你就补上了 Transformer 基础理论中非常关键的一块拼图。