1. 位置编码的起源:为什么Transformer需要位置编码?

大家好,我是你们的老朋友。今天咱们聊聊Transformer里一个看似不起眼、实则至关重要的东西——位置编码。

说实话,我第一次接触Transformer时,心里就冒出一个疑问:这玩意儿怎么知道句子里的词谁先谁后?RNN天然就有顺序感,但Transformer呢?它可是并行计算的。

嗯,这个问题,就是咱们今天要解决的核心。

1.1 RNN的序列依赖:天生的顺序感

先回顾一下RNN。RNN处理序列的方式,说白了就是一个词一个词地喂进去。

比如句子“我 爱 你”,RNN会先看“我”,更新隐藏状态;再看“爱”,结合之前的隐藏状态;最后看“你”。每一步都依赖上一步的结果。

这种设计有个好处:位置信息天然蕴含在计算顺序里。第1个词和第3个词,在隐藏状态中的影响路径完全不同。

但代价也很明显——无法并行。你想想看,第3个词必须等第2个词算完,第2个词必须等第1个词算完。长序列训练起来,慢得让人抓狂。

核心矛盾:RNN的顺序依赖带来了位置感知能力,却牺牲了并行效率。

1.2 Transformer的并行化:效率的胜利,位置的迷失

Transformer的Self-Attention机制,彻底改变了游戏规则。它不再逐个词处理,而是一次性看到所有词

具体来说,对于句子“我 爱 你”,Attention会同时计算“我”对“爱”的注意力、“我”对“你”的注意力……所有词对之间都做点积运算。

这样做的好处是:GPU可以疯狂并行,训练速度直接起飞。

但问题来了——模型怎么知道“我”是第一个词,“你”是第三个词?

在Attention眼里,“我 爱 你”和“你 爱 我”的输入矩阵完全一样(如果词嵌入相同的话)。模型根本分不清顺序!

注意:如果不加位置编码,Transformer就是一个“词袋模型”的升级版——它知道有哪些词,但不知道词的先后顺序。这在很多任务上是致命的。

1.3 位置编码的必要性:给并行模型装上“顺序感”

所以,我们需要一种方法,在不破坏并行计算的前提下,把位置信息注入到模型里

这就是位置编码(Positional Encoding)的使命。

它的核心思想很简单:给每个位置的词向量加上一个“位置信号”。这个信号要满足几个条件:

  • 唯一性:每个位置有独一无二的编码
  • 有界性:编码值不能太大,否则会淹没词本身的信息
  • 相对位置感知:模型能通过编码推断出两个词之间的距离
  • 可外推:训练时没见过的长度,推理时也能处理

我个人习惯把位置编码比作“坐标系统”。每个词在句子这个“一维空间”里都有一个坐标。有了坐标,模型就能知道谁在前、谁在后,以及相隔多远。

避坑指南:我曾经在一个项目里直接用了可学习的位置编码(Learnable Positional Encoding),结果训练序列长度是128,推理时来了个256长度的样本,模型直接崩了。这就是没有考虑“可外推性”的教训。

1.4 知识体系总览:位置编码的演进路线

为了让大家有个整体认知,我画了一张图,梳理了位置编码的演进脉络。

位置编码演进路线图 RNN时代 顺序依赖 → 天然位置感知 并行化需求 Transformer 并行计算 → 位置信息丢失 注入位置信号 位置编码 不破坏并行 + 感知顺序 绝对位置编码 Sinusoidal / 可学习 每个位置有固定编码 相对位置编码 Shaw / Transformer-XL 关注词间距离 RoPE (旋转位置编码) 旋转矩阵实现 兼具绝对+相对优势 核心目标:让并行模型理解“谁先谁后” 不改变并行架构,仅通过输入注入位置信号

从图中可以看到,位置编码经历了从绝对到相对、再到旋转编码的演进。咱们这门课会逐一深入剖析,尤其是RoPE——它现在可是大模型(如LLaMA、ChatGLM)的标配。

1.5 一个直观的例子:为什么没有位置编码会出问题?

咱们做个思想实验。假设词嵌入维度是2,简单起见,“我”的向量是[1, 0],“你”的向量是[0, 1]。

句子A:“我 爱 你” → 输入矩阵是 [[1,0], [?,?], [0,1]]

句子B:“你 爱 我” → 输入矩阵是 [[0,1], [?,?], [1,0]]

如果“爱”的向量是[0.5, 0.5],那么两个句子的输入矩阵在Attention眼里,只是行顺序不同。但Attention是对位置不敏感的——它只看内容,不看位置。

结果就是:模型认为“我 爱 你”和“你 爱 我”是一样的!这显然不对。

关键结论:没有位置编码,Transformer无法区分“主谓宾”和“宾谓主”。这在自然语言理解中是灾难性的。

1.6 小结:位置编码解决了什么问题?

咱们总结一下今天的内容:

  • RNN的困境:顺序依赖导致无法并行,训练效率低
  • Transformer的优势:并行计算,效率高
  • Transformer的短板:丢失了位置信息,模型变成“词袋”
  • 位置编码的使命:在不破坏并行的前提下,给模型装上“顺序感”

说白了,位置编码就是Transformer的“记忆坐标”。没有它,模型就像没有地图的探险家——知道有哪些宝藏(词),但不知道它们分布在哪里(顺序)。

下一章,咱们会深入探讨绝对位置编码的具体实现,包括经典的Sinusoidal编码和可学习编码。我会带着大家手撕代码,看看它们到底是怎么工作的。

嗯,今天就到这里。记住:位置编码不是锦上添花,而是雪中送炭


专注资料整理