在注意力机制(尤其是 Transformer 模型)中,位置编码使用正弦和余弦函数,核心原因是为了在不增加额外训练参数的前提下,让模型能够感知序列中 token 的顺序,并且能够方便地处理训练时未见过的更长序列。
具体来说,这种设计有以下几个关键优势:
1、注入位置信息,且不引入可训练参数
注意力机制本身是“位置无关”的——它计算的是 Query 和 Key 之间的相似度,打乱输入顺序,结果不变。但语言是有顺序的(“我打你”和“你打我”完全不同)。正弦位置编码通过一个固定的数学公式,给每个位置生成一个独特的向量,直接加到词嵌入上。这样,模型就能区分不同位置的 token,而且不需要像可学习位置编码那样增加额外的参数。
2、不同频率的正弦波组合,能唯一编码每个位置
公式中使用了不同频率的 sin 和 cos:
$$ PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d}) $$
$$ PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d}) $$
3、相对位置关系可以通过线性变换表示
这是正弦编码最优雅的性质之一。对于任意固定的偏移量 $k$,位置 $pos+k$ 的编码可以表示为位置 $pos$ 编码的线性函数(通过一个只依赖于 $k$ 的旋转矩阵)。这意味着模型可以很容易地学会关注“相对位置”,比如“前一个词”或“后两个词”,而不仅仅是绝对位置。
4、外推到更长的序列
因为正弦函数是周期性的、有界的,且不依赖于序列长度,所以即使模型在训练时只见过长度为 512 的序列,在推理时遇到长度为 1024 的序列,也能为新的位置生成合理的编码。可学习的位置编码则无法外推,因为超出训练范围的位置没有对应的嵌入向量。
5、与词嵌入相加后,不会破坏语义信息
正弦编码的值在 $[-1, 1]$ 之间,幅度较小。当它加到词嵌入上时,不会主导原始语义信号,而是作为一种微弱的“位置标记”存在。模型可以通过注意力机制学会分离这两部分信息。
补充:为什么现在很多模型改用旋转位置编码(RoPE)?
虽然正弦编码有上述优点,但它也有局限:它只是把位置信息“加”到输入上,在深层网络中,位置信息可能会逐渐衰减。后来出现的 RoPE(旋转位置编码)通过旋转 Query 和 Key 向量来注入相对位置信息,在长文本建模和外推性上表现更好,因此被 Llama、Qwen 等现代模型广泛采用。但正弦编码作为原始 Transformer 的方案,其设计思想仍然是理解位置编码的经典起点。
评论专区
评论加载中...登录后即可发表评论