土法炼钢兴趣小组的算法知识备份

【Transformer 与注意力机制】41|位置编码演进:从 Sinusoidal 到 RoPE、ALiBi 与长度外推的边界

文章导航

分类入口
transformer
标签入口
#transformer#positional-encoding#rope#alibi#long-context#length-generalization

Transformer系列导航

按系列顺序继续阅读,而不是停在单篇。

系列目录上一篇:【Transformer 与注意力机制】40|三大路线之争:为什么大模型几乎都是 Decoder-only下一篇:【Transformer 与注意力机制】42|FlashAttention:注意力计算的硬件级重写

目录

第 21 篇证明了两件事:self-attention 是排列等变的,没有位置信息就分不清”猫吃鱼”和”鱼吃猫”;sinusoidal 位置编码的核心性质——相对位移可以用一个不依赖绝对位置的线性变换表达——是一条”免费下限”,不保证模型真的学会用它。这条免费下限没有被浪费。RoPE 和 ALiBi 做的事情,正是把这条性质从”模型可能学到”的开放问题,变成”结构上焊死”的确定事实。

但焊死不等于没有代价。把上下文从 4K 推到 128K、1M 之后,位置编码不再是”给 token 一个坐标”这么简单的事:RoPE 的旋转角度在超长距离上会绕出多少圈、绕圈之后还剩多少可用信息,是可以直接算出来的;ALiBi 的线性衰减在什么任务上是先验红利、在什么任务上是系统性惩罚,也是可以从公式看出来的。更麻烦的是,模型”跑得动”某个长度,和模型”能在那个长度里可靠检索、推理、不丢指令”,是两件不同的事——这条鸿沟不是位置编码能单独填上的,需要专门的评测去暴露。

本篇能让你学会三件事:

  1. RoPE 如何把相对位置直接焊进 \(Q \cdot K^\top\),以及为什么这个点积严格只依赖 \(m-n\)
  2. RoPE 的频率通道在长距离上为什么会”绕圈”,RoPE scaling、位置插值、NTK-aware、YaRN 各自改的是哪个假设;
  3. 为什么”有效上下文”和”宣称上下文”是两个不同的数字,以及”相对位置编码是否用归纳偏置换了长度”这条至今没有定论的争论。

本篇不重复 21 篇已经证明过的排列等变性证明和 sinusoidal 三角恒等式推导,只在需要衔接的地方引用结论;长上下文的分布式工程(Ring Attention、Ulysses、KV 压缩)留给 llm-infra 系列第 16 篇,本篇只在涉及边界时点一下链接。


一、从”免费下限”到”结构性保证”

先把 21 篇的收尾结论摆出来,因为它是本篇的起点。原始 Transformer 的 sinusoidal 编码有一条漂亮的性质:对任意固定偏移 \(k\),存在不依赖 \(\mathrm{pos}\) 的线性变换 \(M_k\),使得 \(\operatorname{PE}(\mathrm{pos}+k) = M_k \operatorname{PE}(\mathrm{pos})\)。这条性质来自 \(\sin(\alpha+\beta)\)\(\cos(\alpha+\beta)\) 的加法公式,本质是一个旋转矩阵。

但 21 篇也指出了这条性质的边界:“能用线性变换表达”不等于”模型一定会学到这个变换”。sinusoidal PE 是加到输入 embedding 上的一个向量,它和 word embedding 混在一起之后,要不要保留、怎么保留这条相对位移性质,完全交给 \(W_Q\)\(W_K\) 在训练里自己学。21 篇 6.6 节的手算实验也显示,单凭 sinusoidal 内积,attention 分数在远端会因为高频维度绕圈而反弹(\(\mathrm{score}(i,i\pm4)\)\(\mathrm{score}(i,i\pm3)\) 还大),这不是训练能力不够,是几何结构本身留了这个漏洞。

学习 embedding 的问题更直接:BERT、GPT-2 把位置编码做成一张 \((\mathrm{max\_len}, d_{\mathrm{model}})\) 查表,每一行随训练更新。这张表在训练长度之外没有任何一行被更新过梯度——不是”泛化差”,是那些位置对应的参数从未被优化过。推理时喂进去超出 \(\mathrm{max\_len}\) 的位置,模型面对的不是一个有规律但没见过的新坐标,而是一段随机初始化、从未参与过反向传播的向量。截断、扩表重训、换成函数型编码,是仅有的三条出路。

