你本来可以设计出最先进的位置编码

TL;DR

Hugging Face 博客文章解释了如何迭代改进 Transformer 自注意力的位置编码,最终得到 Llama 3.2 和其他现代模型中使用的旋转位置编码(RoPE),以及为什么添加位置信息对于区分出现在不同位置的 token 是必不可少的。

问题陈述

Transformer 中的自注意力是置换等变的;如果没有位置信息,模型无法判断两个相同的 token 是否指的是不同的实体。

动机示例

在句子 “The dog chased another dog” 中,当未添加位置编码时,“dog” 的两次出现会产生相同的自注意力输出,这表明需要位置信息来区分它们。

理想属性

理想的位置编码应具备以下特性:(1)为每个位置提供唯一的、与长度无关的编码;(2)允许通过简单的线性计算从位置 p 的编码获得位置 p + k 的编码;(3)能够推广到训练过程中未见过的更长序列长度;(4)能够由模型可学习的确定性过程生成;(5)自然地扩展到多个维度,适用于图像等模态。

整数位置编码

将原始整数位置添加到每个嵌入分量会产生远超典型嵌入幅度的值,这会损害信噪比并使学习变得困难。

二进制位置编码

将位置表示为二进制字符串,并将其位分布到嵌入维度上,可以得到在 [0,1] 范围内且在不同序列长度下保持一致的值,但得到的模式是离散且“跳跃”的,这对于基于梯度的优化来说并不理想。

正弦位置编码

使用几何波长递增的正弦和余弦函数可以产生平滑、连续的编码。位置 p 和维度 2i 的编码为 sin(p / 10000^{2i/d}),而对于 2i+1 的编码为 cos(p / 10000^{2i/d}),其中 d 是模型维度。该方案满足唯一性和线性关系属性,因为固定偏移 k 对每个 (sin,cos) 配对对应一个旋转矩阵。

绝对位置编码 vs 相对位置编码

绝对位置说明 token 在整个序列中的位置,但意义通常取决于 token 与附近 token 的关系。正弦编码可以被解释为通过旋转编码相对位置,这促使从加法组合转向与查询和键向量的乘法组合。

上下文中的位置编码

在自注意力中,点积 QKᵀ 决定每个键对查询的影响程度。因为点积等于 ‖Q‖‖K‖cos θ,旋转 Q 或 K 会改变角度 θ,从而改变注意力权重,而不会改变向量范数,从而保存范数中存储的语义信息。

旋转位置编码 (RoPE)

RoPE 将正弦方案推导出的旋转矩阵直接应用于点积之前的查询和键向量的维度对。对于每一对 i,旋转角度为 ω_i · p,其中 ω_i = 1 / 10000^{2i/d}。该操作可以逐元素执行: - q′{2i} = q{2i} · cos(p θ_i) − q_{2i+1} · sin(p θ_i) - q′{2i+1}= q{2i} · sin(p θ_i) + q_{2i+1} · cos(p θ_i) (同样适用于 k)。这种乘法方法在保持向量范数不变的情况下编码了相对位置。

将 RoPE 扩展到 n 维

对于诸如图像之类的 2‑D 数据,RoPE 会独立处理每个空间维度:它在 x‑维度内旋转配对以编码水平偏移,在 y‑维度内旋转配对以编码垂直偏移。这避免了混合 x 和 y 信息,并通过将嵌入的不相交子空间分配给每个维度来推广到任意数量的维度。

位置编码的未来

最近的分析表明,模型往往依赖于 RoPE 的最低频率,而移除(而不是旋转)这些频率可以在某些模型上提升性能。未来的工作可能会借鉴信号处理工具,如小波或分层方案,并寻找在低精度量化下仍然稳健的编码。

结论

位置编码不应是事后才考虑的东西;它直接解决了自注意力的置换等变限制。通过迭代改进编码——从原始整数到二进制,再到正弦,最后到乘法旋转(RoPE)——我们得到了一种满足所需属性并在最先进的 Transformer 中广泛使用的方案。

Sources