编程与 AI13 分钟阅读更新于 2026-08-03

正弦和余弦为什么要交替出现在位置编码里

围绕正弦余弦位置编码公式、维度排列和长度外推的描述,解释不同频率如何表示位置与距离。

相关工具

注意力本身不会自动知道顺序

Self-Attention 可以让一个位置读取其他位置,但如果输入只是一组没有顺序标记的词向量,模型很难仅凭集合内容判断谁在前、谁在后。Transformer 相关概念 在介绍位置编码时指出,需要把能够表示位置和距离的向量加入词嵌入。

位置编码的任务不是替代词嵌入,而是补上顺序信息。词嵌入回答“这个位置是什么词”,位置编码回答“这个词处在序列哪里”,两者相加后才形成带有内容和顺序的输入表示。

Transformer 词嵌入和正弦余弦位置编码共同表示顺序的示意图
位置编码补回顺序

词嵌入提供词元内容,位置编码提供顺序与距离信息,两者共同进入 Transformer。

为什么不用每个位置一个完全独立向量

一种直接做法是为第 1 个、第 2 个、第 3 个位置分别学习一个向量。但如果训练数据没有覆盖更长位置,模型就没有现成的可学习向量可用。这里介绍正弦余弦方案时特别提到,它可以扩展到训练数据之外的未知序列长度。

规则生成的位置编码不需要为每个位置单独保存参数。给定位置编号和维度索引,就能根据公式算出对应数值。这种连续、可外推的形式为模型处理更长序列提供了结构上的可能。

不同维度使用不同频率

正弦余弦位置编码不是让所有维度都用同一条波形。不同维度使用不同的频率,部分维度变化得快,适合表达相邻位置的细微差异;部分维度变化得慢,适合在更长范围内保留位置趋势。

因此,一个位置的编码不是一个单独的数字,而是一组不同频率共同组成的向量。位置变化时,各维度按照各自的周期变化,组合起来形成具有区分度的模式。

Transformer 正弦余弦位置编码不同维度使用不同频率的示意图
位置编码中的多种频率

不同特征维度使用不同变化频率,快慢变化共同构成一个位置的编码向量。

正弦和余弦为什么成对出现

经典公式把偶数维度和奇数维度分别交给正弦和余弦函数。两者相位相差一个四分之一周期,同一位置会得到一对互相配合的数值。随着位置变化,这对数值沿着周期曲线移动,能够形成更丰富的相位表示。

交替排列也让每个位置在相邻的两个维度中同时保留一对周期信号。模型不必只依赖一条波形判断位置,而可以结合不同频率和不同相位的特征识别顺序关系。

位置和距离为什么可以从这些波形中被推断

如果两个位置相邻,它们在高频维度上的变化可能明显;如果两个位置相距较远,低频维度可以提供更平缓的位置信号。Self-Attention 通过对带位置的表示做投影和点积,学习如何利用这些组合模式判断相对关系。

位置编码并不是直接把“距离=3”写成一个字段,而是用一组可计算的周期特征表示位置。模型通过训练学会从不同维度的变化中提取顺序与距离,这也是频率组合比单一计数值更有表达力的原因。

论文公式和实现排列可能略有不同

资料 说明,论文中的正弦和余弦值是交织排列的,而一些官方示例代码可能把所有正弦值放在一部分维度,把所有余弦值放在另一部分维度,再进行拼接。两种排列方式在实现上不同,但都围绕正弦余弦函数和多频率表示。

阅读代码时,重点先确认三个问题:位置索引如何进入公式,频率如何随维度变化,以及最终向量如何与词嵌入对齐。不要只因为维度排列顺序不同,就误以为它完全换了一种位置编码思想。

Transformer 正弦余弦位置编码交替排列与分段排列的对比图
交替排列与分段排列

位置编码可以按论文方式交替排列,也可以在实现中分段组织正弦和余弦维度。

长度外推是规则位置编码的优势之一

训练完成后,如果遇到比训练集中最长句子更长的输入,规则公式仍然可以为新的位置生成向量。资料 把这一点列为正弦余弦位置编码的优点。模型至少能够构造输入,而不必因为没有对应的可学习位置表而直接缺少表示。

但能生成更长位置编码不等于模型一定能稳定理解长文本。注意力计算成本、训练数据覆盖范围和模型对远距离关系的学习都会影响实际效果。位置编码外推是必要条件,不是完整能力保证。

位置编码最终要和词嵌入保持同一宽度

词嵌入和位置编码通常都构造成 d_model 维,然后逐元素相加。这样形成的向量可以直接进入第一层编码器或解码器,后续残差连接也能继续使用统一模型宽度。

如果位置编码宽度不同,就需要额外投影或拼接处理,输入接口会改变。经典 Transformer 选择同维相加,让词义和位置信息在每个特征维度上融合,并保持后续层的张量形状稳定。

用四个问题检查正弦余弦位置编码

第一,位置编码是否与词嵌入具有相同宽度;第二,不同维度是否使用了不同频率;第三,正弦和余弦如何分布在向量维度中;第四,公式是否可以为训练范围之外的位置继续生成编码。

这四个问题能把公式、实现和模型能力连接起来。正弦余弦不是为了画出好看的波形,而是用规则化、多频率的向量为注意力提供顺序和距离线索。

常见问题

为什么位置编码要同时使用正弦和余弦?

两种函数具有相位差,可以在不同频率下共同表示位置变化,为模型提供更丰富的周期特征。

正弦余弦位置编码能外推到任意长度吗?

公式通常可以继续生成更长位置的向量,但模型是否能可靠利用这些位置,还受训练数据、注意力成本和泛化能力影响。

论文和代码中的位置编码排列不同会影响思想吗?

交替排列和分段排列的组织方式可能不同,但都可以基于正弦余弦函数和多频率生成位置表示,需结合具体实现判断。