RoPE 和 ALiBi 的共同思路是:不要把相对位置的可学习性交给训练去赌,直接把它做成结构上的保证。区别在于焊接的位置不同——RoPE 把它焊进 Q、K 向量本身的几何形状里,ALiBi 把它焊进 attention logits 的加法项里。下面分别拆开看。


二、RoPE:把相对位置焊进 \(Q \cdot K^\top\) 本身

2.1 构造:按位置旋转 Q、K

RoPE(Rotary Position Embedding,Su et al. 2021)的构造很直接:把 \(d\) 维的 Q、K 向量两两分组成 \(d/2\) 对,每一对看作二维平面上的一个点,按 token 的位置把这个点旋转一个角度。

\(i\) 对维度(\(i=0,1,\dots,d/2-1\))的旋转角速度是:

\[ \theta_i = \mathrm{base}^{-2i/d} \]

位置 \(m\) 处的 token,第 \(i\) 对维度旋转的角度是 \(m\theta_i\)。把所有 \(d/2\) 对的旋转矩阵按块对角拼起来,得到整个旋转矩阵 \(R_{\Theta,m}\)

\[ R_{\Theta,m} = \bigoplus_{i=0}^{d/2-1} \begin{pmatrix} \cos(m\theta_i) & -\sin(m\theta_i) \\ \sin(m\theta_i) & \cos(m\theta_i) \end{pmatrix} \]

RoPE 对 Q、K 的作用是:\(q_m = R_{\Theta,m} W_Q x_m\)\(k_n = R_{\Theta,n} W_K x_n\)。也就是先按标准方式投影出 Q、K,再按各自的位置旋转一下,之后才去做点积。

这个构造本身没有引入任何新参数(\(\theta_i\) 是公式算出来的,不学习),也没有改变 Q、K 的维度。它改变的只是”点积之前多做一步旋转”这一件事。

2.2 推导:为什么旋转之后点积只依赖 \(m-n\)

这是 RoPE 的核心,也是它相比 sinusoidal 的关键跃迁——21 篇证明的”\(\operatorname{PE}(\mathrm{pos}+k)\)\(\operatorname{PE}(\mathrm{pos})\) 的线性变换”,在这里被直接钉进了 attention 打分公式,不再需要模型自己去发现。

旋转矩阵是正交矩阵,满足 \(R_{\Theta,m}^\top R_{\Theta,m} = I\),也就是 \(R_{\Theta,m}^\top = R_{\Theta,m}^{-1} = R_{\Theta,-m}\)。旋转矩阵还满足角度可加性:\(R_{\Theta,-m} R_{\Theta,n} = R_{\Theta,n-m}\)(先转 \(-m\theta\) 再转 \(n\theta\),合成转 \((n-m)\theta\))。

把这两条性质代入 \(q_m^\top k_n\)

\[ \begin{aligned} q_m^\top k_n &= \left(R_{\Theta,m} W_Q x_m\right)^\top \left(R_{\Theta,n} W_K x_n\right) \\ &= x_m^\top W_Q^\top R_{\Theta,m}^\top R_{\Theta,n} W_K x_n \\ &= x_m^\top W_Q^\top R_{\Theta,n-m} W_K x_n \end{aligned} \]

最后一步只剩下 \(R_{\Theta,n-m}\)——一个只依赖相对位置 \(n-m\) 的旋转矩阵。\(m\)\(n\) 各自的绝对值已经在推导中完全消失,只留下它们的差。这不是训练学出来的近似性质,是矩阵代数上的恒等式:对任意 \(x_m\)\(x_n\)、任意训练好的 \(W_Q\)\(W_K\),这个点积严格只依赖 \(n-m\)

用第 \(i\) 个频率块单独看会更直观。设该块上 \(q\)\(k\) 的两个分量分别是 \((q_{2i}, q_{2i+1})\)\((k_{2i}, k_{2i+1})\),把它们写成复数 \(z_q = q_{2i} + \mathrm{j}\, q_{2i+1}\)\(z_k = k_{2i} + \mathrm{j}\, k_{2i+1}\)。按位置旋转等价于乘上单位复数 \(e^{\mathrm{j} m\theta_i}\)\(e^{\mathrm{j} n\theta_i}\);该块对点积的贡献是这两个旋转后复数乘积的实部:

