Transformer|架构演进(5):Position Encoding 系统(2)——相对位置编码

阅读提示: 嗨嗨嗨,这里是我们进入RoPE最后的缓冲期——相对位置编码。我们将看遍有代表性的位置编码内容,请抓稳扶手,继续出发喽。祝食用愉快~🦆

导言

图 1 相对位置编码

上一篇我们讲了绝对位置编码。

绝对位置编码的核心思想很直观:给每个位置一个向量,然后和 token embedding 相加。原始 Transformer 使用正弦位置编码,BERT、GPT-2 等模型则常用 learned absolute position embedding。

这种方法解决了 Transformer 的第一个问题:

“ 模型不知道 token 的顺序。 ”

但是,它没有很好解决第二个问题:

“ 模型如何理解两个 token 之间的相对距离? ”

在语言建模中,很多关系不是由“绝对位置”决定的,而是由“相对位置”决定的。

绝对位置编码的局限

“ 我们先来回顾一下上一个blog的内容 ”

在 absolute positional encoding 中,输入是:

其中:

之后 attention 会计算:

位置影响 attention 的方式,是通过 和 混入 、 后间接产生的。

这意味着,如果模型想知道两个 token 相距多少,它需要从两个绝对位置向量 和 中自己推断出 或 。

这不是不可能,但不够直接。

Self-Attention 本质上是在建模 token pair 之间的关系。既然 attention score 本来就是在比较位置 和位置 ,那更自然的做法是:

“ 直接把 和 的相对距离放进 attention score 里。 ”

这就是 relative positional encoding 的基本动机。

相对位置编码

标准 attention score 是:

它只看 query 内容和 key 内容的相似度。

相对位置编码希望 score 不只依赖内容,还依赖相对距离:

于是更一般的形式可以写成:

不同方法的区别在于:这个 到底怎么加。

Shaw et al.

“ 相对位置编码的经典起点是 Shaw et al. 2018 的 Self-Attention with Relative Position Representations。 ”

它的核心思想是:

“ Self-Attention 可以看成一个 fully-connected graph,每个 token 是一个节点,每两个 token 之间都有一条边。相对位置就是这条边上的特征。 ”

也就是说,位置 attend 到位置 时,不仅要看 的内容,还要看 和 的相对距离。

在 Key 里加入相对位置向量

标准 attention score 是:

Shaw et al. 给每个相对距离 分配一个可学习向量:

然后 attention score 变成:

展开就是:

第一项是内容匹配:query 和 key 的相似度。

第二项是位置匹配:query 和相对位置向量的相似度。

也就是说,模型在判断是否关注某个 token 时,会问:

“ 这个 token 内容是否相关? ”

还会问:

“ 这个 token 和我相隔这个距离是否合适呢? ”

这里就巧妙的把位置的信息融合到attention score的部分了

在 Value 里也加入相对位置向量

“ Shaw et al. 不只修改 attention score,还修改了 value 聚合。 ”

标准输出是:

加入相对位置后:

也就是说,模型从位置 读取信息时,不只读取内容 value,也读取一个和相对距离相关的 value 表示。

这使得相对距离不仅影响“注意力分数”,还影响“聚合进来的内容”。

裁剪距离

图 2 距离窗口的影响

如果序列长度是 ,相对距离范围可能是:

如果每个距离都学习一个向量,长序列下参数很多,而且远距离样本稀疏。

因此 Shaw et al. 使用 clipping:

也就是说,只精细区分 范围内的相对距离,超过这个范围的距离统一归到边界桶。

这体现了一个很重要的归纳偏置:

“ 模型更需要精细地区分近距离关系,而远距离关系可以粗略处理。 ”

这也是后来 T5 relative position bucket 的思想基础之一。

相对位置编码解决了什么?

相比绝对位置编码,Shaw 方法的优势是:

  1. 它直接建模 token pair 的相对距离;
  2. 它更贴合 attention 的结构;
  3. 它对长度变化更自然,因为同一个相对距离可以在不同绝对位置复用;
  4. clipping 让模型对超过训练长度的一些位置有一定泛化能力。

例如,在训练时模型见过 position 10 attend 到 position 8,也见过 position 20 attend 到 position 18。它们相对距离都是 2。相对位置编码会复用同一个 ,这比绝对位置编码更容易学习。

Shaw 方法的局限

但它的历史意义非常重要:

“ 它把位置编码从“给每个位置一个向量”推进到“给每对 token 一个相对距离特征”。 ”

Transformer-XL

“ Shaw et al. 解决了相对距离建模,但 Transformer-XL 面对的是另一个问题:长文本语言模型如何跨 segment 保留记忆。 ”

