词向量矩阵
相同 token 的词向量只跟词本身有关,不跟它在第几个位置有关。
Self-Attention 本身并不知道“第一个词”和“第三个词”有什么区别。如果只把 token 当成一组无序向量,猫 咬 狗 和 狗 咬 猫 在很多地方会看起来过于相似。位置编码的任务,就是把“顺序”这个信息显式注入进去。
先切换句子顺序,再点击某个位置。左边展示词向量、位置向量和最终输入向量,右边会解释这个位置上到底发生了什么变化。
相同 token 的词向量只跟词本身有关,不跟它在第几个位置有关。
不同位置会拿到不同的位置信号,即使 token 本身相同,位置向量也会不同。
模型真正读到的是两者相加后的结果,而不是词向量单独存在。
下面这个实验用简化版 4 维位置编码展示不同位置的数值模式。拖动位置滑块,观察不同维度有的变化快、有的变化慢,这样模型就能同时感知近距离和更长跨度的位置关系。
位置编码不是随机编号,而是有连续变化规律的向量。相邻位置既有差异,又不会完全断裂。
如果没有位置信息,模型更像是在看“一包 token”,而不是在看一个有先后顺序的序列。
模型输入不是“词向量和位置向量二选一”,而是把两者相加后一起送进后续注意力计算。
它不是锦上添花的小技巧,而是 Transformer 能处理顺序信息的基础条件之一。