上一期,我们揭开了正余弦位置编码的旋转矩阵本质,回答了"为什么选正余弦"。

但不知道你有没有注意到一个细节:公式里那个庞大的分母,导致不同维度的旋转速度——也就是频率——是完全不一样的。

有的维度转得飞快,有的维度转得像蜗牛。为什么要搞得这么复杂?统一成一个频率不好吗?
要回答这个问题,我们需要先看一个极其精妙的生活类比——时钟。

看画面上的这个表盘。秒针、分针、时针,都在绕着中心转。但它们的"颗粒度"完全不同:
秒针跑得最快,一秒钟就走一格,微观上极其精确;分针中速,用来衡量分钟级别的变化;时针最慢,一天才转一圈,负责宏观的时间感知。位置编码的维度设计,完美复刻了这个逻辑。在 512 个维度中:
最前面的低维度,就像秒针,频率极高,波形变化极其剧烈;中间的维度,就像分针,频率适中;最后面的高维度,就像时针,频率极低,波形几乎是一条直线。看这个秒针的转动,是不是感觉非常敏锐?位置编码的低维度也是如此——它对位置的微小变化极其敏感。那么,这个"快慢"在数学上是怎么控制的呢?

当维度极低时,频率接近最大值 1,波形最抖;当维度极高时,频率趋近于 0,几乎不动。就像时钟的齿轮比一样,公式通过维度的索引,精准地控制了每一对维度的"转速"。

光看数字不直观,我们直接看波形。屏幕上并排画了三条正弦波,模拟同一个句子在三种不同维度下的形态。最上面这条,密密麻麻,像心电图一样剧烈震荡。这就是低维度的高频波形,它在短短几个位置内就完成了好几次周期变换。这意味着什么?意味着哪怕两个词紧挨着,它也能轻易区分开来。
中间这条,疏密适中,对应中频维度。
最下面这条,像平静的水面,几乎是一条直线。这就是高维度的低频波形。它在几百个位置的范围内,可能才刚刚起伏一点点。但千万别以为它没用——它负责的是宏观的、长距离的位置感知。

为什么要这样分工?因为人类语言中的位置关系,本身就是多尺度的。判断"苹果"和"吃"谁在前面,这是微观的相邻关系,需要高频维度来拿尺子精确测量;判断段落开头的主语和段落结尾的谓语之间的距离,这是宏观的长距离关系,需要低频维度来提供一个大范围的坐标系。
把所有尺度结合起来,你就得到了一个完美的类比:这就像给每个位置同时戴上了秒表、手表和日历。
看相邻词的间距,你瞄一眼秒表;看跨句子的距离,你抬腕看手表;看篇章级别的结构,你翻一下日历。512 个维度叠加在一起,就形成了一张覆盖极宽频率范围的全频段波形指纹。任何两个位置,无论隔得多近或多远,都能在这张指纹图上找到差异。但这就引出了一个更刁钻的问题:既然位置编码是一个 512 维的复杂向量,而词向量也是一个 512 维的复杂向量,我们直接把它们逐位相加——这两种截然不同的信息,真的不会互相打架、互相覆盖吗?
高维空间的"透明叠加"术我们看到每个位置都拥有由 512 个维度组成的独特波形指纹。但这就引出了一个极具争议的疑问——我们真的是在做简单的"逐位相加"吗?把词向量和位置向量直接加在一起,这两种截然不同的信息,难道不会互相打架、互相覆盖吗?
让我们来直面这个直觉上的"死结"。

我们之所以觉得相加会丢失信息,是因为我们的直觉被一维空间绑架了。看画面上的这个等式:假设数字 5 代表"猫"的意思,数字 3 代表"第3个位置"。我们把它们加起来,得到了 8。问题来了——当你只看到 8 的时候,你能猜出它是怎么来的吗?它是 5 加 3?还是 4 加 4?或者是 6 加 2?
答案是:你根本猜不出来。
在一根数轴上,一旦两个数合二为一,原来的成分就永远无法还原了。这就是一维空间的灾难。
但好消息是,Transformer 的向量并不生活在一维的数轴上。它们生活在一个 512 维的超空间里。在这个维度下,一个堪称奇迹的数学现象出现了。

看画面上的这两个箭头。一根代表词向量所在的"语义子空间",另一根代表位置编码所在的"位置子空间"。在 512 维的极高维度下,任何两个独立生成的向量,它们之间的夹角几乎一定是 90 度——也就是正交的。
你可以把词向量想象成指向"正东方"的箭头,把位置向量想象成指向"正北方"的箭头。它们占据着完全不同、互不干扰的"频道"。正因为它们是互相垂直的,所以当你把它们相加时,根本不存在"谁覆盖谁"的问题。它们只是在垂直的方向上延伸彼此,两种信息被完美地隔离并保留了下来。如果几何学还是太抽象,我们换一个极其生活化的类比。

想象词向量是一张色彩丰富的照片——比如一张猫的图片,它包含了"猫"的全部语义细节。而位置向量,是一张印有坐标网格的半透明胶片。现在,把这张透明胶片直接盖在照片上。发生了什么?猫的图案被擦掉了吗?没有。颜色被混淆了吗?也没有。

