Skip to content

位置编码与 RoPE:模型怎么知道「第几个词」

一、背景

Self-Attention 本身是 集合操作:打乱 token 顺序再算注意力,不加位置信息的话,模型根本分不清谁在前谁在后。所以 Transformer 必须 注入位置信息——早期是 绝对正弦位置编码,后来 可学习位置向量相对位置旋转位置编码 RoPE 各显神通。

读 LLaMA、ChatGLM 等开源结构时,RoPE 几乎成了主流标配之一。搞懂「在复数/二维平面里转一转向量,就相当于加相对位置」这层直觉,看 apply_rotary_pos_emb 就不至于完全黑盒;也和 上下文窗口长外推(extrapolation) 话题连着。

二、核心概念和核心原理(详细解答+通俗解释)

(一)核心概念(先通俗,再详细)

  • 1. 绝对位置编码——给每个位置一个向量通俗解释:第 i 个 token 加上 PE(i),再进注意力。详细解答:原始 Transformer 用 sin/cos 不同频率,使模型能外推一定长度;也可 学习一张位置嵌入表,长度受表大小限制。

  • **2. 相对位置——关心「相距几个 token」**通俗解释:注意力里体现 i 和 j 的间隔,对 长依赖、平移不变 更友好。详细解答:多种实现(RPR、ALiBi 等),RoPE 是其中 融入 Q、K 旋转 的一支。

  • **3. RoPE(Rotary Position Embedding)**通俗解释:把 q、k 按维度两两分组,乘上 与位置相关的旋转矩阵;两个位置内积 只依赖相对位置,且有 距离衰减 直觉。详细解答:实现高效,与 FlashAttention 等兼容好;长上下文扩展 常讨论 base 频率、缩放、NTK-aware 等魔改。

(二)核心原理(通俗拆解,一步一步讲清楚)

  1. 第一步:没有位置,注意力是置换不变的通俗解释:「猫咬狗」和「狗咬猫」若只看成 bag of tokens,可能一样;位置编码打破对称性。详细解答:这是 结构归纳偏置 的来源之一。

  2. 第二步:RoPE 放在 Q、K 上通俗解释:旋转后 q_m^T k_n 由 m−n 决定,自然编码相对距离。详细解答:不必在 attention logits 里再加一大张相对位置偏置表,省参数、好扩展

  3. 第三步:上下文变长时的外推问题通俗解释:训练最长 4K,推理塞 32K 可能糊;要 插值、改 base、微调 等。详细解答:和 长窗口产品 强相关;没有银弹,以实测为准

三、补充进阶知识点(易懂不晦涩,适配新手进阶)

  • 1. ALiBi通俗解释:Attention logits 加与距离成比例的偏置,无显式位置表,外推有讨论。简单补充:与 RoPE 不同路线,知道 「还有这类设计」 即可。

  • 2. 多模态位置通俗解释:图像 patch 有 二维位置,常 展平 + 2D RoPE分离行列编码。简单补充:和 多模态 文章呼应。

  • 3. 和之前知识点的关联(重点) Transformer 必读前置;上下文窗口 拉长 = 位置索引范围变大;Tokenizer 决定序列长度与位置上限关系。

四、文章知识总结

  1. 背景:注意力本身无序;位置编码提供顺序信息。
  2. 核心概念:绝对 vs 相对;RoPE 旋 Q/K,内积显相对位。
  3. 核心原理:打破置换不变;长外推要工程手段。
  4. 进阶:ALiBi;2D 位置;与长窗口实测绑定。
  5. 核心逻辑位置不是「额外一个词」,而是嵌进 Q、K 的几何结构。

总结:RoPE 是现在读 LLM 源码 绕不开的一块;不必一上来推全公式,先抓住 「旋转 = 相对位置」 直觉即可。