✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

在注意力机制中,位置编码为什么用正弦函数?

创建时间:2026-09-24 更新时间:2026-09-25 阅读次数:1152 次 分类:模型架构与Transformer

在注意力机制(尤其是 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}) $$

  • 对于每个维度 $i$,都有一个特定的波长,从 $2\pi$ 到 $10000 \cdot 2\pi$ 不等。
  • 低维度($i$ 小)变化快,编码精细的位置差异;高维度($i$ 大)变化慢,编码长距离的全局位置。
  • 这种多频率组合类似于二进制编码,能让每个位置 $pos$ 得到一个唯一的模式。

3、相对位置关系可以通过线性变换表示

这是正弦编码最优雅的性质之一。对于任意固定的偏移量 $k$,位置 $pos+k$ 的编码可以表示为位置 $pos$ 编码的线性函数(通过一个只依赖于 $k$ 的旋转矩阵)。这意味着模型可以很容易地学会关注“相对位置”,比如“前一个词”或“后两个词”,而不仅仅是绝对位置。

4、外推到更长的序列

因为正弦函数是周期性的、有界的,且不依赖于序列长度,所以即使模型在训练时只见过长度为 512 的序列,在推理时遇到长度为 1024 的序列,也能为新的位置生成合理的编码。可学习的位置编码则无法外推,因为超出训练范围的位置没有对应的嵌入向量。

5、与词嵌入相加后,不会破坏语义信息

正弦编码的值在 $[-1, 1]$ 之间,幅度较小。当它加到词嵌入上时,不会主导原始语义信号,而是作为一种微弱的“位置标记”存在。模型可以通过注意力机制学会分离这两部分信息。

补充:为什么现在很多模型改用旋转位置编码(RoPE)?

虽然正弦编码有上述优点,但它也有局限:它只是把位置信息“加”到输入上,在深层网络中,位置信息可能会逐渐衰减。后来出现的 RoPE(旋转位置编码)通过旋转 Query 和 Key 向量来注入相对位置信息,在长文本建模和外推性上表现更好,因此被 Llama、Qwen 等现代模型广泛采用。但正弦编码作为原始 Transformer 的方案,其设计思想仍然是理解位置编码的经典起点。


📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...