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

【Transformer 与注意力机制】41|位置编码演进:Sinusoidal → Learned → RoPE → ALiBi

文章导航

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

目录

Transformer 的 self-attention 有一个优点,也有一个问题:它天然不关心顺序。给定一组 token,如果不加入位置信息,attention 看到的更像一个集合,而不是一句话。可是语言、代码、图像 patch、视频帧都离不开顺序。

原始 Transformer 用 sinusoidal positional encoding 解决这个问题。后来模型又发展出 learned positional embedding、相对位置偏置、RoPE、ALiBi 等方案。位置编码不再只是“第几个 token”的坐标,而逐渐变成“两个 token 相隔多远、这种距离如何影响 attention”的机制。

本篇能让你学会三件事:

  1. 为什么 Transformer 必须显式注入位置信息;
  2. RoPE 和 ALiBi 为什么在大语言模型时代变得重要;
  3. 为什么能扩展上下文长度,不等于模型真正理解长上下文。

一、没有位置,Transformer 只是一袋 token

Self-attention 的核心是比较 Query 和 Key 的相似度。如果两个输入 token 交换位置,但它们的向量本身不变,那么没有位置编码的 Transformer 很难知道顺序发生了变化。

这对语言是致命的。“狗咬人”和“人咬狗”包含相同词,但意义完全不同。代码中一行语句的位置、括号嵌套和变量作用域也都依赖顺序。Transformer 需要某种方式知道 token 的位置。

位置编码的基本任务就是给内容向量加入顺序信息。问题在于:这个顺序信息应该是绝对位置,还是相对距离?应该加到 embedding 上,还是进入 attention logits?应该能外推到更长长度,还是只要训练长度内有效?


二、原始正弦位置编码

《Attention Is All You Need》使用正弦和余弦函数构造位置编码。不同维度使用不同频率:

\[ PE(pos,2i)=\sin(pos/10000^{2i/d}) \]

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

直觉上,高频维度刻画短距离变化,低频维度刻画长距离变化。模型可以通过这些周期性信号推断位置,也可以通过线性组合表达相对位移。

正弦编码的好处是不用学习参数,并且理论上可以生成训练长度之外的位置。缺点是它把位置作为一个外加向量加到 token embedding 上,后续模型是否学会良好使用这些信号,仍然取决于训练。


三、learned positional embedding

Learned positional embedding 更直接:为每个位置学习一个向量。BERT、GPT 系列早期模型常用这种方式。它简单有效,在固定最大长度内表现很好。

问题是外推。训练时只学了 0 到 512 或 0 到 2048 的位置向量,推理时突然要求 8192,模型没有对应的 learned embedding。即使通过插值或扩展解决参数形状问题,模型也未必学过那么远的距离关系。

这也是长上下文时代相对位置和 RoPE/ALiBi 受到关注的原因。模型不只需要知道“这是第 50000 个 token”,更需要知道“当前 token 和那个 token 相隔多少、这种距离是否应该衰减”。


四、绝对位置与相对位置

绝对位置关注 token 在序列中的坐标:第 1 个、第 2 个、第 100 个。相对位置关注两个 token 之间的距离:相隔 1、相隔 8、相隔 1024。

语言中的许多关系更像相对关系。一个形容词通常修饰附近名词,括号匹配依赖相对结构,代码缩进和作用域也常常由局部和层级关系决定。绝对位置当然有用,但相对距离往往更接近 attention 需要的信息。

相对位置方案通常把距离信息加入 attention 计算中,而不是只加到输入 embedding 上。这样 Query 和 Key 的相互作用可以直接感知距离。


五、RoPE:把位置变成旋转

RoPE(Rotary Position Embedding)的核心思想,是对 Query 和 Key 的向量按位置进行旋转。不同位置对应不同旋转角度;两个位置向量做点积时,相对位移会自然进入结果。

它的优点是把相对位置信息嵌入 attention score 中,而不是简单附加在 token embedding 上。现代 LLaMA 等模型采用 RoPE,很大程度上是因为它在 Decoder-only LLM 中表现稳定,也比较适合长上下文扩展。

RoPE scaling、NTK-aware scaling、插值等方法试图把训练长度之外的位置映射到模型可处理范围。但这些方法都不是免费午餐:位置频率被压缩后,短距离和长距离分辨率会改变,模型是否还能稳定使用长上下文需要评测。


六、ALiBi:用 bias 表达距离偏好

ALiBi(Attention with Linear Biases)不学习位置向量,而是在 attention logits 上加入随距离线性变化的偏置。距离越远,bias 越不利;不同 head 可以有不同斜率。

它的直觉很朴素:越近的 token 通常越相关,但模型仍然可以在需要时关注远处。因为 bias 规则可以直接应用到更长序列,ALiBi 在长度外推上有吸引力。

和 RoPE 相比,ALiBi 更像给 attention 加一个距离先验;RoPE 则把位置关系编码到 Query/Key 几何结构中。二者都说明位置已经不只是输入层的小补丁,而是 attention 机制的一部分。


七、长上下文扩展的风险

把最大上下文从 4K 扩到 32K,不只是改一个配置。位置编码、训练数据、attention kernel、KV Cache、评测任务都会一起变。模型可能能处理更长输入,但未必能可靠利用远处信息。

常见评测如 needle-in-a-haystack 可以测试模型能否在长文本中找一个显著片段,但真实任务更难:信息分散、互相矛盾、需要跨段推理。位置编码能提供坐标系统,却不能保证模型学会长期记忆和复杂检索。

所以长上下文能力要谨慎表述。能跑更长长度只是第一步;能稳定理解、检索、推理和拒绝无关信息,才是更高要求。


八、关键概念回顾


九、常见误解

9.1 “正弦位置编码已经解决长度外推”

它能生成任意长度的位置向量,但不保证模型在训练外长度上学会可靠推理。

9.2 “RoPE scaling 可以免费扩上下文”

RoPE scaling 会改变位置频率和距离分辨率,需要训练或评测验证。它不是无代价开关。

9.3 “长窗口就是长期记忆”

长窗口是一次上下文内可访问更多 token,长期记忆还需要持久化、检索、更新和遗忘。


十、下一步

位置编码解决的是“token 在哪里”。接下来进入另一个问题:如果 attention 公式不变,能不能把计算路径改得更适合硬件?这就是 42|FlashAttention 的主题。


十一、参考文献

  1. Vaswani, A. et al. “Attention Is All You Need.” NeurIPS 2017.
  2. Su, J. et al. “RoFormer: Enhanced Transformer with Rotary Position Embedding.” Neurocomputing 2024.
  3. Press, O. et al. “Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation.” ICLR 2022.
  4. Touvron, H. et al. “LLaMA: Open and Efficient Foundation Language Models.” arXiv:2302.13971, 2023.

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

同主题继续阅读

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

2026-04-15 · transformer

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

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


By .