普通 Transformer 的训练通常在固定长度片段上进行。比如每次处理 512 或 1024 token。片段之间的信息断开,模型很难建模超过片段长度的依赖。

Transformer-XL 提出了 segment-level recurrence:把上一段的 hidden states 缓存下来,作为下一段的 memory。

但这会带来一个位置问题。

为什么绝对位置在跨 segment 时会出问题?

假设每个 segment 长度是 4。

第一段位置是:

0 1 2 3

第二段如果也重新编号为:

0 1 2 3

那么第二段 token attend 到第一段 memory 时,就会出现位置混乱。不同 segment 中的 token 可能有相同绝对位置编号,但它们在全局文本中显然不是同一个位置。

如果给所有 segment 使用全局绝对位置,又会带来训练和推理中的长度外推问题。

所以 Transformer-XL 选择使用相对位置。

因为对当前 token 来说,真正重要的是:

“ memory 里的某个 token 距离当前 token 有多远。 ”

不是它的绝对编号是多少。

Transformer-XL 的 attention score 分解

Transformer-XL 重新参数化 attention score,把它分成几项。

典型形式可以写成:

这里为了易读省略了一些投影矩阵。

Transformer-XL 的设计比 Shaw 更复杂,但目标也更明确:

“ 让模型在跨 segment recurrence 时仍然保持一致的位置关系。 ”

Transformer-XL 解决了什么?

Transformer-XL 的相对位置机制主要服务于长程语言建模。

它解决了两个问题。

第一,跨 segment 记忆时不再依赖绝对位置编号。

第二,模型可以复用历史 hidden states,从而突破固定上下文片段的限制。

这让 Transformer-XL 在长文本语言模型上非常有代表性。

Transformer-XL 的局限

“ Transformer-XL 的相对位置机制很强,但也比较复杂。 ”

它不是简单往 logits 加一个 bias,是对 attention score 进行多项分解,还需要 relative shift 等实现技巧。

此外,它主要诞生在 segment recurrence 语境下,而现代 decoder-only LLM 更多采用大上下文窗口 + KV cache 的方式。随着 RoPE 出现,现代 LLM 更倾向使用 RoPE 这种更简洁、更适配 KV cache 的方案。

但 Transformer-XL 的贡献非常重要:

“ 它证明了相对位置对长程依赖建模至关重要,也把位置编码和记忆机制联系了起来。 ”

T5 Relative Position Bias

“ T5 使用了更简洁的相对位置方法:Relative Position Bias。 ”

它不再给每个距离一个高维向量,也不修改 value,而是直接在 attention logits 上加一个标量偏置。

标准 attention score 是:

T5 改成:

如果是多头 attention,每个 head 可以有自己的 bias:

这里的 是可学习标量。

为什么只加一个 scalar bias 也有用?

“ Attention logits 决定 softmax 之后的注意力分布。 ”

这相当于给 attention 加了一个距离先验。

例如,在语言模型中,近处 token 通常更重要。模型可以学习到近距离 bucket 的 bias 更高,远距离 bucket 的 bias 更低。

这比 Shaw 方法简单很多。

Shaw 方法让相对位置参与 query-key 点积;T5 则直接让距离影响 attention logits。

为什么要 bucket?

“ 如果每个相对距离都学习一个 bias,长序列下距离数量很多,而且远距离样本稀疏。 ”

T5 使用 relative position bucket。

核心思想是:

“ 近距离精细区分,远距离粗略区分。 ”

例如,小距离可以单独分桶:

0, 1, 2, 3, 4, ...

远距离则用对数尺度分桶:

8-11, 12-15, 16-23, 24-31, ...

这和人类对距离的需求也有点类似。我们通常很在意“前一个词”和“前两个词”的差别,但对“前 800 个 token”和“前 850 个 token”的差别未必需要同样精细。

T5 Relative Bias 的优势

T5 Relative Bias 的局限

所以 T5 bias 很适合中长序列和 encoder-decoder 任务,但不是现代 decoder-only 长上下文 LLM 的唯一答案。

DeBERTa

“ DeBERTa 的 disentangled attention 也很值得放在相对位置编码的脉络里。 ”

它指出,绝对位置编码把 token 内容和位置直接相加:

这会让内容和位置纠缠在一起。但内容和位置其实是两种不同信息。

于是 DeBERTa 将它们分开建模。

简化写成:

这里上标 表示 content, 表示 position。

DeBERTa 的重点不是简单加一个相对距离 bias,而是更明确地区分内容表示和位置表示。

它想解决的问题是:

“ token 内容和 token 位置不应该在输入层简单混合,而应该在 attention 中以不同交互方式建模。 ”

不过,DeBERTa 主要影响的是 encoder-style 预训练模型,而不是今天主流 decoder-only LLM 的位置编码路线。

