Transformer 原理图解:自注意力、位置编码、Encoder-Decoder
从第一性原理拆解 Transformer 架构:它为什么能取代 RNN,自注意力在算什么,位置编码解决什么问题。
2017 年《Attention Is All You Need》提出 Transformer,彻底取代 RNN/LSTM 成为大模型的基础架构。 要真正理解它,别背公式,先问:RNN 的问题到底在哪?
从 RNN 的缺陷说起
RNN 按顺序逐个处理词,当前时刻必须等前面时刻算完。两个致命问题:
- 无法并行——串行计算,训练慢
- 长距离遗忘——信息要穿过很多步才传到,梯度消失,早期的词对后面影响衰减
Transformer 的解法很朴素:让所有词同时处理,并且每个词都能直接“看到”序列里其他所有词。 这就是自注意力(Self-Attention)。
自注意力在算什么
给定一句话,比如「银行门口有一家银行」。两个「银行」含义不同,自注意力让每个词根据上下文重新加权它看到的其他词。
对每个词,模型算出三样东西:
- Query(查询):我想找什么信息
- Key(键):我是什么信息,能被谁查
- Value(值):我实际携带的内容
注意力权重 = 当前词的 Query 和所有词的 Key 做点积(相似度),归一化后去加权所有词的 Value。
Attention(Q,K,V) = softmax(QKᵀ/√d) · V
除以 √d 是为了防止点积过大导致 softmax 梯度消失。这就是「缩放点积注意力」。
多头注意力(Multi-Head):同时算多组 Q/K/V(8 组常见),每组关注不同子空间的关系(语法、语义、位置……),最后拼接。相当于多个“专家”并行看同一句话,各看各的维度。
位置编码:打破“词袋”困境
自注意力对词序天然不敏感——「猫追狗」和「狗追猫」在它的眼里 tokens 一样。所以必须显式注入位置信息。
- 原始方案:正弦/余弦位置编码,把位置写成固定函数,叠加到词向量上
- 现代方案(RoPE 旋转位置编码):把位置信息旋进 Q/K 向量,既表达绝对位置,又天然表达相对位置,被 Llama、Qwen 等主流模型采用
Encoder-Decoder 结构
经典 Transformer 分两半(GPT 系只用 Decoder,BERT 系只用 Encoder):
| 组件 | 职责 | 代表 |
|---|---|---|
| Encoder | 双向看全句,理解语义 | BERT |
| Decoder | 单向(只能看左边),逐词生成 | GPT |
Encoder:自注意力可以看整句上下文(双向掩码)。 Decoder:自注意力做因果掩码——预测下一个词时只能看已生成的词,不能“偷看”未来。这就是自回归生成。
一句话总结
Transformer = 让每个词能并行地“看遍全场”(自注意力)+ 显式记住自己的位置(位置编码)+ 用掩码控制信息流向(Encoder 双向 / Decoder 单向)。
理解了这三件事,你就能看懂后续几乎所有大模型的论文——因为它们的核心,都是在优化这层自注意力的“看遍全场”的方式(稀疏注意力、分组查询注意力 GQA、滑动窗口……)。