\[ \operatorname{Re}\!\left[\left(z_q e^{\mathrm{j}m\theta_i}\right)\overline{\left(z_k e^{\mathrm{j}n\theta_i}\right)}\right] = \operatorname{Re}\!\left[z_q \bar{z}_k\, e^{\mathrm{j}(m-n)\theta_i}\right] \]

\(z_q \bar{z}_k\) 是内容项,只由 token 本身的语义决定;\(e^{\mathrm{j}(m-n)\theta_i}\) 是纯位置项,只由相对距离 \(m-n\) 和该频率 \(\theta_i\) 决定。这正是 Su et al. (RoFormer, Neurocomputing 2024,原 arXiv:2104.09864) 原文用复平面表述这个构造的方式——内容和位置在每个频率块上是乘法可分离的,比 sinusoidal 加法式的”内容 + 位置”混合更干净:sinusoidal 是把位置向量加到内容向量上,混合后依赖 \(W_Q\)\(W_K\) 学会区分;RoPE 是让位置以旋转角的形式参与运算,内容项和位置项在数学上天然分开。

2.3 高频通道在长距离上为什么会”绕圈”

推导到这一步,容易产生一个乐观的错觉:既然点积严格只依赖 \(m-n\),那距离越远应该越”清楚”才对。事实恰好相反,问题出在旋转是周期函数。

\(i\) 个频率块的旋转周期是:

\[ T_i = \frac{2\pi}{\theta_i} = 2\pi \cdot \mathrm{base}^{2i/d} \]

\(i=0\)\(\theta_0 = \mathrm{base}^0 = 1\)周期恒为 \(2\pi \approx 6.28\) token,与 base 取值完全无关——这是这一节里第一个可以直接核对的公式事实:无论 base 设成 10000 还是 500000,最高频那个块的旋转周期都锁定在 6.28 token 左右。\(i\) 越大,\(\theta_i\) 越小,周期越长。

周期意味着什么:如果相对距离 \(k=n-m\) 超过某个频率块的周期 \(T_i\)\(k\theta_i \bmod 2\pi\) 就会重复出现——这个频率块再也分不清”距离 \(k\)“和”距离 \(k+T_i\)“,它对该频率块的贡献变成纯周期性震荡,不再携带”更远”这个单调信息。高频块(\(i\) 小)周期短,绕圈快,能提供精细的近距离分辨率,但一旦超过几个 token 就开始绕圈;低频块(\(i\) 大)周期长,绕圈慢,能提供粗粒度的远距离单调性,但分辨不出相邻几个 token 的细微差别。这和 21 篇里 sinusoidal 手算实验暴露的”高频维度回绕导致远端反弹”是同一个几何根源——RoPE 没有消除这个问题,只是把它从”加在输入上”挪到了”点积里”,问题的物理结构不变。

这不是抽象讨论,可以直接算。取 \(d=128\)(LLaMA 3 8B 的单头维度:\(\mathrm{dim}=4096\)\(\mathrm{n\_heads}=32\)\(4096/32=128\)),\(\mathrm{base}=10000\)(RoFormer 原文与 LLaMA 1/2 的默认值),逐个频率块计算周期,统计有多少个块的周期已经短于给定上下文长度(即”已经绕完至少一圈”):

上下文长度 base=10000,已绕圈的通道数 base=500000,已绕圈的通道数
4096(4K) 46 / 64 32 / 64
32768(32K) 60 / 64 42 / 64
131072(128K) 64 / 64 49 / 64
1048576(1M) 64 / 64 59 / 64
RoPE 各频率通道的旋转周期,base=10000 与 base=500000 对比

