Transformer 模型的自注意力(Self-Attention)机制本身是置换不变的(permutation-invariant),即它对输入 token 的顺序不敏感:打乱输入序列的顺序,注意力输出在数学上可能完全相同(忽略位置编码影响)。因此,原始 Transformer 并不具备内在的序列顺序感知能力。
为弥补这一缺陷,Transformer 引入了位置编码(Positional Encoding)——通常是正弦/余弦函数生成的固定编码(如原论文中),或可学习的位置嵌入(Learned Positional Embedding)——将其加到词嵌入(Token Embeddings)上,从而为模型显式注入位置信息。这样,模型才能区分“猫追狗”和“狗追猫”这类依赖词序的语义差异。
简言之:
✅ 自注意力 → 捕获全局依赖,但无视原始顺序;
✅ 位置编码 → 补充序数信息,使模型具备时序/序列建模能力。
import torch
import math
def sinusoidal_positional_encoding(seq_len, d_model):
# 生成标准 Transformer 正弦位置编码 (seq_len, d_model)
pe = torch.zeros(seq_len, d_model)
position = torch.arange(0, seq_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
pe[:, 0::2] = torch.sin(position * div_term)
pe[:, 1::2] = torch.cos(position * div_term)
return pe.unsqueeze(0) # (1, seq_len, d_model)
相对位置编码(Relative Position Encoding, RPE)的核心思想是:模型不应直接依赖 token 的绝对位置索引(如第1位、第100位),而应建模任意两个 token 之间的相对距离(如 i−j = +3 或 −5)及其方向。相比绝对位置编码(Absolute PE),RPE 更符合语言的局部性与平移不变性直觉(例如,“动词后紧跟宾语”这一模式不依赖于句子开头,而取决于相对偏移),从而在长程依赖建模、序列长度外推和泛化性上更具优势。
以下是主流相对位置编码机制的关键实现逻辑与优势对比:
🔹 T5 中的 Bias-based RPE(可学习相对位置偏差)
- 不显式编码位置,而是在自注意力的 logits 上添加一个可学习的偏置项:
[
\text{Attention}(Q,K,V){i,j} \propto \exp\left( \frac{Q_i K_j^\top}{\sqrt{d_k}} + b{i-j} \right)
] - 其中 (b_{i-j}) 是维度为 (2k+1) 的可学习向量((k) 为最大相对距离,如128),超出范围的距离被截断或映射到边界桶(bucketing)。
✅ 优势:参数少、计算轻量、天然支持变长推理;
❌ 局限:需预设最大相对距离,超距关系建模受限。
🔹 RoPE(Rotary Position Embedding,如 LLaMA、Qwen、Phi 等采用)
- 将位置信息以旋转矩阵形式融入 Q 和 K 的向量空间:对每个 head 的 query/key 向量按维度分组,应用角度随位置线性增长的二维旋转变换:
[
\begin{bmatrix}
x_{2i} \ x_{2i+1}
\end{bmatrix}
\mapsto
\begin{bmatrix}
\cos m\theta_i & -\sin m\theta_i \
\sin m\theta_i & \cos m\theta_i
\end{bmatrix}
\begin{bmatrix}
x_{2i} \ x_{2i+1}
\end{bmatrix}
]
其中 (m) 是 token 位置索引,(\theta_i = 10000^{-2i/d})。 - 关键性质:(Q_i^\top K_j) 的内积结果自动包含 (\cos(m_i - m_j)) 项,即隐式编码了相对位置差。
✅ 优势:理论支持无限外推、无距离截断、保留绝对位置的几何结构、与 RoFormer/RoFormerV2 一脉相承;
✅ 实践效果:显著提升长文本理解(如 128K 上下文)、减少幻觉、增强位置鲁棒性。
🔍 对比小结:
| 维度 | 绝对位置编码 | T5 Bias RPE | RoPE |
|---|---|---|---|
| 位置建模方式 | 每个位置独立嵌入 | logits 偏置(i−j 查表) | Q/K 向量旋转(隐式相对) |
| 长程外推能力 | 差(需插值/重训) | 中(受 max_distance 限) | 极强(理论无界) |
| 参数量 | O(L×d) 或 O(d) | O(k)(k ≪ L) | 零参数(确定性旋转) |
| 是否破坏注意力平移等变性 | 否(但非本质) | 是(引入位置偏差) | 否(保持旋转等变性) |
因此,RPE(尤其是 RoPE)并非简单“替代”绝对编码,而是通过更符合序列建模本质的几何约束与归纳偏置,使模型在训练分布外(如更长上下文、跨文档推理)仍能稳定捕获远距离依赖。

1006



被折叠的 条评论
为什么被折叠?



