2.3 位置编码


2.3 位置编码

本节摘要:位置编码(Positional Encoding)解决自注意力的顺序盲区——打分只看向量内容不看位置,"狗咬人"与"人咬狗"在注意力眼中无差别。Transformer 原论文的方案是用不同频率的正弦与余弦函数为每个位置生成一个固定向量,直接加到词嵌入上,使表示同时携带语义与位置信息;三角恒等式的性质还让模型能线性表达相对位置。本节讲清顺序盲区的来源、正弦编码的构造逻辑、绝对与相对位置的关系,以及可学习位置嵌入等替代方案的取舍。

上手前先明确

阅读完本节,你应当能够:

  1. 论证自注意力为何天然丢失顺序信息(顺序盲区);
  2. 描述正弦位置编码的构造方式与各维度的频率差异;
  3. 解释三角恒等式为何使相对位置可被线性表达;
  4. 说明"加法融合"相对"拼接融合"的考虑;
  5. 对比固定正弦编码与可学习位置嵌入的适用场景。

一、顺序盲区:问题的来源

先把病灶找准。自注意力的打分是查询与键的点积,加权求和是对值向量的线性组合——这两步都只依赖向量的内容,从头到尾没有出现"第几位"这个变量。做一个思想实验即可确认:把输入序列的词序打乱,每个词的表示跟着换位,但各位置的输出恰是原来对应位置输出的换位,模型对"顺序"本身一无所觉。

语言显然不是这样。"狗咬人"与"人咬狗"词集相同、语义相反;"先降价再涨价"与"先涨价再降价"是两回事。顺序信息必须以某种方式注入。

注入方式有多种可能:改注意力公式加入位置项(改动内核,代价大)、在输出端拼接位置特征(太迟,信息已混合)、在输入端融合位置信号(不动内核,改动最小)。Transformer 选了最后一种:为每个位置生成一个与词嵌入同维的向量,直接相加。为什么加而不是拼接?拼接会让维度翻倍,且语义与位置两种信号泾渭分明、缺乏交互;相加保持维度不变,还让位置信号在后续的注意力与投影中被当作表示的一部分统一加工。工程上也最省事。

二、正弦编码:一套多频率的波段

原论文的构造乍看古怪,其实思路朴素:给每个位置发一个由多列波形组成的"指纹"。偶数维用正弦、奇数维用余弦,波长的分布从很短到很长按几何级数铺开(最长达到上万乘以某个基准周期)。每个维度对应一个频率,低位维度波形快、高位维度波形慢。

这样每个位置拿到的向量在整个序列中独一无二;更重要的是相邻位置的编码只在快波形维度上差异大、在慢波形维度上几乎相同——远近信息以不同粒度分布在各维度里,与时间表示法神似:秒针变化快、分针慢、时针更慢,看三根针就能定位并感知时间差。

它有两个硬性质。其一,无参数:编码由公式预先算出,不占训练预算,也不怕过拟合位置。其二,可外推:任意位置都能按公式算出编码,理论上不限最大序列长度——训练时没见过的更长位置也有定义(实际外推效果另说,但定义上不缺)。

位置编码多频热力示意

位置编码多频热力示意

三、绝对编码如何表达相对位置

"每个位置有唯一编码"只是及格线,更关键的是相对位置。注意力打分时,查询来自位置 i、键来自位置 j,模型要能感知"j 在 i 前面两个词"这类关系,仅靠绝对编号不够。

正弦编码的妙处在这里显现:由三角恒等式,位置 i 加 k 的正弦与余弦,可以表示成位置 i 的正弦余弦与偏移量 k 的正弦余弦的线性组合。换句话说,把位置 j 的编码"平移"到位置 i 的参照系里,只需要一个只依赖 k 而不依赖 i 的固定线性变换。模型学到这个变换(它就藏在注意力的投影矩阵里),就能在打分中直接比较相对距离——近处的词在该维度上波形相似、得分占优,远处的差异累积。

这也解释了为什么不直接用位置序号本身当编码:序号是无界的标量,大位置的数值会淹没词嵌入,且线性序号不含任何多尺度结构。归一化的序号又会让长句短句同位置混叠。多频波形一举两得:有界、有结构、有相对性。

⚠️ 提醒一个实践细节:位置编码是加在"输入端"的一次性信号,靠后续各层的残差连接一路传递保真。若把架构改为 Pre-Norm(归一化前置),位置信息的传导路径会有变化,某些变体因此改在每层重新注入位置,这是阅读现代开源实现时常见的差异点。

四、替代方案与取舍

固定正弦编码不是唯一选项,值得知道谱系。

可学习位置嵌入:把每个位置的向量当作普通参数训练,从数据中学位置表示。BERT、GPT 早期版本均用此方案。优点是表达更灵活、往往略提性能;缺点是位置上限在训练时就锁死(比如最多五百一十二个位置),且占用参数。外推需求强时(长文本任务),固定正弦方案的定义域优势就凸显。

相对位置编码一族:直接把"两位置的相对距离"作为偏置加进注意力分数,代表方案在后续研究中不断演化。它们对平移更友好,适合需要强烈顺序先验的任务,代价是改动注意力内核、实现复杂度上升。

旋转式方案:把位置信息揉进查询与键的旋转角,相对距离在点积中自然出现,近年开源大模型采用较多。可以把它看作正弦思想在注意力内核里的再实现。