这张表(数据来自本文附带的 images/gen_rope_period.py,公式 \(T_i = 2\pi \cdot \mathrm{base}^{2i/d}\),可直接重算)说明了两件事。第一,用原始 base=10000,在 128K 上下文里,全部 64 个频率通道都已经绕过至少一圈——没有任何一个通道能对”这两个 token 相距多远”给出单调、无歧义的判断,模型此时只能依赖旋转之外的其它信号(比如训练时见过的具体绕圈模式、softmax 温度、causal mask 带来的隐式顺序)去补救。第二,把 base 提到 500000(LLaMA 3 的选择)之后,在 128K 时仍有 15 个通道(\(i=49..63\))还没有绕完一圈,在 1M 时仍有 5 个通道保留着单调信息——base scaling 不是把绕圈问题”解决”了,只是把绕圈的边界往后推,让更多低频通道能覆盖到目标长度。

2.4 RoPE scaling 改的是哪个假设

理解了”绕圈”之后,RoPE scaling 家族的每一种方法都可以还原成”往哪个方向调整通道周期”这一个问题,而不是各自孤立的技巧。

Base scaling(LLaMA 3 把 \(\mathrm{base}\) 从 10000 改到 500000,源码见 meta-llama/llama3ModelArgs.rope_theta):把 \(\mathrm{base}\) 整体调大。周期变化倍数是 \(T_i'/T_i = s^{2i/d}\)\(s=\mathrm{base}'/\mathrm{base}\)),在 \(i=0\) 处恒为 1(不变),随 \(i\) 增大逐渐逼近 \(s\)。也就是说,base scaling 几乎不碰最高频通道(它的短距离分辨率原样保留),只把低频通道的周期成倍拉长——这正是表格里 base=500000 能在更长长度上保留更多”未绕圈”通道的原因。代价是:如果不重新训练,模型在预训练阶段学到的、和具体绕圈节奏绑定的 attention 模式会和新的周期不匹配,因此工程上通常要搭配 continued pretraining。

Position Interpolation(Chen et al., Meta,arXiv:2306.15595,2023,未经 peer review 的预印本):不改 \(\mathrm{base}\),而是把输入位置压缩,\(m \to m \cdot L_{\mathrm{train}}/L_{\mathrm{new}}\)。等价于让每一个频率块的有效角速度都乘上同一个压缩系数 \(1/s\)\(s=L_{\mathrm{new}}/L_{\mathrm{train}}\)),包括 \(i=0\) 的最高频块。这条”一刀切”的假设正是它的问题所在:高频块原本承担的近距离分辨任务被跟着稀释,短距离结构因此受损——这与 llm-infra 第 16 篇里”简单粗暴、精度损失明显”的判断一致。