相对位置编码和绝对位置编码的区别

现在可以总结两者的区别。

绝对位置编码问的是:

“ token 在第几个位置? ”

相对位置编码问的是:

“ query 和 key 相距多少? ”

绝对位置编码通常加在输入端:

相对位置编码通常进入 attention 内部:

这使得相对位置编码更贴合 attention 的 pairwise 结构。

不同相对位置方法的对比

方法 位置进入方式 表示形式 优点 局限
Shaw et al. 加入 key/value 相对距离向量 显式建模 token-pair 距离 计算和缓存复杂
Transformer-XL attention score 分解 相对距离向量 + 全局 bias 支持 segment recurrence 和长程依赖 公式和实现复杂
T5 Relative Bias 加到 logits per-head scalar bucket bias 简单高效,参数少 远距离分辨率有限
DeBERTa 内容/位置解耦交互 disentangled relative position 表达能力强 结构较复杂,非主流 LLM 路线

共同点是:都不满足于只告诉模型绝对位置,而是试图让 attention 更直接地感知 token 之间的相对距离。

从相对位置到 ALiBi 和 RoPE

“ 相对位置编码之后,有两条非常重要的后续路线。 ”

第一条是 ALiBi。

ALiBi 把相对位置进一步简化:不学习位置向量,也不学习 bucket bias,而是直接给 attention score 加一个和距离成比例的线性惩罚。

它的想法是:距离越远,attention score 越低。这种 recency bias 对语言模型很有效,并且有较好的长度外推表现。

第二条就是 RoPE。

RoPE 不直接加 bias,而是把 Q/K 放进旋转位置空间。它用旋转矩阵编码位置,使 attention score 自然依赖相对距离。

现代 LLM 大量采用 RoPE,并在此基础上发展出 NTK Scaling、YaRN、LongRoPE 等长上下文扩展方法。

为什么现代 LLM 后来更多使用 RoPE?

“ 啊啦,到这里你是不是自然会有一个疑问:既然相对位置编码已经解决了很多问题,为什么现代 LLM 没有普遍使用 Shaw 或 T5 bias,而是大量转向 RoPE?主要原因有几个,让我们细细分解。 ”

1. RoPE 兼具绝对和相对性质

RoPE 对 Q/K 按绝对位置做旋转,但两个位置的 attention score 会自然依赖相对位置差。

这让它既有绝对位置注入方式,又在 attention score 中呈现相对距离结构。

2. RoPE 对 decoder-only 和 KV cache 友好

现代 LLM 主要是 decoder-only,自回归生成时需要 KV cache。

RoPE 只需要在生成 key/query 时应用旋转,缓存后的 key 已经包含位置信息,增量生成实现相对自然。

Shaw-style relative value 或复杂 attention 分解在推理工程上更麻烦。

3. RoPE 适合长上下文 scaling

虽然原始 RoPE 也有长度外推问题,但它可以通过 Position Interpolation、NTK Scaling、YaRN 等方法扩展上下文。

这让 RoPE 成为现代长上下文 LLM 的核心位置编码基础。

小结

相对位置编码是位置编码演化中的关键一步。它的核心思想是:

“ Attention 建模的是 token pair 之间的关系,因此位置信息也应该以 token pair 的相对距离形式进入 attention。 ”

这些方法共同完成了一次重要转变:

“ 从“给每个位置一个向量”,转向“给每对 token 一个距离关系”。 ”

但相对位置编码仍然不能单独解决现代长上下文的所有问题。它不降低 attention 的 成本,也不减少 KV cache,还需要足够的长上下文数据和任务训练,模型才会真正学会使用远处信息。

笔者的话

“ 相对位置编码是相对早期的方法,你可以发现现在已经鲜有见到他们的身影,但是他们的贡献是实实在在的,如今的百花齐放的模型设计,就是这一步步探索的脚步所垒成的。有时候笔者也很理解痴迷于历史,痴迷于听书的人,看到前人精彩的故事纷呈,许多后人也追随着从历史中照见自己,有所体悟,有所思考,而论文不正是对一个领域历史进程权威的侧写吗? ”

参考文献

  1. Shaw et al., 2018. Self-Attention with Relative Position Representations.

相对位置表示的经典工作。
https://arxiv.org/abs/1803.02155

  1. Dai et al., 2019. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context.

使用相对位置机制和 segment recurrence 支持长程语言建模。
https://arxiv.org/abs/1901.02860

  1. Raffel et al., 2020. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.

T5,使用 relative position bias。
https://arxiv.org/abs/1910.10683

  1. He et al., 2020. DeBERTa: Decoding-enhanced BERT with Disentangled Attention.

内容和位置解耦的相对位置建模。
https://arxiv.org/abs/2006.03654