位置编码——给序列安上坐标 位置编码——给序列安上"坐标"上一集我们讲了词嵌入——每个词不再是一个孤立的编号,而是变成了一组有语义的向量。但当Transformer拿到这组向量时,另一个问题来了:它怎么知道这些词谁先谁后?明明词都认识,但模型不知道顺序"张三打了李四"和"李四打了张三"——词完全一样,意思却天差地别。人靠常识就能判断谁打了谁,因为人认识"张三"和"李四"这两个名字背后的信息。但模型没有常识,它只看到两组完全相同的向量集合,根本分不清谁打了谁。更麻烦的是,有些句子调换词序后从常识上看仍然"合理"——比如"小明吃饭了"和"吃饭了小明了",后者虽然不通顺,但在模型眼里和前者就是同一组向量。它需要一个机制来判断这些词的先后顺序。这背后的根本原因在于Transformer的一个核心特性——并行计算。为什么RNN没有这个问题在Transformer出现之前,主流的序列模型是RNN(循环神经网络)。RNN是一个词一个词顺序处理的,看完第一个词看第二个,再第三个……天然就知道谁先谁后。就像人读句子一样,从左往右,字序自动就有了。但RNN的问题是慢——必须等前一个词处理完才能处理下一个,没法一口气全读完。当句子很长时,早期的信息也会逐渐"稀释"。Transformer的突破性贡献之一就是并行化——把整句话的所有词一次性送入网络。速度上去了,但代价就是顺序信息丢失了。所以需要一个额外的机制,告诉模型每个词在句子里的位置。这个机制就是位置编码(Positional Encoding)。