🧠 图解记忆:绝对编码记位置编号,RoPE 让 QK 角度携带相对距离;点击图片可查看原图。
Position Encoding = 给每个位置的 Token 加上位置信息,因为 Attention 本身不具备感知顺序的能力。
为什么需要位置编码?
Transformer 的 Self-Attention 是对称操作:
Attention(Q, K, V) 只看 token 之间的相似性,不看它们的先后顺序
"猫追狗" 和 "狗追猫" 用 Self-Attention 处理得到的向量几乎一样!
→ 所以需要额外注入位置信息来区分顺序三种主流位置编码对比
| 编码方式 | 代表模型 | 原理 | 优点 | 缺点 |
|---|---|---|---|---|
| 绝对位置编码 | BERT, GPT-2 | 训练时学一个位置查找表 | 实现简单 | 无法外推到训练时长度的新位置 |
| RoPE | LLaMA, Qwen, DeepSeek | 通过旋转矩阵嵌入位置信息 | 天然支持外推、数学优雅 | 实现稍复杂 |
| ALiBi | T5, Bloom | 在 Attention 分数上加线性偏置 | 推理时无需知道最大长度 | 效果略逊于 RoPE |
RoPE(Rotary Position Embedding)详解(面试重点)
核心思想:把两个向量的点积转化为角度差函数
q·k = |q||k|cos(θ_q - θ_k + φ_pos)具体做法(2D 平面旋转):
给定位置 pos 和维度索引 m,频率 ω_m = 10000^(-2m/d):
[ q₀ ] ← cos(pos·ω_m) -sin(pos·ω_m) ][ q₀ ]
[ q₁ ] sin(pos·ω_m) cos(pos·ω_m) ][ q₁ ]
即:q 和 k 分别旋转到自己的位置角度,然后点积自动包含位置差信息RoPE 的三个关键优势:
- 绝对位置→相对位置转化:
q(pos_i)·k(pos_j)只依赖于pos_j - pos_i(相对位置),更符合语言规律 - 长度外推能力强:理论上可以推理到比训练更长序列(虽然实践中有退化)
- 不需要重新训练:已有的预训练模型只需加 RoPE 即可支持更长上下文
面试加分点
- YaRN(Yet another RoPE extension):2025-2026 年的改进方案,通过在 RoPE 基础上加入缩放因子,让模型能处理比训练长数倍的上下文(如训练 8K、推理 128K)
- 工程建议:部署开源模型时如果要做长上下文推理,优先选 RoPE 系列模型(LLaMA/Qwen/DeepSeek)
面试话术:
"Self-Attention 本质是对称操作,无法区分'猫追狗'和'狗追猫'的顺序差异,所以必须加位置编码。RoPE 是目前最主流的方案——它通过旋转矩阵把位置信息嵌入到 Q/K 向量中,好处是点积自动变成相对位置依赖,还支持长度外推。现在主流的 LLaMA、Qwen、DeepSeek 都用 RoPE。如果需要比训练更长的上下文,可以用 YaRN 这类扩展方法。"
