跳到主要内容

01 · 五种零件:Transformer 拆开长什么样

1. 这一章讲什么

「大模型」这个词天天见,但它到底由什么组成,多数人说不上来。原书用整个第 1 章回答:所谓大模型,是基于深度学习(让机器自己从海量例子里摸规律的一类方法)的超大规模数字机器。

这台机器的学名叫神经网络(由大量互相连接的计算点组成、靠调内部数值学会本领的结构),核心架构几乎都叫 Transformer。它由五个可拆卸的零件组成:读入再吐出的骨架、词变数的入口、让词互相看的相关性机制、给深网络保命的直通道与调音器、补顺序的编号1

这一章先看这五种零件各自解决什么问题,再拿一个三个词的句子,把最要紧的零件「自注意力」从数字一路算到尾。读完你会拿到一张零件清单,后面所有章节都是在给这台机器加燃料(02-04 章)、教新本事(05 章)、换更好的喂法(06 章)和拧更快的转速(07-12 章)。

2. 顶层全景:一台机器,五个零件

先看这台机器怎么转。进入机器的每个词都带着一串按顺序排好的数,行话叫向量。

「猫 追 它」这三个词


[分词器] 把句子切成小块,每块领一个编号 ← 零件A


[嵌入层] 每个编号换成一串数(向量) ← 零件B


[自注意力×N层] 每个词去看别的词,按关系取信息 ← 零件C(发动机)
│ 每层内部还有:
│ 残差连接——给信息留一条直通道 ← 零件D
│ 层归一化——每层入口先「调音」 ← 零件D

[位置编码] 一开始就掺进「我是第几个词」的信息 ← 零件E


输出:每个位置的新表示(交给下一层或输出层)

图说:数据自上而下流过五个零件。

其中位置编码(补顺序的部件)在入口就与词的坐标串相加。

注意力(挑重点的机制)逐层重复。

词向量(词的那串坐标数)是入口产物。

残差(直通道)是每层的保险丝之一。

归一化(调音)是另一道。

3. 核心原理:逐个零件由浅入深

3.1 零件A+B:先把文字变成数字

神经网络从头到尾只会算数,所以第一步必须把「猫」变成一串数——一串按顺序排好的数,行话就叫向量。分词器先把句子切成小块(词或子词——比词更小的块,「un+believable」拆成两截那种),每块在词汇表里领一个编号;嵌入层再把编号换成一串数——比如 8 个数——这串数就是这个词的「意思坐标」:意思相近的词,坐标也挨得近2

书里用一个具体流程演示:输入「the quick brown fox」,分词器清洗、切分、查词表(全部编号的清单),吐出编号串;嵌入层(nn.Embedding)把每个编号变成 8 个数一串,输出形状是「4 个词 × 8 个数」的数表3。这一步做完,语言问题就变成了几何问题:词有了坐标,「关系」才有了「距离」可算。

判断(我们的,不是书里的): 原书 1.2 节列举的「Casual Tokenizer(因果分词器)」与 Casual 3D CNN(卷积网络)分词器、「旋转嵌入层」的说法,与业内通行术语对不上——通行分词法是 6.3 节会讲的 BPE,通行嵌入就是普通的查表嵌入。读原书这一节时按「把文本切成小块、把小块变成向量」理解机制即可,别把那两个名词当标准术语带出门。 如果错,会错在: 如果这其实是出版社对某类新式分词器的另一种译名,那我们这条判断就冤枉了作者——但书里没给任何英文出处或定义,无从核实。

3.2 零件C:自注意力——发动机怎么转

自注意力解决的问题是:一个词的意思要看上下文(前后左右的词)才能定(「它」指猫还是指马路?),模型需要一个机制让每个词主动去「看」别的词。做法分四步:

  1. 每个词的向量分别乘三组可学习的系数,得到三种身份:查询 Q(我在找什么)、键 K(我有什么可被找到)、值 V(我实际携带的信息)4;

  2. 某个词的 Q 跟所有词的 K 做点积(对应位置相乘再求和,数越大越相关);

  3. 点积除以一个缩放因子再归一化成总和为 1 的权重——不除的话,向量一长点积就会大到把后续计算挤变形4;

  4. 按权重(各占多少份)把所有词的 V 加权混合,得到这个词的新表示。

主走查:拿「猫 追 它」走一遍注意力(嵌入是 4 维,所有数字为演示编的,不是真实数值):

词向量(编的):
猫 = [1.0, 0.0, 0.5, 0.0]
追 = [0.0, 1.0, 0.5, 0.2]
它 = [0.3, 0.1, 0.8, 0.0]