NTK-aware scaling(社区提出,最初见于 Reddit r/LocalLLaMA 的用户 bloc97 与 emozilla 的帖子,属于未经同行评审的社区技术笔记,只作为工程谱系线索,不单独支撑理论结论):观察到”高频块该保持原样、低频块才需要压缩”,用非均匀公式 \(\mathrm{base}' = \mathrm{base} \cdot s^{d/(d-2)}\) 按频率分段调整。代入可验证:\(i=0\) 处仍是 \(s^0=1\)(不动),\(i\) 接近 \(d/2\) 处趋近 \(s^{-1}\) 的压缩(接近纯插值)——它在数学上是”base scaling 和 Position Interpolation 之间按频率分段插值”的折中方案。

YaRN(Peng et al., Nous Research / EleutherAI,ICLR 2024,原 arXiv:2309.00071)在 NTK-aware 的基础上做了两件事:一是把频率分成”高频保持不变 / 中频用 NTK 式非均匀缩放 / 低频用纯插值”三段,用平滑窗口过渡,而不是一个公式硬套所有频率;二是额外给 attention logits 乘一个温度修正 \(1/t\)\(t = 0.1\ln s + 1\),用来补偿长度增加后 softmax 分布熵的漂移。YaRN 论文报告只需约 400 step、约 1–10B token 的微调就能把 LLaMA 从 8K 扩到 128K,是目前开源社区的事实标准(Qwen、Mistral、DeepSeek 长上下文分支普遍采用)。

四种方法改的都不是 RoPE 的核心恒等式——\(q_m^\top k_n\) 依赖 \(n-m\) 这条结构性质从头到尾没有变过——它们改的是”训练时学到的、和特定周期节奏绑定的 attention 使用方式,能不能在新的周期节奏下继续生效”这一假设。这也是为什么它们都需要或多或少的微调,而不是纯推理期的免费开关:几个方法之间在”改多少、改哪些频率、要不要配合训练”上的取舍,比它们的名字更值得记住。工程上如何选择、如何搭配 continued pretraining、以及 Ring Attention / KV 压缩等配套设施,留给 llm-infra 第 16 篇展开,本篇只钉住”改的是哪个假设”这一层。


三、ALiBi:把距离先验直接写进 attention logits

3.1 构造:线性 bias,不做旋转

ALiBi(Attention with Linear Biases,Press, Smith, Lewis, ICLR 2022)走的是完全不同的路径:它不改 Q、K 本身,只在算好的 attention score 上加一个和距离成正比的惩罚项。causal 场景下,位置 \(i\) 的 query 看位置 \(j \le i\) 的 key 时:

\[ \mathrm{score}_{ij} = \frac{q_i \cdot k_j}{\sqrt{d}} - m_h \cdot (i-j) \]

\(m_h\) 是每个 attention head 各自固定的斜率,不学习,也不随位置变化。论文里 \(n\) 个 head 的斜率取一个几何序列,例如 \(n=8\) 时依次是 \(2^{-1}, 2^{-2}, \dots, 2^{-8}\)(即 \(\tfrac12, \tfrac14, \dots, \tfrac1{256}\)),不同 head 因此对”远近”的敏感程度不同:斜率大的 head 几乎只看邻居,斜率小的 head 允许更远的 token 保留可观的权重。

ALiBi 没有引入任何位置相关的可学习参数,也没有 RoPE 那种”频率块周期”的概念——它是一个纯粹的、随距离单调递减、永不回绕的惩罚。正因为不回绕,它在”训练短、测试长”的外推场景下天然没有 RoPE 高频通道那种”绕圈失真”的问题:距离 1000 的惩罚就是比距离 999 大一点点,不会像 RoPE 某个高频块那样在距离绕回一圈后突然”看起来又近了”。

3.2 近邻优先:什么时候帮,什么时候伤

ALiBi 的先验是”越远的 token 默认越不相关,除非内容项能力压过这个惩罚”。这条先验对不同任务的帮助方向截然不同。

帮的场景:自然语言里大量依赖确实是局部的——形容词修饰邻近名词、代码里变量声明离使用处通常不太远、对话里最近几轮上下文往往比很久以前的更相关。这类任务里,“默认偏向近邻”本身就是一条低方差、大概率对的先验,模型不需要额外花容量去学习”应该关注多远”,直接省了一部分学习成本。同时因为惩罚函数是位置无关的固定公式,从训练长度外推到任意长度都不需要外插任何没见过的参数或频率——这是 ALiBi 论文标题里 “Train Short, Test Long” 的字面含义。

伤的场景:一旦任务需要”精确记住并调用一个很远的具体信息”,线性衰减就变成一个必须被内容相似度硬扛过去的系统性劣势。检索式长上下文任务是最典型的例子——针在很远处,bias 项已经把它的默认权重压得很低,只有当内容匹配度极高时才能翻盘。llm-infra 第 16 篇已经指出,生产上使用 ALiBi 的模型(BLOOM、MPT)“实测长距离语义建模比 RoPE 弱”,这与 ALiBi 的先验方向完全吻合:它牺牲的正是”远处内容也可能同等重要”这类任务的表达力,换回的是外推的稳定性。

3.3 RoPE 与 ALiBi 的位置:几何操作 vs 加法先验

把两者放在一起比较,能看清”相对位置进入 attention”这件事至少有两条不同的实现路径。RoPE 让 Q、K 的几何形状本身携带位置信息,点积结果依赖相对位置,但内容相似度和位置关系是乘法式混合在一起的(旋转本质是复数乘法);ALiBi 完全不动 Q、K,只在打分之后加法式叠加一个与内容无关的距离惩罚。前者的位置信息更”内生”,后者更像一个可解释、可预测、可调节的外部先验。

这也解释了为什么两者在长度外推行为上会出现前一节说的差异:RoPE 携带的是一组周期函数,超过周期会绕圈失真;ALiBi 携带的是一个单调函数,永不绕圈但永远不可能让”很远处”的默认权重反超”很近处”。没有哪一种在所有任务上更优——这正是第五节要展开的争论的一部分。


四、有效上下文 ≠ 宣称上下文

位置编码解决的是”模型能不能在结构上区分远近”,但这不等于”模型会不会在真实任务里正确使用远处信息”。这条鸿沟需要专门的评测去暴露,而现有评测本身也有局限。

4.1 needle-in-a-haystack 为什么会”虚高”

Needle-in-a-Haystack(NIAH,Kamradt, 2023)的方法很简单:把一句无关的话(needle)插进一大段填充文本(haystack)的某个位置,让模型原样复述出来。这个测试对”模型能不能索引到任意深度的 token”是一个合理的下限检验,但它只考一件事——精确复述一句话——这恰好是 RoPE、ALiBi 这类相对位置编码结构上最擅长的能力:只要位置信息没有严重失真,attention 总能在某个 head、某个层里学到”找到这句话、抬高它的权重”。多数官方宣称长度内的模型在 NIAH 上都能接近满分,但这不代表模型能处理更复杂的长程任务。

4.2 RULER:把 NIAH 的”虚高”戳破

RULER(Hsieh et al., NVIDIA,COLM 2024,原 arXiv:2404.06654)在 NIAH 基础上扩出 13 个子任务,包括多针检索、多跳变量追踪、聚合统计、多文档问答,专门用来检验”检索之外还有没有真正的长程理解”。论文摘要给出的结论很直接:评测的 17 个模型几乎都能在原版 NIAH 上拿到接近满分的准确率,但当上下文长度增加时,几乎所有模型在 RULER 的综合任务上出现明显的性能下滑;这些模型都宣称支持 32K 或更长的上下文,但只有一半能在 32K 长度上维持令人满意的表现。 这说明”宣称的最大长度”和”能可靠完成复杂长程任务的长度”之间存在实测可复现的差距,业界通常用”RULER 准确率跌破某个阈值(例如 85%)之前的最长长度”来定义”有效上下文”,这个数字普遍小于官方宣称的数字。

4.3 Lost in the Middle:位置分布本身的偏置

Liu et al.(Transactions of the Association for Computational Linguistics, 2024,原 arXiv:2307.03172)在多文档问答和键值检索任务上发现一个独立于”距离多远”的现象:模型对开头和结尾的信息利用率明显高于对中间的信息,即使是专门标注支持长上下文的模型也不例外。这一点值得单独强调,因为它和前两节讨论的”距离衰减”不是同一件事——RoPE 的绕圈失真、ALiBi 的线性惩罚都是关于”绝对距离”的函数,而 Lost in the Middle 描述的是一个关于”相对位置在序列中的深度”的 U 形偏置:两端好、中间差。这个偏置的成因目前没有被简化成某个单一位置编码机制的直接后果,更可能与训练数据里相关信息大概率出现在文档开头/结尾这一分布特征、以及 causal mask 天然给早期 token 更多”被后续所有 token 看到”的机会有关——这仍然是一个开放问题,不能简单归因为”换个位置编码就能解决”。

4.4 评测局限本身也是一个问题

即使是 RULER,也只是”更难的合成任务”,不是生产任务的直接替身;论文作者自己承认这是合成基准,用于近似检验能力边界,不能替代真实业务场景的评测。工程上更现实的结论是:needle 类评测过关只能说明位置编码的几何结构没有严重失真,不能说明模型具备可靠的长程推理能力;判断一个模型的长上下文能力,需要同时看检索类(RULER retrieval)、多跳类(variable tracking)、聚合类任务,并且用真实业务分布去做二次验证,而不是只看厂商宣传的”支持 1M token”这一句话。


五、争论:相对位置编码是不是在用归纳偏置换长度

前四节看到的证据,指向一个还没有定论的问题:RoPE、ALiBi 这类相对位置方案,是不是靠引入”距离越远越该被区别对待”这一归纳偏置,换来了更好的长度外推,但代价是牺牲了原本绝对位置更擅长的任务?

一派证据:RoPE/ALiBi 的归纳偏置在算法推理任务上反而是负担。 Kazemnejad et al.(NeurIPS 2023,“The Impact of Positional Encoding on Length Generalization in Transformers”)用约 1 亿参数(HuggingFace “base” 规模配置)的 decoder-only Transformer,系统比较了 APE(可学习绝对位置)、T5 相对位置、ALiBi、Rotary(RoPE)以及完全不用显式位置编码(NoPE)在一系列数学与推理类算法任务(如加法、变量追踪、SCAN 组合泛化)上的长度泛化能力。结论直接写在摘要里:APE、ALiBi、Rotary 这三种最常用的位置编码方法,都不适合这类任务的长度泛化;NoPE 在不增加任何计算的前提下,反而超过了所有显式位置编码方法。 论文还给出理论证明:causal mask 本身已经足以让 decoder-only 模型在 SGD 训练下隐式学出接近绝对位置、进而组合出相对位置的表征(Theorem 1、2),不需要显式注入。论文投稿后又补做了一次 1B 参数、在 StarCoder 真实代码数据上的验证:训练长度 1024 token 时,Rotary 的困惑度在外推到更长长度时”爆炸”,而 NoPE 和 ALiBi 能泛化到接近两倍训练长度,其中 ALiBi 比 NoPE 更稳定。

另一派证据:工程上 RoPE 是当前主流大模型的默认选项。 LLaMA、Qwen、Mistral、DeepSeek 系列几乎全部采用 RoPE,且都需要配合 base scaling / YaRN 一类 continued pretraining 才能稳定支持长上下文——这本身恰好印证了 Kazemnejad 的发现:原始未经缩放的 RoPE 确实不能免费外推,业界的应对方式不是换掉 RoPE,而是持续给它”打补丁”。这里有一处关键的假设差异需要挑出来:Kazemnejad 的实验用的是从零训练的中小模型(1 亿到 10 亿参数)在合成算法任务上做长度泛化,衡量的是”分布外的组合泛化能力”;而生产大模型的核心场景是自然语言 next-token 预测,在分布内长度扩展(先短训练、再用 YaRN/PI 之类方法做少量长文本继续训练)下取得成功。这两种设定的假设并不相同:一个考的是”完全没见过的长度和结构,模型能不能凭结构泛化”,另一个考的是”给了一点长文本训练信号之后,模型能不能把已有能力延伸过去”。哪种设定更接近未来大模型面对的真实分布外场景,目前没有共识。

这条争论目前没有被哪一方”证伪”或”证实”:算法任务上的证据明确指向 RoPE/ALiBi 的归纳偏置有负面效果;工程实践证据明确指向 RoPE 配合缩放技术在生产场景下可用。开放问题是——这两类证据之间的落差,究竟是”合成任务和自然语言分布不同、结论不能迁移”,还是”自然语言任务的评测(如 4.4 节讨论的 needle 类基准)本身不够敏感,没能暴露出与算法任务同源的绝对位置敏感性缺陷”。在有更细粒度、更贴近生产分布的对照实验之前,这个问题应该被当作开放问题看待,而不是简单站队某一边。


六、关键概念回顾


七、常见误解

7.1 “RoPE 天然支持任意长的上下文”

不成立。RoPE 的相对位置恒等式对任意长度都成立,但频率通道的周期是有限的:超出训练时见过的距离范围之后,模型学到的、和特定绕圈节奏绑定的 attention 使用方式会失配。原始 RoPE 需要 base scaling、YaRN 等额外手段才能稳定外推,这一点已经被 Kazemnejad et al. (NeurIPS 2023) 的困惑度爆炸实验直接证实。

7.2 “ALiBi 外推稳定,所以它比 RoPE 更适合长上下文”

不能一概而论。ALiBi 的外推稳定性来自它”永不绕圈”的单调结构,但这份稳定性的代价是对远距离强相关内容的系统性压制。生产实践里 RoPE 系模型(LLaMA、Qwen)在长距离语义检索类任务上普遍优于 ALiBi 系模型(BLOOM、MPT),说明”外推稳定”和”长程表达力”是两个独立的评价维度,不存在单一维度上的全面胜者。

7.3 “跑得动 1M token 上下文,就是理解了 1M token”

不成立,这正是 RULER 存在的原因。跑得动只说明位置编码的几何结构在该长度下没有崩掉、attention kernel 能在显存和延迟预算内完成计算;能不能在这个长度里做多跳推理、聚合统计、跨段落检索,是另一件需要专门评测才能回答的事,而多数模型在综合任务上的”有效上下文”明显短于宣称长度。

7.4 “相对位置编码总是比绝对位置编码更好”

不成立,这是本篇第五节争论的核心。Kazemnejad et al. (NeurIPS 2023) 在算法推理类任务上的系统实验显示,完全不用显式位置编码(NoPE)在长度泛化上反而优于 ALiBi、Rotary 等相对位置方案。相对位置编码解决的是”长度外推”这一个具体问题,不是在所有任务维度上都无条件占优。


八、下一步

位置编码解决的是”token 在哪里、和别的 token 隔多远”,无论用旋转还是用线性 bias 表达,这件事本身都要求先算出 \(Q K^\top\) 这个 \(n \times n\) 的分数矩阵。序列变长之后,这个矩阵的存储和读写会不会成为新的瓶颈?下一篇 42|FlashAttention 从内存 I/O 的角度重新拆开标准 attention 的计算路径,回答”同样的注意力公式,换一种硬件友好的算法,能把可训练的序列长度推到多远”。


九、参考文献

核心论文

  1. Vaswani, A. et al. “Attention Is All You Need.” NeurIPS 2017. §3.5 提出 sinusoidal 位置编码与相对位移可线性表达的设计意图。
  2. Su, J. et al. “RoFormer: Enhanced Transformer with Rotary Position Embedding.” Neurocomputing 2024(原 arXiv:2104.09864, 2021)。RoPE 的构造与复平面推导。
  3. Press, O., Smith, N. A., Lewis, M. “Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation.” ICLR 2022. ALiBi 提出,线性距离偏置与几何斜率设计。
  4. Kazemnejad, A., Padhi, I., Ramamurthy, K. N., Das, P., Reddy, S. “The Impact of Positional Encoding on Length Generalization in Transformers.” NeurIPS 2023. NoPE 在算法推理任务长度泛化上优于 APE/ALiBi/Rotary 的系统实验与理论证明,本篇第五节争论的核心一手证据。
  5. Hsieh, C.-P. et al. “RULER: What’s the Real Context Size of Your Long-Context Language Models?” COLM 2024(原 arXiv:2404.06654). 有效上下文与宣称上下文差距的系统评测。
  6. Liu, N. F. et al. “Lost in the Middle: How Language Models Use Long Contexts.” Transactions of the Association for Computational Linguistics, 12:157–173, 2024(原 arXiv:2307.03172). U 形位置利用偏置。

长度外推方法(工程谱系,标注证据等级)

  1. Chen, S., Wong, S., Chen, L., Tian, Y. “Extending Context Window of Large Language Models via Positional Interpolation.” arXiv:2306.15595, 2023. 未经 peer review 的预印本;Position Interpolation。
  2. Peng, B., Quesnelle, J., Fan, H., Shippole, E. “YaRN: Efficient Context Window Extension of Large Language Models.” ICLR 2024(原 arXiv:2309.00071)。
  3. bloc97, emozilla. “NTK-Aware Scaled RoPE” 系列社区帖子,Reddit r/LocalLLaMA, 2023. 社区技术笔记,未经同行评审,仅作为 NTK-aware 思路的工程谱系线索,不单独支撑理论结论。
  4. Meta AI. meta-llama/llama3 源码,llama/model.pyModelArgs.rope_theta = 500000。LLaMA 3 base scaling 的官方实现依据。
  5. Kamradt, G. “Needle In A Haystack - Pressure Testing LLMs.” GitHub, 2023. NIAH 评测方法的来源。

← 上一篇:40|三大路线之争 | 下一篇:42|FlashAttention

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-15 · transformer

【Transformer 与注意力机制】21|位置编码:为什么需要它,为什么用正弦

从「self-attention 是排列等变的」这件几乎被忽视的事实出发,推导出位置编码不是装饰、不是工程小技巧,而是结构性必需。原论文为什么选正弦、那个奇怪的 10000 是怎么来的、PE 与 embedding 是相加还是拼接、可学习位置和 sinusoidal 的本质差别在哪、为什么训练 512 推理 2048 会让可学习位置难以直接外推——这一篇把这些问题一次讲完,并把读者交到现代位置编码(RoPE、ALiBi)的门口。


By .