← 3Blue1Brown 合集
3Blue1Brown · 深度学习系列 · 进阶篇
Transformer,看得见的解释
GPT 里的「T」。一个 2017 年提出、如今支撑起几乎所有大模型的架构。这一页用可交互的动画,把它从「一团黑箱」拆成你能亲手拨弄的零件。
改编自 Grant Sanderson(3Blue1Brown)深度学习系列第 5、6 章 · 中文整理 · 所有插图均为实时动画,可点击、可拖动
▶ 观看原视频
30 秒速览
Transformer 是 GPT、Claude、Gemini 等模型的共同骨架,2017 年由论文《Attention Is All You Need》提出。
它先把每个词变成一串数字(词嵌入 ),这串数字是空间里的一个方向 ,相近含义指向相近方向。
核心是注意力机制 :让每个词「看一眼」句子里其他词,按相关程度把信息搬过来,从而把死板的词义改写成带上下文的含义 。
注意力和前馈网络交替堆叠几十层 ,含义被一轮轮打磨,最后一个位置的向量被用来预测下一个词。
它最大的优势是并行 :整句话所有词同时处理,而不像旧架构那样一个一个读——这正是大模型能被高效训练的关键。
01 整体流水线:一句话怎么变成下一个词
先看全景。Transformer 不是魔法,它是一条流水线 :文字进去,每一站都对它做一点确定的数学运算,最后吐出「下一个词」的概率。
下面这张图把整条流水线画了出来。别急着看懂每一站——先点 下一步 ,让数据一站一站地往前流,每一步右下角会告诉你这一站在干什么。后面每个零件我们都会单独拆开。
引导式 · 可逐步播放
点「下一步」开始,看一句话如何穿过整个 Transformer。
图 1 · 端到端流水线:词 → 嵌入 → (注意力 + 前馈) ×N 层 → 预测下一个词
02 词嵌入:含义是空间里的「方向」
流水线第一站:每个词被换成一长串数字,几百到上万个。把这串数字想成高维空间里的一个箭头 ——一个方向。
神奇之处在于:训练之后,含义相近的词,方向也相近 。「猫」和「狗」挨得近,「国王」减去「男人」再加上「女人」,竟然会落在「女王」附近。模型并不知道字典,它只是把意义编码成了几何。
下面是把高维压到二维的示意。把鼠标移到任意词上(手机上点一下),看它和谁是「邻居」——连线越亮,方向越接近。
可悬停 / 可点击
把指针放到某个词上,看看它在意义空间里的近邻是谁。
图 2 · 词嵌入:每个词是一个方向,方向相近 ≈ 含义相近(二维投影示意)
一句话记住: 嵌入把「词」变成「向量」,把「意义」变成「几何距离」。后面所有运算,操作的都是这些箭头,而不是文字本身。
03 位置编码:让模型知道谁先谁后
这里有个麻烦:Transformer 为了能并行 ,是一次性看到所有词的,它本身分不清「狗咬人」和「人咬狗」——因为词的集合一模一样。
解法很巧:给每一个位置 事先准备好一串固定的数字(一个向量),叫做位置编码 。第 1 个位置一串、第 2 个位置另一串……这串数字只由「第几个」决定,和是什么词无关 。把它加到词向量上,「人」在第 1 位和在第 3 位,得到的向量就不一样了,模型于是「感觉」得到顺序。
下图每一列从上到下是:词 + 该位置的编码 = 模型真正看到的向量 。中间那排小柱子就是位置编码——每根柱子是向量里的一个数(正值朝上、青色;负值朝下、粉色)。点 打乱顺序 :词会换位,但每个槽位 的编码柱子纹丝不动,所以词一旦换了位置,加出来的结果就变了。这就是模型区分语序的全部秘密。
可点击 · 打乱
打乱顺序 ⇄
还原
中间那排彩色柱子就是位置编码——它锁定在「槽位」上,只看第几个,不看是什么词。
图 3 · 词向量 + 该槽位的位置编码 = 带顺序信息的向量。柱子高度=向量里的数;打乱时编码锁死在槽位上,词换位结果就变
04 注意力机制:每个词在「看」谁?
这是 Transformer 的心脏。一个词的含义往往依赖别的词:「它」指谁?「苹果」是水果还是公司?注意力机制让每个词主动去看一眼 其他词,按相关度把信息搬过来。
下面这句话里,点任意一个词 ,从它射出的连线就是它的「注意力」——线越粗、越亮,说明它越关注那个词。注意「它」会强烈地指向它真正指代的对象。
点击任意词试试
点上面句子里的任意一个词,看它把注意力分给了谁。试试点「它」。
图 4 · 自注意力:每个词向所有词分配权重,把相关的信息加权汇聚回自己身上
关键直觉: 注意力让「苹果」这个词,在「我吃了一个苹果」里偏向水果,在「苹果发布新手机」里偏向公司——同一个词,被上下文改写成了不同的含义 。
05 QKV:注意力到底在算什么
上一张图的连线是怎么算出来的?靠三个角色:查询 Query 、键 Key 、值 Value 。一个老掉牙但极好用的比喻——查资料。
🔎 Query 查询:我(这个词)想找什么?
🏷️ Key 键:每个词「我能提供什么」的标签
📦 Value 值:真正被搬运的信息内容
每个词都生成自己的 Q、K、V(由三个权重矩阵乘出来)。某个词的 Query 去和所有词的 Key 做点积——点积越大越「匹配」,匹配度经 softmax 变成权重,再用这些权重去加权所有词的 Value 。下面把这个过程逐步拆开播放。
引导式 · 逐步
以「它」为例,看它如何用 Query 去匹配每个词的 Key,再取回 Value。
图 5 · 注意力 = softmax(Q·Kᵀ / √d) · V。匹配 → 归一化 → 加权取值
06 多头注意力:几十双眼睛,各看一处
一种关注还不够。一句话里,语法关系、指代关系、修饰关系……要同时捕捉。于是 Transformer 并排放很多个 注意力,每个叫一个头(head) ,各自学会关注一种模式。
下面切换不同的「头」:同样一句话,不同的头连出的关注完全不同——有的盯着主谓,有的盯着形容词修饰谁。它们的结果最后被拼接、融合。
可切换 · 多个头
点不同的「头」,看每个头各自关注的是哪种关系。
图 6 · 多头注意力:并行的多组 Q/K/V,每个头捕捉一种不同的关系
07 堆叠与残差:为什么要叠几十层
一层注意力 + 一层前馈网络,组成一个「块」。Transformer 把这种块叠几十次 。含义就像被一轮轮抛光:第一层也许只搞清楚语法,越往上越能整合出抽象、全局的意义。
关键在于每个块不是「重写」向量,而是在原向量上「加一笔修改」 :
输出 = 输入 + 这一层算出的改动量
那条「+输入」就是残差连接 (图中绕过块的旁路)。它带来三件事:① 某层没学到东西时,改动量≈0,信息原样穿过去,加层「最坏也无害」;② 反向传播时梯度有一条不打折的高速路 直达底层,避免深层「梯度消失」——这才是几十上百层能训得动的根本;③ 形成一条贯穿全网的「残差流 」,像一条传送带,每层只往上面添信息。
点 加一层 看向量被逐层精炼;再点 关闭残差 对比——没有旁路时,每层都强行重写,信号会一层层糊掉 、衰减,这就是深层网络「学不动」的样子。
可点击 · 残差开关
加一层 +
重置
关闭残差
当前:0 层 · 残差:开
每加一层,向量都被「注意力 + 前馈」精炼一次,残差旁路保证信息不丢。试试关掉残差看对比。
图 7 · 残差开:信号稳定地层层精炼;残差关:信号逐层衰减/糊掉,深层学不动
全部串起来: 词 → 嵌入 成向量 → 叠上位置编码 → 经过几十个 (多头注意力 + 前馈 + 残差) 块层层精炼 → 取最后一个位置的向量 → 映射成全词表的概率 → 采样出下一个词。把这一步重复成千上万次,就是你在用的聊天机器人。
08 长上下文的代价:注意力为什么是「平方级」
一个常被问到的问题:上下文很长时,QKV 要把每个词都算一遍吗?要——而且这正是长上下文又慢又贵的根本原因。
生成 Q/K/V 本身很便宜:每个词各自乘三个矩阵,n 个词就是 n 次,线性 增长。真正的开销在「两两匹配」 :每个词的 Query 要和所有 词的 Key 做点积(图 4 里那一束连线)。n 个词就是 n × n 个点积——这就是著名的 O(n²) 平方瓶颈。拖下面的滑块感受一下它涨得有多快:
拖滑块 · 实时
上下文长度
全注意力
KV 缓存(生成时)
拖滑块加词:看「两两配对」的连线数按平方暴涨。再切到 KV 缓存模式看生成时怎么省。
图 8 · 全注意力:每个词连向所有词,配对数 = n²;KV 缓存:生成新词时只需它对全部历史,单步线性
两个缓和点: ① KV 缓存 ——逐词生成时,历史词的 K、V 算过一次就存起来复用 ,每生成一个新词只算这一个词的 Q 去比对全部历史,单步是线性的 ,代价转移到「显存要存住全部历史 K/V」。② 工程上有 FlashAttention、滑动窗口、稀疏注意力等办法绕开 n²。但原版 Transformer 就是老老实实每个词看每个词 ——这就是「超长上下文」最烧钱的地方。
再用三句话收个尾
注意力 负责「词与词之间交换上下文」,前馈网络 负责「在每个词内部做更深的加工」,两者交替。
Transformer 真正的护城河是并行 + 可堆叠 :整句同时算、层数随便加,所以能吃下海量数据、越做越大。
从 GPT 到 Claude 到几乎所有现代大模型,骨架都是它。理解了这一页,你就理解了这一代 AI 的地基。