处理「它」这个位置:
① 它的 Q 与三个 K 分别做点积 → 相关分: 对「猫」2.0,对「追」0.4,对自己 1.0
② 除以缩放因子 √4 = 2 → 1.0, 0.2, 0.5
③ 归一化成权重(合计 1) → 猫 0.50,追 0.15,它自己 0.35
④ 按 0.50/0.15/0.35 把三份 V 加权混合
→ 「它」的新表示里,猫的信息占了一半 → 下一步预测才有依据说「它」指猫

走查说明:这一步 ④ 里「猫占一半」就是注意力这个词的字面意思——不是均匀地看,是按相关性分配看的份额。书里 1.3 节的代码做完这四步后,输出形状仍是「词数 × 维度」——多少个词、每个词用多少个数——与输入一致,所以注意力层可以一层层叠上去5

3.3 零件C+:多头——一次看不完,就多看几遍

一个问题只算一次注意力,等于只从一个角度找关系。多头注意力(把 Q、K、V 切成若干份「头」,每份在子空间里独立做一遍上面四步,最后把各头结果拼起来再做一次变换)解决了这件事6。直觉是:一个头可能专门盯「谁是主语」,另一个头盯「修饰关系」——多个角度的关系同时抓,比单角度一次抓更全。

3.4 零件D:残差与归一化——让网络深得起来

层数一多,两个毛病会冒头:信号一层层传会衰减(梯度消失,「调整指令」传回浅层时已近乎零),每层的数值范围还会漂。残差连接的解法朴素:把这一层的输入原封不动加到输出上,等于给信息修了一条不经过处理的直通道,学不到东西的层最多「加个零」,不会帮倒忙7。调音靠两个数:均值(平均水平)与方差(波动幅度)。

层归一化(每层入口先把数值按这两个数调回稳定范围,再用两个可学习的旋钮微调)则让每层看到的数都长一个样;

因为它按每个样本自己的数据调,不依赖同一批里其他样本,所以比 BatchNorm(按一整批数据统计的那种)更适合先后顺序敏感的任务和一次喂几条的小份训练8

这两个零件没有直接产出「理解」,它们决定的是训练这件事成不成立——原书 1.4 节的实验里,加了残差的网络各层梯度都能顺畅回传,这正是深层堆叠的前提。

3.5 零件E:位置编码——给无序的注意力补上顺序

自注意力有个天生的盲区:它把输入当成一袋词,「猫追它」和「它追猫」在它眼里权重计算方式完全一样——因为注意力对顺序没有任何先验认知9。位置编码的解法是在入口给每个位置生成一个独特数串(用正弦、余弦——两种波浪形函数——按不同频率生成),直接加到词向量上。

这样词向量既带着语义(词本身的意思),又带着「我是第几个」10

原书 1.5 节做了个对照实验:把输入词序随机打乱,带位置编码的模型输出明显不同于原始顺序的输出——说明位置信息确实被模型用上了11

4. 作者的判断与证据

  • 先交代原书的讲解体例:每段代码后面都跟着「代码解析」——解析,即把代码拆成(1)(2)(3)逐条讲——本拆解的出处多引自这些段落。

  • 书里给了证据的: 缩放因子防数值放大(1.3 节代码+思考题追问)、残差让梯度顺畅回传(1.4 节梯度检查)、位置编码在打乱词序后输出不同(1.5 节对照实验)、层归一化对不同分布(数值范围)的输入保持输出稳定(1.4 节模拟)。

  • 是作者推测/教学比喻的: 层层堆叠像「多位专家轮流解读一本书」——这是 3.1 节讲 BERT 时的比喻,不是测量结论;1.2 节那些「因果分词器」「旋转嵌入层」的说法属于作者表述失准(见上文判断块)。

  • 引言里的史实: 2017 年 Google 论文提出 Transformer,自注意力取代循环结构,三条突破是并行计算、长距离依赖、模块化堆叠12。这段是转述学界共识,可靠。

5. 边界与局限

  • 这一章讲的全是零件,不是能跑的大模型:原书的演示都是几百行以内的小代码,训练数据是随机生成的,产出数字(比如损失(算错的程度)从 2.30 降到 2.27)只证明「流程能跑」,不证明「机器能干活」。

  • 原书引言有一处硬伤:「GPT-4 通过 1750 亿参数」——1750 亿是 GPT-3 的公开数字,GPT-4 的真实规模至今没有官方数字13。 读引言的发展史部分时,具体数字要对一下再信。

  • 原书 1.1 节讲 Seq2Seq 用的还是 LSTM 时代的「编码器(读入那半边)压成一个固定向量」框架,那是 Transformer 之前的老架构;今天说的 Seq2Seq 几乎都是注意力版。书里把它当历史起点讲是对的,但别以为「固定长度向量」还是现状。

  • 补充(不在书里,来自通用知识):2017 年那篇论文的标题就是「Attention Is All You Need」,「注意力就够了」——意思是循环结构可以整个扔掉,这一章的五个零件就是「够」的全部内容。

