跳转至

Positional embedding

位置编码向注意力机制提供序列顺序;仅有 token embedding 时,注意力本身对排列不敏感。因为缩放点积注意力对输入做的是与位置无关的加权求和,若不加位置信息,打乱 token 顺序得到的表示几乎不变。

位置编码的演进本质上是在回答同一个问题:如何在「绝对位置」「相对距离」「长度外推」三者之间取舍。最初 Transformer 论文给出正弦位置编码,用绝对位置构造出具有相对线性关系的向量;随后 T5 与 ALiBi 直接把「相对距离」作为偏置注入注意力,以换取更好的外推能力;RoPE 则通过旋转把相对位置关系编码进 Q、K 的乘积中,兼具相对位置的外推优势与绝对式实现的简洁,成为当前多数大模型的选择。

快速开始

加载模型时保持训练时的位置编码类型和最大长度配置一致。模型在训练时用哪种位置编码、以多长序列训练,推理时就必须用同样的类型,且不能超过其可靠长度;否则位置信息会失配,输出质量下降。

扩展上下文前先验证 RoPE scaling 等方法对短文本没有明显回归。缩放通常是为长序列准备的,但可能影响短序列的注意力分布,因此扩窗后应在短、中、长三档分别评测,确认短文本指标没有因为缩放而变差。

验证时先确认位置编码的维度、最大长度与实现类型,再跑一个短序列前向检查形状,最后做长度外推实验。若发现外推失败,优先核对缩放因子与实现是否与模型训练配置一致,而不是盲目加大缩放。

常见方法

绝对位置嵌入直接查表:维护一个 (max_len, hidden_size) 的可学习矩阵,位置 \(p\) 直接取第 \(p\) 行加到 token embedding 上。实现简单,但长度固定,超过 max_len 的位置没有对应的行,需要截断或外推。GPT 系列早期即采用这类可学习位置嵌入。

原始 Transformer 使用正弦位置编码 (Sinusoidal Positional Encoding),对位置 \(pos\) 与维度索引 \(i\) 构造:

\[ PE(pos,2i)=\sin\left(\frac{pos}{10000^{2i/d}}\right),\qquad PE(pos,2i+1)=\cos\left(\frac{pos}{10000^{2i/d}}\right) \]

它无需训练,且不同位置之间存在线性关系(可通过旋转矩阵从一个位置变换到另一个位置),但外推能力有限,超长位置仍可能退化。

相对位置方法建模 token 间距离:T5 用可学习的相对偏置,ALiBi 直接把随距离线性递减的偏置加到注意力分数上,让模型对「位置差」而非绝对位置敏感。ALiBi 的具体做法是:

\[ \operatorname{score}(q_i,k_j)=\frac{q_i^\top k_j}{\sqrt{d}}-m\,(i-j),\qquad j\le i \]

其中斜率 \(m\) 按头指数递减(如以 \(2^{-8/h}\) 起步的几何序列),距离越远惩罚越大。相对方法往往比绝对方法有更好的长度外推能力,因为模型学到的是「距离」这一可平移的模式,而非固定的绝对坐标。

RoPE 通过旋转 Q、K 注入相对位置信息:对位置 \(m\) 的向量按角度 \(m\theta_i\) 旋转,两个位置的注意力分数只依赖其相对距离 \(m-n\):

\[ q_m=R_m q,\qquad k_n=R_n k,\qquad \langle q_m,k_n\rangle=\langle R_{m-n}q,k\rangle \]

其中 \(\theta_i=10000^{-2i/d}\) 随维度增大而递减,\(R_m\) 是对每对相邻维度做二维旋转的块对角矩阵。RoPE 兼具相对位置的外推优势和实现上的简洁,是当前多数大模型的选择,但不同实现不可随意替换。

案例:长度外推

一个模型原生训练到 4K token,直接推到 32K 可能位置失配:位置 4K 到 32K 之间的旋转角度是训练时从未出现的,注意力分数会异常,模型可能输出重复或无意义内容。此时应使用与模型匹配的 RoPE 缩放方法(如 NTK-aware、YaRN 等)把长位置压缩进训练见过的角度区间。这些方法的核心都是调整 \(\theta_i\) 或位置索引,使新长度的频率分布落在训练分布附近。

采用对应的缩放方法后,分别在短、中、长文本评测,避免只看长文本可运行就判定成功。短文本(如 1K 内)验证缩放没有引入回归,中文本(如 4K 到 8K)验证过渡平滑,长文本(如 32K)用 针入草堆 之类任务验证真实检索能力。

排查时先确认缩放方法、缩放因子与模型实现一致,再检查推理时是否真正应用了缩放而非仅改了配置。常见失败是只改 max_position_embeddings 配置却未启用对应的缩放逻辑,导致长文本「能跑」但质量不达标。

相关主题