你依然能清晰地看到猫的全貌,但与此同时,你现在还能通过上面的网格,精确读出猫在画面中的相对位置。这就是 512 维空间中"逐位相加"的本质——它不是一维世界里粗暴的"混合",而是一次高维空间里精妙的"透明叠加"。
直觉上说得通了,但在 Transformer 内部的实际计算中,模型真的能"看穿"这种叠加吗?
答案藏在自注意力机制的核心公式里。

当叠加后的向量通过矩阵乘法进入注意力层时,简单的加法会自动展开。画面上的公式展示了这个代数展开的过程,不需要去读它,你只需要看结果。注意力得分在展开后,会自然而然地分裂成四种截然不同的交互关系。
左上角,语义乘以语义——这是纯粹的词义关系,比如"猫"和"狗"的相似度。右上角和左下角,语义乘以位置,以及位置乘以语义——这是词与其所在位置结合产生的上下文关系。右下角,位置乘以位置——这是纯粹的相对距离关系。发现了吗?模型根本不需要做任何额外的工作来"拆解"信息。
矩阵乘法就像一个自动分拣机,把透明叠加在一起的信息,在计算过程中自动拆分成了四条清晰的信息流。模型只需要在训练中学会利用这四条信息流就足够了。
这就是高维空间带来的降维打击——用最简单的加法,实现了最完美的信息保留。
残差连接的实际考量但如果你去翻看其他的深度学习教程,可能会发现一个有趣的现象:在处理多种特征时,很多模型会选择"拼接"——把两个向量头尾相连,变成一个更长的新向量。这听起来比直接相加更安全,毕竟信息物理上隔离开了。
那为什么 Transformer 偏偏要选"相加"呢?

这背后,藏着一个非常硬核的工程学考量——为了保住 Transformer 的生命线:残差连接。
Transformer 内部有几十层网络。为了让梯度能在几十层之间顺畅回传,不出现"梯度消失",Transformer 用了一个绝招:残差连接。画面上的公式展示了它的核心思想,你不需要去读它,只需要理解它的一个死规定——每一层的输出,都是"变换后的结果"加上"原始输入"。
既然是做加法,这就意味着一个硬性前提:等号左边的维度,必须和等号右边的维度,完完全全一样。现在,我们把"拼接"和"相加"放在一起,看看谁的维度守得住。

先看左边,拼接方案。词向量 512 维,位置编码 512 维,头尾一接——好家伙,直接变成了 1024 维。维度膨胀了一倍。再看右边,相加方案。512 维加 512 维,出来的还是 512 维。稳如泰山。
看起来只是一倍的差距?别急,我们把视角拉长,看看多层网络叠加之后会发生什么。如果用拼接方案,灾难就开始了。
第 1 层进去 512 维,出来 1024 维;
第 2 层再把 1024 维翻倍,变成 2048 维;
到第 4 层,维度已经膨胀到了惊人的 4096 维!

这就像一个不断吃自助餐的胖子,每过一层就胖一圈。计算量呈指数级爆炸,内存根本扛不住。更致命的是,维度一直在变,残差连接的加法根本没法做,梯度回传的高速公路直接断绝。
反观相加方案,就像一条畅通无阻的高速公路。从第 1 层到第 4 层,无论中间做了多么复杂的自注意力计算,维度始终死死锁在 512 维。信息像流水一样,一层一层平稳地向前流动。残差连接的加法完美运行,模型可以堆叠几十层甚至上百层而不会崩溃。

所以,"逐位相加"不仅没有丢失信息,反而是一道极其精妙的工程护城河。它用最简单的加法,保住了维度的稳定性,成全了残差连接,最终托起了 Transformer 庞大的身躯。这就是工程与数学的完美统一。
总结 · 棱镜与光的比喻到这里,Positional Encoding 系列的全部硬核推导和工程解析就结束了。在最后这一幕,我想用一个比喻,把这一切串起来。想象一下,我们输入给 Transformer 的那个向量——也就是词向量与位置编码相加后的结果——它就像一束白光。

在这束白光里,"词义"和"位置"是揉杂在一起的,你肉眼分不清谁是谁。但是,当这束白光穿过 Transformer 内部的核心引擎——Self-Attention 自注意力机制时,奇迹发生了。
自注意力就像一块棱镜。它把揉杂在一起的白光,精准地折射成了两道不同颜色的光:
向上折射出的,是纯粹的语义信息——模型借此知道"猫"和"狗"很相似;
向下折射出的,是纯粹的位置信息——模型借此知道"猫"在句首,"狗"在句尾。
之前我们推导的那个四项展开公式,正是这块棱镜的物理原理——它在数学上自动完成了信息的分光。回顾这半个多小时的旅程,我们其实搞懂了四个关键词:
高维正交——赋予了叠加不丢失信息的可能性;多尺度编码——秒针、分针、时针,兼顾微观与宏观;特征融合——透明胶片叠合,加法不是毁灭而是融合;残差流动——维度不变,打通了深层网络的任督二脉;
从二进制时钟的波形指纹,到 512 维空间的透明叠加,再到工程上的残差考量。这四个要点,构成了 Positional Encoding 完整的逻辑闭环。最后,我想送给正在学 AI 的你一句话:

逐元素相加,并不是毁灭信息,而是一次高维空间的「特征融合」。语义和位置,就像两道不同频率的光——神经网络这块棱镜,依然能将它们完美分开。