TellWorldAI 世界档案
问档案English

首页›原理

原理

位置编码

序列模型(尤其是 Transformer)的组成部分,把每个词元的位置编码成向量,让本身不分先后的注意力感知顺序;形式从原版 Transformer 的正弦编码一直到 RoPE、ALiBi。

时代 深度学习

是什么

位置编码(positional encoding)是序列模型、尤其是 Transformer 的一个组成部分,作用是把每个词元(token)的位置编码成一个向量 [1]。之所以需要它,是因为注意力本身没有顺序概念:标准注意力对位置是对称的、具有置换不变性(permutation invariant),一旦不额外提供位置信息,输入就会被当成一袋词(bag of words),而不是一个序列 [1]。把同一句话的词序打乱,这样的模型看不出区别。

怎么工作

最知名的是正弦位置编码:用余弦和正弦函数为每个位置生成向量,各维频率按几何级数排布;原论文中 d 取 256,底数 b 取 10,000 [1]。一个直观理解是,向量的每一维都是一条沿序列起伏的波浪,而且波长逐维变长:低维变化快,能把相邻位置区分开;高维变化慢,标记的是序列中大范围的位置区域。

举一个小例子:同一个词先出现在句子靠前的位置,后来又出现一次。它两次的词向量相同,但加上去的位置向量不同,于是上层网络能分辨这是两次出现。反过来,把句中两个词对调,词向量丝毫不变,移动的只有位置向量,而这恰好是注意力本来缺失的信息。

原版 Transformer 同时也测试了可学习的绝对位置嵌入,这一做法来自 Gehring 等人在 2017 年的工作 [1]。这种方案给每个位置一个可训练向量,按序号查表取用,编码是模型学出来的,而不是用公式算出来的。

从哪来

Vaswani 等人在 2017 年的《Attention Is All You Need》中提出了正弦位置编码 [1]。这篇论文 2017 年 6 月首次提交,提出一个完全基于注意力机制的架构,彻底不用循环和卷积 [2]。它报告在 WMT 2014 英德方向上取得 28.4 BLEU,比当时包括集成模型在内的最好结果高出 2 BLEU 以上 [2];在英法方向上,用 8 块 GPU 训练 3.5 天后,单模型达到 41.8 BLEU 的最好水平 [2]。作者希望模型能够外推到比训练时更长的序列 [1],这也是采用固定公式而非可学习查表的一个动机。

今天用在哪里

GPT 在 2018 年采用了可学习的绝对位置嵌入,BERT 在 2018 年对词元位置和段(segment)都使用了可学习嵌入 [1]。后来的工作更多转向相对位置方案。Su 等人 2021 年提出的旋转位置编码(rotary position embedding,RoPE)通过旋转查询和键向量来编码相对位置,2022 年用在 GPT-NeoX 中,Llama 使用它时 b 取 10,000 [1]。Press、Smith 和 Lewis 在 2021 年提出的 ALiBi 走的是另一条路:给注意力打分(logits)加上一个与位置间负距离成正比的线性偏置 [1]。

局限

可学习的绝对嵌入处理不了比训练长度更长的上下文 [1]。长上下文会让位置编码的分布和注意力权重发生漂移,这也是 YaRN、动态缩放等扩展方法被用来在短上下文上训练、在长上下文上测试的原因 [1]。

注释与来源

  1. Positional encodinghttps://en.wikipedia.org/wiki/Positional_encoding
  2. Attention Is All You Needhttps://arxiv.org/abs/1706.03762

引用本页: 位置编码. TellWorld, https://www.tellworld.net/zh/learn/positional-encoding. 更新于 2026-11-07