在之前的系列里,我们花了很多时间,拆解了传统的正余弦位置编码。我们知道了它是怎么用三角函数给每个词打上"波形指纹"的。那个设计很优雅,但它并非完美无缺。随着后来大模型处理的文章越来越长,传统方案的一个"隐藏病灶"彻底爆发了。为了理解这个病灶,我们得先回顾一下,传统方案到底是怎么干活的。回顾一下,因为 Transformer 是并行处理的,天生没有语序感,所以我们必须手动注入位置信息。传统方案的做法,可以概括为一个极其直觉的动作——贴便签。看画面上的这三个词。系统给每个词生成了一串代表位置的向量,就像一张张"位置便签",啪地一下贴在词向量的头上。接下来,就是那个我们反复强调的操作——直接相加。词向量的含义,加上位置便签的编号,等于最终喂给模型的输入向量。在短句子里,比如十几个词,这个操作毫无问题。便签上的数字不大,词向量原本的"语义地貌"没有被破坏,模型能同时看清"词义"和"位置"。但大模型的野心,不仅仅是读句子,它们要读整篇文章、整本书。这时候,"贴便签"的灾难就来了。