方案 位置信号注入点 可外推性 参数开销 代表模型
固定正弦编码 输入端相加 定义上无上限 原始Transformer
可学习嵌入 输入端相加 上限训练时锁定 每位置一个向量 BERT 早期GPT
相对位置偏置 注意力分数内 较好 少量 多种变体
旋转式 查询键旋转 少量 近年开源大模型

💡 选型直觉:短序列、固定长度任务,可学习嵌入省心且效果好;长文本或长度多变的任务,优先考虑带外推能力的方案。原论文的正弦编码至今仍是讲原理的最佳载体——它的每一个设计点都能答出"为什么"。

五、一个容易被低估的验证实验

判断位置编码是否真的在起作用,有个简单实验:训练两个小模型,一个带位置编码、一个不带,在词序敏感的任务(比如复述数字序列或句法判断)上对比。不带位置编码的模型会把"三加五"与"五加三"学成同一个意思,准确率天花板肉眼可见地下沉。亲手跑一次这个对照,比读十遍公式更能体会位置编码的必要性。

六、位置编码的疑难杂症

相加会不会让位置信号被词义信号淹没?

理论上有此风险,实践中有三层缓冲。其一,训练让嵌入与投影矩阵学会"容忍"位置分量的存在——位置分量对注意力打分的影响被吸收进可学参数里,不构成系统性干扰。其二,残差连接保证位置信号逐层保真,不需要在每一层重新注入(原始设计如此)。其三,若确实出现位置信号衰减,现代变体可以改用每层注入或在注意力内直接加位置偏置的方案——设计空间是开放的。原论文的朴素相加能用且够用,这是它被沿用的理由。

正弦编码真的能无损外推到任意长度吗?

定义上可以,效果上要打折扣。训练时模型只见过有限范围的位置(比如前五百一十二位),推理时遇到更远位置,编码虽可计算,但相应位置的注意力模式没有经过训练打磨,行为不保证合理。长上下文任务的工程实践因此发展出位置插值、编码缩放等手段,把超界位置"折算"回训练见过的区间。外推能力是相对的:定义域无限,可靠区有限。

中文这类没有空格的语言,位置编码有额外影响吗?

位置编码本身与分词无关——它只对"第几个词元"编码,词元来自分词器(第 4 章 4.1 节)。中文的影响体现在分词层:子词切分单位更碎,同样的句子往往产生更多词元,序列更长,位置索引跨度更大。间接后果是有效上下文变短(同样长度上限装的内容更少),长文任务需要更谨慎的上下文预算。这是分词与位置两章知识的一次典型交汇。

如果完全去掉位置编码会怎样?

模型退化为"词袋加注意力":打乱词序,输出不变。语言中顺序承载的信息(主谓关系、时序、否定范围)全部丢失,机器翻译的词序崩溃、语法判断接近乱猜。2.3 节开头提过的对照实验正是一份现成的验证方案——建议真的跑一次,看到准确率塌陷的瞬间,位置编码的必要性就再也不是书本结论,而是你亲手测得的事实。

💡 代码阅读提示:看开源实现时注意区分"位置编码"的注入位置——有的实现把正弦编码写在模型入口(对应原始论文),有的把可学习嵌入放在词嵌入之后,有的在注意力内部加偏置或旋转。位置信息注入点不同不改变原理,但直接影响你调试时该去哪里查看位置相关的张量。养成先找注入点再读代码的习惯。

温故知新

  • 顺序盲区是结构属性:注意力的打分与加权只依赖向量内容,打乱词序输出同步换位;
  • 输入端相加注入:不改内核、维度不变,位置信号随表示一起被后续层加工;
  • 多频波形指纹:偶维正弦奇维余弦,波长按几何级数铺开,每位置编码唯一;
  • 多尺度感知:快波辨相邻、慢波辨远近,类似时分秒三根针的粒度分工;
  • 相对位置可线性表达:三角恒等式保证平移对应固定线性变换,模型可从打分中学出距离感;
  • 固定与可学习之辩:正弦编码零参数可外推,可学习嵌入灵活但上限锁死,按任务长度需求取舍;
  • 谱系在演化:相对位置偏置与旋转式方案是同一问题在注意力内核内的再解答。

位置补齐后,注意力子层的输出还需要"消化"。下一节看前馈网络如何在每个位置上独立做非线性加工。

常见疑问

问:为什么用正弦余弦这种周期函数,而不是直接用词的位置序号?
答:直接用序号有两个毛病。一是无界:第一百个词的编码是一百,与词向量数值尺度不匹配,长句还会更大;二是没有相对关系:序号三与序号五的关系,和三百与三百零二的关系,对网络来说毫无规律可循。正余弦编码有界、多维,且任意固定偏移的两个位置之间存在线性变换关系——相对位置信息被编码进了函数结构本身。

问:后来的 RoPE、相对位置编码和它是什么关系?
答:同一问题的迭代解。正弦编码是绝对编码加隐式相对性,后续工作发现把相对位置直接做进注意力分数里更有效,RoPE 通过旋转矩阵做到了「绝对形式实现相对性质」,成为当代大模型的主流选择。理解了原版正弦编码的动机,再看这些变体就只是「同一目标的更优实现」,不会有断层感。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U