自注意力本身是置换不变的——打乱输入顺序,输出只是跟着重排,模型完全感知不到词序。位置编码为每个位置注入顺序信息。原始 Transformer 用固定的正弦余弦函数;BERT 用可学习的绝对位置嵌入;现代 LLM(LLaMA、Qwen、DeepSeek)几乎全部采用 RoPE(旋转位置编码)。
RoPE 的做法:把 Q、K 向量按维度两两分组,每组视为二维向量,按位置 m 乘以一个旋转矩阵,旋转角随维度组呈几何级数变化。妙处在于:两个位置 m、n 的向量做点积时,结果只依赖相对位置 m−n——旋转的相对性使点积天然编码相对距离,且随距离增大注意力自然衰减,符合语言局部性先验。
易错点:RoPE 作用在 Q、K 上而非嵌入层;它是相对位置编码但实现方式是绝对旋转。追问方向:RoPE 外推为何在长上下文失效,NTK-aware 插值和 YaRN 如何补救?ALiBi 的思路有何不同?