6. 可带走的

  1. 大模型 = Transformer 架构 + 海量参数,拆开只有五种零件;后面每章都在给其中某个零件或它的训练加料。
  2. 分词与嵌入是把语言问题变成几何问题的那一步;词有了坐标,「意思」才有「距离」。
  3. 自注意力四步:Q 找、K 迎、打分除以缩放、按权重取 V;每个词的新表示是别人信息的加权混合。
  4. 多头=多个角度同时找关系;输出形状与输入一致,所以能层层堆叠。
  5. 残差是信息直通道,层归一化是每层入口的调音台;没有它们,深网络根本训不动。
  6. 自注意力天生不识顺序,位置编码在入口补上「第几个」。
  7. 看到任何「XX 大模型」的新闻,先问:它几层、几个头、嵌入多少维——这三个数定了骨架大小。
  8. 原书引言的数字要核对着读(比如 GPT-4 有多少参数那条是错的)。

7. 原文地图

主题原书章原文位置
大模型定义与发展史引言text/03-fm.txt:16(搜「超大规模神经网络」) · text/03-fm.txt:52(搜「Attention Is All You Need」)
Seq2Seq 编码器-解码器、教师强制1.1text/05-ch01-01-1-1.txt:24(搜「固定长度的上下文向量」) · text/05-ch01-01-1-1.txt:112(搜「真实的目标序列」)
分词与嵌入1.2text/06-ch01-02-1-2.txt:24(搜「拆分成独立词语」) · text/06-ch01-02-1-2.txt:96(搜「8维向量」)
自注意力四步、缩放因子1.3text/07-ch01-03-1-3.txt:60(搜「缩放因子」) · text/07-ch01-03-1-3.txt:60(搜「点积」)
多头子空间1.3text/07-ch01-03-1-3.txt:90(搜「子空间」)
残差连接、层归一化1.4text/08-ch01-04-1-4.txt:33(搜「捷径」) · text/08-ch01-04-1-4.txt:115(搜「序列建模任务和小批量」)
位置编码与打乱实验1.5text/09-ch01-05-1-5.txt:33(搜「先验认知」) · text/09-ch01-05-1-5.txt:36(搜「正弦和余弦函数」)
GPT-4 参数量(书里的硬伤)引言text/03-fm.txt:91(搜「1750亿参数」)

Footnotes

  1. 出处:「引言」第 16 段(text/03-fm.txt:16,搜「超大规模神经网络」)。原书对大模型的定义与「核心架构通常基于 Transformer」的说法都在这一段。

  2. 出处:「1.2 分词与嵌入层」第 24 段(text/06-ch01-02-1-2.txt:24,搜「拆分成独立词语」)。原书:「分词器通过将句子拆分成独立词语或标记……嵌入层将这些标记转换为稠密向量」。

  3. 出处:「1.2 分词与嵌入层」第 96 段(text/06-ch01-02-1-2.txt:96,搜「8维向量」)。

  4. 出处:「1.3 自注意力与多头注意力机制」第 33 与 60 段(text/07-ch01-03-1-3.txt:60,搜「缩放因子」;text/07-ch01-03-1-3.txt:60,搜「点积」)。Q/K/V 三矩阵的生成与「点积除以缩放因子再归一化」都在这两段。 2

  5. 出处:「1.3 自注意力与多头注意力机制」第 78 段(text/07-ch01-03-1-3.txt:78,搜「与输入形状一致」)。

  6. 出处:「1.3 自注意力与多头注意力机制」第 90 段(text/07-ch01-03-1-3.txt:90,搜「子空间」)。

  7. 出处:「1.4 残差连接与层归一化」第 33 段(text/08-ch01-04-1-4.txt:33,搜「捷径」)。

  8. 出处:「1.4 残差连接与层归一化」第 115 段(text/08-ch01-04-1-4.txt:115,搜「序列建模任务和小批量」)。

  9. 出处:「1.5 位置编码器」第 33 段(text/09-ch01-05-1-5.txt:33,搜「先验认知」)。

  10. 出处:「1.5 位置编码器」第 36 段(text/09-ch01-05-1-5.txt:36,搜「正弦和余弦函数」)。

  11. 出处:「1.5 位置编码器」第 135 段(text/09-ch01-05-1-5.txt:135,搜「无序输入的输出差异」)。

  12. 出处:「引言」第 52 与 55 段(text/03-fm.txt:52,搜「Attention Is All You Need」;text/03-fm.txt:55,搜「高效并行化」)。

  13. 出处:「引言」第 91 段(text/03-fm.txt:91,搜「1750亿参数」)。原书写「GPT-4通过1750亿参数实现更精准的语言生成」;1750 亿是 GPT-3(2020)的公开数字,GPT-4 的参数量未公开(补充:不在书里,来自通用知识)。