1. 引言
想象一下,你是一家大型快递公司的分拣中心主管。每天有成千上万的包裹(词语)涌进来,你需要让每个包裹知道它该去哪、和谁一起走、在整个流程中扮演什么角色。这就是 Transformer 在做的事——只不过它分拣的不是包裹,而是词语之间的关系。
传统的 RNN 像一条传送带,包裹一个接一个地过,前面的包裹会影响后面的判断,但一旦传送带太长,最早的包裹就「失联」了。Transformer 则不同:它让所有包裹同时摊在桌面上,每个包裹都能直接看到其他所有包裹,然后自己决定「我跟谁关系最铁」。
本文用快递分拣的比喻,带你零基础看懂 Transformer 的核心原理。
2. 核心思想:自注意力(Self-Attention)——「谁和谁有关系?」
2.1 三个角色:查询、键、值
在分拣中心,每个包裹(词语)都会发出三样东西:
- 查询(Query):包裹上贴的「我想找谁?」标签。比如「苹果」这个包裹会问:「谁跟我搭配最合理?」
- 键(Key):每个包裹自己的「我是谁」标签。比如「吃」的键是「动词_食用」,「红色」的键是「颜色_属性」。
- 值(Value):包裹里实际装的内容。比如「苹果」的值是「一种水果,可食用,有红色/绿色品种」。
分拣过程是这样的:每个包裹的查询,去和所有其他包裹的键做匹配(计算相似度),匹配度越高,说明这两个包裹关系越紧密。然后根据匹配度,把其他包裹的值加权汇总,更新自己的理解。
2.2 比喻:相亲大会
把自注意力想象成一场大型相亲会:
- 每个人(词语)都举着一个牌子,上面写着自己的需求(Query)和特点(Key)。
- 每个人在会场里扫视所有人,看谁的牌子和自己的需求最匹配。
- 匹配度高的,就多聊几句(加权),匹配度低的就打个招呼(低权重)。
- 最后,每个人根据和所有人的「交流结果」,更新自己对这场相亲的理解(新的表示)。
这样一来,「苹果」和「吃」的匹配度就很高,而「苹果」和「跑步」的匹配度就很低。Transformer 通过这种方式,让每个词都能感知到它在句子中的上下文。
3. 多头注意力:多个分拣员同时干活
一个分拣员可能看走眼,那就派多个分拣员同时分拣,每个分拣员关注不同的角度:
- 分拣员 A 关注「语法关系」(主语-谓语-宾语)
- 分拣员 B 关注「语义相似度」(同义词、相关词)
- 分拣员 C 关注「位置距离」(谁离得近)
每个分拣员独立做一次自注意力计算,得到一组结果。最后把所有分拣员的结果拼在一起,再压缩成一份综合报告。这就是多头注意力(Multi-Head Attention)。
比喻:一个侦探破案时,会同时看监控、查通话记录、走访邻居——每个线索源独立分析,最后汇总推理。
4. 位置编码:包裹的顺序很重要
自注意力让所有词语同时可见,但这也带来了一个问题:它不知道词语的先后顺序。
「我打你」和「你打我」的词语完全一样,但意思截然相反。Transformer 怎么区分?它给每个词语加了一个位置编码(Positional Encoding)——相当于给每个包裹贴上一个「第几号传送带」的标签。
位置编码用正弦和余弦函数生成,不同位置的编码不同。这样模型就能知道「苹果」是在句首还是句尾。
比喻:快递分拣时,包裹上除了地址,还有时间戳——先来的先处理,后来的后处理,顺序不能乱。
5. 编码器-解码器结构:分拣与配送
Transformer 由两部分组成:
5.1 编码器(Encoder):分拣中心
编码器把输入句子里的每个词语,通过自注意力机制,变成富含上下文信息的向量。比如「苹果」在「我吃苹果」里会被编码成「食物_可食用」,在「苹果公司发布新品」里会被编码成「科技公司_品牌」。
编码器由多个相同的层堆叠而成,每层包含:
- 一个多头自注意力子层
- 一个前馈神经网络子层(FFN,可以理解为「对信息做进一步加工」)
5.2 解码器(Decoder):配送员
解码器负责生成输出。比如在机器翻译中,输入是中文「我吃苹果」,解码器要逐词生成英文「I eat apple」。
解码器比编码器多了一个子层:交叉注意力(Cross-Attention)。它让解码器在生成每个词时,都能回头去看编码器输出的信息——就像配送员在送货时,随时查看分拣中心给的路线图。
解码器还有一个掩码自注意力:生成第 3 个词时,不能偷看第 4 个词是什么。这就像写作文时,你只能根据已经写好的内容决定下一句写什么,不能先看结尾再写开头。
6. 完整流程:一个句子在 Transformer 里走一圈
以翻译「我吃苹果」→「I eat apple」为例:
- 输入嵌入:把「我」「吃」「苹果」三个词转成向量。
- 加位置编码:给每个向量加上位置信息。
- 编码器处理:
- 自注意力:让「苹果」看到「吃」和「我」,知道自己是宾语。
- 前馈网络:进一步提取特征。
- 重复 6 层(以原版 Transformer 为例),得到三个富含上下文信息的向量。
- 解码器逐词生成:
- 第一步:输入
<start>标记,通过掩码自注意力 + 交叉注意力 + 前馈网络,预测第一个词「I」。 - 第二步:输入
<start> I,预测第二个词「eat」。 - 第三步:输入
<start> I eat,预测第三个词「apple」。 - 第四步:输入
<start> I eat apple,预测<end>标记,结束。
- 第一步:输入
7. 为什么 Transformer 这么强?
- 并行计算:所有词语同时处理,不像 RNN 必须串行,训练速度快得多。
- 长距离依赖:无论两个词隔多远,自注意力都能直接建立联系,解决了 RNN 的「长程遗忘」问题。
- 可扩展性:层数越多、头数越多,模型容量越大——GPT、BERT 都是把 Transformer 堆到几十上百层。
8. 总结
| 概念 | 快递分拣比喻 | 技术术语 |
|---|---|---|
| 每个包裹看其他所有包裹 | 自注意力 | Self-Attention |
| 多个分拣员看不同角度 | 多头注意力 | Multi-Head Attention |
| 包裹上的时间戳 | 位置编码 | Positional Encoding |
| 分拣中心处理输入 | 编码器 | Encoder |
| 配送员生成输出 | 解码器 | Decoder |
| 配送员看分拣中心的地图 | 交叉注意力 | Cross-Attention |
Transformer 的核心思想其实很简单:让每个词都能直接看到所有其他词,自己决定谁更重要。这个机制催生了 GPT、BERT、T5 等一系列大模型,也奠定了现代 NLP 的基石。
下次你使用 ChatGPT 时,可以想象背后有无数个「快递分拣员」在同时工作——它们正在用自注意力机制,帮你把词语之间的关系理得清清楚楚。