🏫 用"全班讨论"来理解
旧方法:RNN = 一个接一个发言
老师让每个学生按顺序站起来发言。第 50 个人说的时候,要把前面 49 个人说了什么都记住。人越多越记不住开头。而且慢——50 个人得等半天。
新方法:Transformer = 同时举牌打分
别排队了!所有人同时把自己的想法写下来,每个人同时看其他所有人的牌,自己打分决定最该关注谁。一次搞定,并行处理。
🧩 核心机制拆解
1. Self-Attention:每个词都在看所有词
句子:"The cat sat on the mat because it was tired"
"it" 指代什么?人读完能推断是 "cat"。Self-Attention 做的事就是——
- 每个词都会和句中所有其他词计算一个"相关度分数"
- "it" 会和 "cat" 打出高分(相关!),和 "mat" 打出低分(不太相关)
- 这样模型就"理解"了 it 指的是 cat——不需要额外标注
2. QKV 机制(Query / Key / Value)
这是 Self-Attention 的数学实现。每个词被投影到三个向量空间:
Q 和 K 的点积 = 注意力分数 → Softmax → 加权求和 V → 最终输出
数学公式:
Attention(Q, K, V) = softmax(QKᵀ / √dₖ) × V
√dₖ 是缩放因子,防止点积过大导致 Softmax 梯度消失。
3. Multi-Head Attention:多个视角同时看
不只用一组 QKV,而是用 8 或 16 组不同的 QKV,每组捕捉不同的关系:
- Head 1 可能关注"主语-谓语"关系
- Head 2 可能关注"代词-先行词"关系
- Head 3 可能关注"修饰词-被修饰词"关系
最后把所有 Head 的结果拼接起来——多个视角合在一起,理解更全面。
🏗️ 架构全景
关键组件:
- Positional Encoding:偷偷给每个词加一个"位置标签"——第 1 个、第 2 个……因为 Attention 本身看不到顺序。用正弦/余弦函数编码。
- 残差连接 + LayerNorm:每层输入直接加到输出上(跳跃连接),让深层网络也能顺利训练。
- Feed Forward Network:每个位置独立处理的两层全连接网络,增加非线性表达能力。
- 堆叠 N 层:像搭积木,堆越多越聪明。GPT-3 有 96 层 Transformer Block。
🔀 三种范式
| 范式 | 代表模型 | 适用任务 |
|---|---|---|
| Encoder-Only | BERT, RoBERTa | 文本理解、分类、QA、情感分析 |
| Decoder-Only | GPT 系列, Llama, DeepSeek | 文本生成、对话、代码补全 |
| Encoder-Decoder | T5, BART, 原始 Transformer | 翻译、摘要(输入→输出) |
💡 你每天用的 ChatGPT、DeepSeek、Claude 都是 Decoder-Only 架构——它们只做一件事:给定上文,预测下一个 Token。
❓ 常见问题
Q: Transformer 怎么知道词序?它没有"第一个、第二个"的概念啊。
👋 简单版(给所有人)
回到"全班举牌"的比喻:所有人同时举起自己的牌子,老师一眼扫过去——但老师不知道谁先举的、谁后举的。
而顺序很重要——"我打你"和"你打我"意思完全相反。
解决方案:在牌子上偷偷印暗号
每个人举的牌子上,都有一个只有他自己知道的独特暗号。老师看到暗号,就能还原出谁在前、谁在后。
暗号长什么样?用"波浪"
不用数字 1、2、3……因为到第 1000 个人暗号太大。改用波纹:第 1 个人波纹很密,第 50 个人变稀疏,第 500 个人非常稀疏。每个位置的波纹形状独一无二。
一句话:每个词举牌的时候,牌子上除了"我是什么意思",还偷偷叠加了一个代表"我是第几个"的波纹图案。Self-Attention 在计算谁跟谁相关的时候,会自动感知到这些波纹的差异。
Q: 为什么 Transformer 这么强?
→ 可以无限堆叠(像叠积木),堆越多越聪明。而且 GPU 特别喜欢它——全是矩阵乘法,一次算完,不用排队等。训练效率远超 RNN。
Q: 为什么不所有问题都用 Transformer?
→ Attention 的计算复杂度是 O(n²)——句子长度翻倍,计算量翻四倍。处理 10 万字长文时非常昂贵。这是当前研究的活跃方向(稀疏 Attention、状态空间模型等)。