可视化资源

正弦位置编码

Transformer 同时看一整句话,本身分不清词的先后——“猫追狗”和“狗追猫”在它眼里一样。于是要给每个位置发一张独一无二的“身份证”,告诉模型谁在前谁在后。一个巧妙的办法:用一组不同频率的正弦/余弦波。低维是高频(快速摆动),高维是低频(缓慢摆动);把每个位置在这些波上的取值拼起来,就成了它的位置编码。妙处在于:相邻位置的编码很接近,相对距离还有稳定的规律。下面左边是位置编码热力图,拖动“查询位置”,右边显示它和每个位置的相似度。

左图:每行一个位置(共 32 个),每列一个维度(共 24 个)。颜色是该维正弦/余弦的取值(蓝=−1红=+1)。注意列从左到右摆动越来越慢——这就是不同频率。金框是当前查询位置,右边的蓝条是它与各位置编码的相似度。

6
多频率正弦

每个维度是一条不同频率的波,组合起来给每个位置一个唯一编码。

相近则相似

位置越近,编码越像(相似度越高)——模型因此能感知“谁挨着谁”。

能外推

正弦是周期函数,公式直接算,遇到比训练更长的序列也能给出编码。

后续工作(RoPE、ALiBi、可学习位置嵌入)大多在“可外推、相对位置可线性表达、不占模型容量”这三点上做权衡。想深入可看: