Post

理解 Transformer:从一句话到下一个词的魔法

通俗理解 Transformer:从一句话到下一个词的魔法 本文整理自 3Blue1Brown《深度学习》系列第 5、6 章,以及 Jay Alammar 的经典图解《The Illustrated Transformer》。 目标不是推导公式,而是建立直觉——读完你应该能向别人讲清楚:Transf

阅读 8 点赞 0 评论 0

通俗理解 Transformer:从一句话到下一个词的魔法

本文整理自 3Blue1Brown《深度学习》系列第 5、6 章,以及 Jay Alammar 的经典图解《The Illustrated Transformer》。
目标不是推导公式,而是建立直觉——读完你应该能向别人讲清楚:Transformer 到底在干什么,以及为什么它能撑起今天所有的大模型。


一、先建立全局观:Transformer 是台"续写机器"

很多人被 Transformer 吓到,是因为一上来就看到自注意力、多头、缩放点积这些术语。其实它的核心目标极其简单:

给定一段文本,预测"下一个最可能出现的词"是什么。

它做的事就是反复「预测 → 采样 → 把新词接上 → 再预测」。所有你能感受到的"智能"——写文章、写代码、对话——都来自这个朴素的循环,加上在海量数据上的训练。

所以理解 Transformer,就是在理解:一句话是怎么一步一步变成"下一个词的概率分布"的。

下面这张图是整个数据流:

"猫 追 狗"
   │
   ▼  ① 分词 (Tokenization)
[猫][追][狗]  →  token 序列
   │
   ▼  ② 嵌入 (Embedding):每个 token → 高维向量
[cat_vec][chase_vec][dog_vec]
   │
   ▼  ③ 注意力块 (Attention):让每个向量"吸收"上下文
   │      (把"泛泛的意思"改成"结合语境的意思")
   ▼  ④ 前馈层 (Feed-forward):逐位置再过一遍
   │      (Attention 和 FFN 交替堆叠 N 层)
   ▼  ⑤ 解嵌入 (Unembedding):最后一个向量 → 全词表概率分布
   ▼  ⑥ Softmax + 采样:按概率挑下一个 token

接下来我们逐个拆开看。


二、分词:文本怎么变成数字

模型不认识"字"或"词",它只认 token——文本被切成的子词片段。

主流算法是 BPE(Byte-Pair Encoding):从单个字符开始,把训练语料里最常相邻出现的片段不断合并,形成更大的单元。

  • 例:"transformer" 可能被切成 ["trans", "former"];中文常按字或子词切。
  • 好处:词表不需要无限大,又能用子词拼出没见过的词。

这直接关系到我们前面说的 Token 概念:一次 API 调用花的钱,就是 token 数 × 单价。所以"省 token"本质上就是省成本。


三、嵌入:把词变成"有方向的意义"

每个 token 会被映射成一个高维向量(GPT-3 是 12288 维)。关键在于:向量的方向编码了语义

  • "猫"和"狗"的向量夹角很小(都是动物),和"数据库"夹角很大。
  • 衡量两个向量有多相似,用余弦相似度(cosine similarity):把两向量点积后归一化到 [-1, 1],越接近 1 越相似。

嵌入矩阵是模型最大的一块参数来源之一(GPT-3 嵌入层约 3 亿参数)。它本质上是一张巨大的"查表"——但查出来的不是死记硬背的意思,而是可以被后面注意力模块改写、校准的"初始意思"。


四、注意力机制:Transformer 的灵魂

它解决了什么问题?

一个词的含义高度依赖上下文。"bank" 是"银行"还是"河岸"?"它"指代谁?注意力让每个词能够动态地从上下文里"搬运"信息,来更新自己的向量表示。

没有注意力,模型拿到的只是孤立的词义;有了注意力,词义变成"结合语境后的词义"。

Q / K / V 的几何直觉

注意力用三个角色来完成"搬运",一个前端同学很好理解的类比:

角色类比作用
Query(查询)你在搜索框打的关键词"我在找什么信息"
Key(键)每个网页的标签 / 标题"我能提供什么信息"
Value(值)网页的正文内容"真正要被搬运的信息"

计算步骤

  1. 每个词通过可学习的矩阵生成 Q、K、V 三个向量。
  2. Q·K 的点积 衡量"这个词有多想关注那个词"(相关性分数)。
  3. 对分数做 Softmax,变成权重(加起来等于 1)。
  4. 用权重对 V加权求和,得到"融合了上下文的新向量"。
  5. 把这个新向量加回原向量 —— 得到上下文感知的表示。

🔢 一个可手算的小例子

句子:"一只毛茸茸的蓝色生物在青翠的森林里游荡。"(为演示用 2 维向量,真实是上万维)

creature = [ 1.0, 0.0]      fluffy = [0.0, 1.0]      blue = [-1.0, 0.0]
  • creature 的 Query 去和 fluffyblue 的 Key 算点积,发现它俩相关性高。
  • Softmax 得到权重,比如 fluffy 0.5、blue 0.5、其他 0。
  • 新的 creature 向量 = 原向量 + 0.5·V(fluffy) + 0.5·V(blue)。
  • 于是 creature 从一个"泛泛的生物",变成了"毛茸茸 + 蓝色"的生物。

这就是注意力在做的事:把形容词的信息"搬"到名词上。 自己手算一遍,比看十遍动画都管用。


五、缩放点积注意力

真实公式(知道长什么样即可,不必推导):

Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V
  • 那个 √d_k(维度平方根)是缩放因子:维度一高,点积的数值会非常大,Softmax 就会"两极分化"、梯度消失。除以维度平方根刚好抵消这个效应。
  • 整句注意力可以一次性用矩阵乘法并行算完——这正是 Transformer 比 RNN 快得多的根本原因。

六、掩码与位置编码

掩码(Masking):在生成时,第 i 个词不能偷看第 i+1 及之后的词,否则就"作弊"了。做法是在 Softmax 之前,把未来位置的分数设为 -∞。

位置编码(Positional Encoding):注意力本身不关心顺序——"狗追猫"和"猫追狗"在它眼里只是一堆相同向量,只是排列不同。所以必须显式注入位置信息:早期用正弦曲线,现代多用可学习的位置嵌入


七、多头注意力

Transformer 不只算一组 Q/K/V,而是并行算很多组(GPT-3 每层 96 个头)。不同的"头"会学会关注不同的关系:有的看语法、有的看指代、有的看语义。各组结果拼接后再投影,表达能力立刻丰富起来。


八、编码器-解码器架构

2017 年的原始 Transformer(《Attention Is All You Need》)分两半:

  • Encoder(编码器):读入完整输入,产出"理解后的表示",常用于翻译、分类。
  • Decoder(解码器):自回归地一个字一个字生成输出。

而我们熟悉的 GPT 系列 = 只用 Decoder(配合单向注意力 + 掩码)。理解这一点,就看懂了为什么 ChatGPT 本质上是一台"续写机器"。


九、训练三阶段:为什么模型这么"懂"

  1. 预训练(Pretraining):在海量文本上做"预测下一个词",学会语言和世界知识。
  2. 微调(SFT):用人工示范数据,教它"怎么按指令对话"。
  3. RLHF(人类反馈强化学习):用人类偏好打分训练奖励模型,再反过来优化回答的质量与安全性。

十、上下文瓶颈:O(n²)

注意力要对所有词两两算相关性,所以计算量和显存都随序列长度的平方增长。这就是为什么存在"上下文窗口"上限(8k / 32k / 128k token),也是长文档处理必须"切分 + 检索"的根本原因。


十一、回看:这和 LLM 基础概念怎么对应

概念在 Transformer 里的位置
Token分词产物,是模型处理的原子单位
上下文窗口注意力 O(n²) 限制 → 窗口不能无限长
温度 (Temperature)Softmax 前的缩放,控制输出"稳 vs 飘"
采样 (Sampling)按概率分布挑下一个 token,不是永远选最大
角色 (Role)系统 / 用户 / 助手消息 → 变成不同前缀,影响生成

学完这一篇,你应该能反过来解释那些基础概念:温度为什么影响"创造力",上下文窗口为什么是硬限制。


十二、延伸思考:为什么这和我们做应用有关

  • RAG(检索增强):正是因为上下文窗口有限且 O(n²),我们才需要"先检索再喂给模型",而不是把整本手册硬塞进去。
  • Agent 的记忆:注意力是"单次对话内的短期记忆";跨对话的长期记忆要靠外部向量库——这正是 Agent 记忆模块的设计动机。
  • 工具调用:模型输出里解析出"要调哪个工具",本质还是"预测下一个 token",只是预测目标变成了结构化指令。

十三、要点回顾

读到这里,试着不看上文回答这三个问题,能答出来就说明真懂了:

  1. 模型怎么把一句话变成"预测下一个词"?
  2. 注意力机制解决了什么问题?(提示:上下文相关的词义)
  3. 为什么靠"预测下一个词"这种简单目标,能训练出这么强的能力?

再进阶一点:Q/K/V 分别是什么?为什么要缩放(除以 √d_k)?掩码是干嘛的?GPT 和原始 Transformer 架构差在哪?


术语表

术语中文一句话
Token词元文本被切成的子词片段,模型处理的原子单位
Embedding嵌入把 token 映射成高维向量,方向编码语义
Attention注意力让每个词从上下文搬运信息更新自身表示
Query / Key / Value查询 / 键 / 值注意力的三个角色,类比"搜索词 / 标签 / 正文"
Softmax归一化指数把分数变成概率分布(和为 1)
Masking掩码屏蔽未来词,防止生成时"偷看"
Positional Encoding位置编码给词注入顺序信息(注意力本身无序)
Multi-Head多头并行多组注意力,捕捉不同关系
Encoder / Decoder编码器 / 解码器原始 Transformer 两半;GPT 只用解码器
Pretraining / SFT / RLHF预训练 / 微调 / 人类反馈训练三阶段
BPE字节对编码主流分词算法

参考资源

  • 3Blue1Brown《深度学习》第 5 章 · Transformer 概览(YouTube):https://www.youtube.com/watch?v=wjZofJX0v4M
  • 3Blue1Brown《深度学习》第 6 章 · 注意力机制(YouTube):https://www.youtube.com/watch?v=eMlx5fFNoYc
  • 第 5 章 B 站中配(中文配音):https://www.bilibili.com/video/BV182sYz4EZf
  • Jay Alammar《The Illustrated Transformer》(图解原版):https://jalammar.github.io/illustrated-transformer/

继续阅读

全部归档

评论