跳到主要内容

ChatGPT 的内部 — Transformer、训练与人类反馈

这一章讲三件事: 数据从进到出经过了哪几道工序、注意力到底在做什么、 以及「训练」其实是两件不同的事。 前三章讲的都是通用原理,这是唯一一章讲 ChatGPT 本身的构造

1. 先看现象:它为什么写长文会慢

这一节回答:为什么让它写一篇长文,要等那么久。

你可能以为是网速慢,或者在排队等着。都不是。

真实原因是:它每吐出一个字,整个网络就要从头到尾算一遍。

数字
最长路径上的核心层约 400 层
神经元数百万
权重(连线)1750 亿
每生成一个标记要做的计算把这 1750 亿个权重全用一遍1

所以慢不是工程没做好,是机制本身决定的。 一段五百字的回答,就是这台机器完整跑了几百遍。

补充(不在书里): 「1750 亿」这个数出自 GPT-3 的论文 《Language Models are Few-Shot Learners》(2020-05-28 提交), 书里直接引用了这个数字但没给出处。 来源:https://arxiv.org/abs/2005.14165(查阅于 2026-08-25)。 注意这是 2020 年那一代的规模,不是今天的。

作者还特别指出:400 层这个数「在某种程度上看来并不是很多」。 拿第 02 章那个认手写数字的网络对照一下:那个的核心层只有 4 层, 400 层是它的一百倍——听起来一百倍很多,可它认的东西比手写数字难得远不止一百倍。

真正撑起规模的不是层数,是每一层有多宽: 这里每个位置上带着 12 288 个数,而那个认手写数字的网络,整个网络一共才 2190 个神经元。 它随便一层的宽度,就已经是那整个网络的五倍多。

2. 顶层全景:三道工序

先给全景,后面逐道拆。这一章从头到尾只用一个输入走完—— 第 03 章用过的那个:the cat

输入:the cat ——两个标记,编号 914 和 3542

① 变成嵌入 每个标记 → 一串数(GPT-3 是 12 288 个)
│ 同时把「它排在第几位」也编成一串数,两者相加

② 穿过 96 道处理块 每一道都重新调整这些数
│ 每块内部有 96 个「注意力头」,各看这串数的不同部分

③ 变回可能性 取最后那个标记的一串数 → 变成约五万个数
│ = 每个候选标记的可能性,排第一的是 `sat`

输出:`sat`。接到文字末尾变成 `the cat sat`,整条流水线从头再跑一遍。

图说:三道工序是原书的划分。②里的「96」是 GPT-3 的数字,GPT-2 是 12。

这三道工序是原文的划分2

走查里的数从哪来: 914、3542、12 288、96、约五万,这几个是书里的; 下面每一串数、每一个分数,都是为演示编的,不是真实数值。 真实的一串有 12 288 个数,这里一律砍到 4 个,只是为了能写在纸上看清楚。

先记住一个总体事实:除了整体架构,没有任何细节是「设计」出来的—— 流水线的每一段都是一个神经网络,权重全靠训练确定3

3. Transformer 的关键:不全连

这一节回答:这套结构比第 02 章讲的普通网络强在哪。

先看问题

第 02 章讲的网络,每一层的每个神经元都和上一层所有神经元相连。 处理有结构的数据时,这样「全连」是浪费的。

图像那边早就解决过: 把神经元按像素那样排成格子,只连相邻的 —— 因为图像的结构就是「相邻像素相关」。这种做法叫卷积4

可文字的结构不一样:相关的词可能隔得很远。

「小明昨天在图书馆借的那本关于深海生物的书,很好看。」 —— 「很好看」说的是哪个词?是「书」,隔了十几个字。

解法:注意力

Transformer 不划死一块固定区域,而是引入注意力:

让网络自己决定:此刻该多看前文里的哪几个部分,少看哪几个。

作者顺带给了一个判断:也许将来能训一个完全通用的网络自己学出这些安排, 但至少目前,把结构「模块化」似乎至关重要 —— Transformer 这么做,大脑可能也这么做5

判断(我们的,不是书里的): 「不全连」这三个字比「注意力」更接近本质。 卷积和注意力是同一件事的两种做法 —— 都是在为一类数据的结构注入提示, 差别只在于卷积把「哪些位置相关」写死,注意力让网络自己算。 如果错,会错在: 如果后来出现完全不注入结构提示、纯全连也同样有效的架构, 那这个提示就不是必需的,只是在当下这点计算能力下的捷径。

补充(不在书里): 「Transformer」这个结构出自 2017 年的论文 《Attention Is All You Need》(Vaswani 等,2017 年 6 月 12 日提交)。 这本书只讲它是什么样、怎么用,没有讲它的来历。 来源:arXiv https://arxiv.org/abs/1706.03762(查阅于 2026-08-25)。

4. 逐道拆:数据经过的每一步

第一道:变成嵌入

输入是 n 个标记的编号(1 到约五万)。每个标记先变成一串数: GPT-2 是 768 个,GPT-3 是 12 288 个6

走查第 ① 步(演示用 4 个数代替 12 288 个):

the 编号 914 → [ 0.1, −0.3, 0.2, 0.0]
cat 编号 3542 → [ 0.8, 0.1, −0.4, 0.3]

同时还有一条支线:把标记的位置(第 1 个、第 2 个……)也编成一串数, 最后两者直接相加

走查第 ② 步:

the 在第 1 位 [ 0.1, −0.3, 0.2, 0.0] + [0.0, 0.1, 0.0, −0.1] = [0.1, −0.2, 0.2, −0.1]
cat 在第 2 位 [ 0.8, 0.1, −0.4, 0.3] + [0.0, −0.1, 0.1, 0.0] = [0.8, 0.0, −0.3, 0.3]

图说:加完之后,the 那串数里既有「这个词是 the」,也有「它排在第 1 位」。
两件事挤在同一串数里,谁也没给它们分开的位置。

为什么是相加?作者的回答很直白:

我不认为有什么特别的科学依据。只是因为尝试了各种不同的方法,而这种方法似乎行得通。7

他接着补了一句能概括整个领域的话:神经网络的学问告诉我们, 只要设置「大致正确」,通常就能靠足够的训练把细节定下来, 而不需要真正「在工程层面上理解」网络是怎么配置自己的。

至于位置那串数本身长什么样,书里的观察是:它「看起来有些随机的结构」, 只是碰巧学到8

第二道:96 个处理块

GPT-2GPT-3(ChatGPT 那一代)
处理块数1296
每块的注意力头数1296
嵌入长度76812 288

注意力头在做什么? 它是一种在已经写出的标记里**「回头看」**的方式, 把过去的内容打包成一种有用的形式,用来决定下一个标记9

书里把它和第 01 章的数数法直接对上了:

两个词一组地数:只能根据「上一个词」选下一个词
注意力 :可以关注很早以前的词
——比如让一个动词连回出现在很多词之前的那个名词

图说:这就是第 01 章那条死路的真正出口。

「回头看」具体是怎么看的? 书里给的原话是「按一定的分量,重新组合各个标记对应的那几串数」。 这句话里压着三级台阶,一级一级拆开看。

第一级:先打分。 处理到某一个标记时,先拿它那串数, 去跟前面每一个标记那串数比一比,比出一个分数——分数高就是「这个标记跟我关系大」。

第二级:把分数归成分量。 把这些分数按比例缩一缩,让它们加起来正好等于 1。 于是每个标记分到一个 0 到 1 之间的数,这就是「该分给谁多少」。

第三级:照分量掺。 按这个分量,把前面各个标记那串数掺进自己这串里, 得到一串新的数——这串新的数里,就带上了前文的成分。

走查第 ③ 步: 一个注意力头处理到 cat 的时候,给 the 打了 0.2、给自己打了 0.8 (这两个分数是编的;0.2 + 0.8 = 1,这是第二级要求的):

0.2 × [0.1, −0.2, 0.2, −0.1] ← the(已经加过位置的那串)
+ 0.8 × [0.8, 0.0, −0.3, 0.3] ← cat 自己
─────────────────────────────────
= [0.66, −0.04, −0.20, 0.22] ← cat 走完这个头之后的新一串数

图说:「按一定的分量」落地之后,就是 0.2 和 0.8 这两个数。
cat 这串数里现在掺进了两成的 the。

那个分数到底是怎么打出来的?书里没有交代,只说了「按一定的分量」。 照实写:这一步的打分规则,这本书里没有。

这里有一处作者的坦白,值得原样记住——他说的「嵌入向量」指的是上面那串数10:

每个注意力头「独立地在嵌入向量的不同值块上进行操作。 我们不知道为什么最好将嵌入向量分成不同的部分,也不知道不同的部分『意味』着什么。 这只是那些『被发现奏效』的事情之一。

每块里还夹着一层普通的网络

经过注意力之后,这些数还要再穿过一层全连接:每个神经元都跟上一层所有神经元连着, 就是第 3 节说的那种最朴素的排布。这一层在做什么,很难说清。

走查第 ④ 步: cat 那串 [0.66, −0.04, −0.20, 0.22] 穿过这一层, 出来还是 4 个数,只是全变了样;然后进下一块,再来一遍注意力、再来一遍全连接。 这样重复 96 遍。

作者只能把这一层的权重画成图给你看:原图看不出结构; 把相邻数值取平均、把毛刺抹平之后(这个手法叫滑动平均), 一些随机游走似的纹路才开始显现11

是什么决定了这种纹路?作者的回答:

说到底,可能是对人类语言特征的一些「神经网络编码」。 但是到目前为止,这些特征到底是什么仍是未知的。 实际上,我们正在「打开 ChatGPT 的大脑」,并发现里面很复杂、难以理解。

第三道:变回可能性

穿过全部 96 块之后,取最后一个标记那串数,把它变成约五万个数 —— 这就回到了第 01 章那张可能性清单12

走查第 ⑤ 步,也是最后一步(这些可能性是编的):

cat 穿完 96 块之后的那串数
│ 摊成约五万个数,每个候选标记一个

sat 0.31
is 0.12
ran 0.07
…剩下四万九千多个候选,加起来分掉剩下的 0.50

图说:挑中 sat,接到文末变成 `the cat sat`,整条流水线从头再跑一遍——
这一遍要处理的就变成三个标记了。

5. 一个结构性事实:它没有循环

这一节是理解「它为什么某些事做不到」的关键,也是第 05 章的伏笔。 下面书里说的「计算单元」指的是第 02 章那个神经元。

ChatGPT 内部没有循环、没有「回头重算」。一切都是一路向前的。 至少在生成某一个标记时,每个计算单元只被用一次。13

这和普通计算机程序完全不同 —— 程序里可以写「一直算到条件满足为止」,它不行。

但有一个例外,而且很重要:

网络内部 :一路向前,没有循环
最外层 :有一个循环 —— 它每写出一个新标记,
都会把「包括自己刚写的那些字在内」的整段文字重新读一遍

图说:这是它唯一的「记忆」。写出来的字就是它的草稿纸。

作者说,可以认为 ChatGPT 至少在最外层包含一个反馈循环, 只不过这个循环的每一次转动,都明确显示为它写出的文字里的一个标记14

判断(我们的,不是书里的): 这一段是「让它一步一步想」为什么有效的原理级解释 —— 模型内部没有循环,唯一能存放中间状态的地方就是它已经写出来的文字。 把推理过程写出来,等于把外层循环当草稿纸用。 如果错,会错在: 这只说明了「写出来」提供了存放状态的位置, 不能证明写出来的中间步骤在语义上真的被当作推理依据使用。

补充(不在书里):这条判断有现成的实证。 2022 年的《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 (Wei 等,2022-01-28 提交)证明:让模型先写出一串中间推理步骤, 复杂推理的表现会显著变好 —— 只靠提示,不用改模型。 来源:https://arxiv.org/abs/2201.11903(查阅于 2026-08-25)。

这篇比本书早一年,书里没有提。它正好落在作者这一节的空白上: 作者描述了那个外层循环,但没意识到这个循环可以被当成额外的计算来用

6. 训练之一:海量文字的预训练

这一节回答:那 1750 亿个数是怎么定下来的。

过程和第 02 章说的一模一样:喂例子、算误差、反向传播、更新权重15。 区别只在于量。

语料有多大? 书里给了一组让人有实感的数字16:

来源规模
公共互联网上的文字网页数十亿页,总词数可能达到万亿级别
非公开的网页可能再多 100 倍
能拿到的电子书超过 500 万本(全球出版过的图书品种约 1 亿),约 1000 亿词
实际用于训练的量几百亿个词

作者在这一段还顺手算了自己一辈子的产出:发表的文字不到 300 万词、 三十年邮件约 1500 万词 —— 用来给「万亿」这个量级一个人的尺度。

一个耐人寻味的比例

作者点出一件值得琢磨的事:权重数(近 2000 亿)和训练用的词数,量级差不多。

这为什么值得注意?因为 ChatGPT 内部并没有存下那些文字 —— 它内部只是「一堆数,每个数只记到不足 10 位」,是所有文字总体结构的一种分布式编码 (意思是:任何一条信息都不待在某个具体位置上,而是摊在无数个权重里)17

由此得出一个反直觉的观察:

在这种表示里,训练数据的「压缩」程度似乎很低 —— 平均下来,似乎一个权重还装不下一个词的信息量。

为什么训练要花数十亿美元

书里给了一个简洁的推算18:

生成一个标记 → 每个权重用一次 → 约 n 步计算
但要定下这 n 个权重,需要约 n 个词的训练数据
→ 训练总量 ≈ n × n 步计算

图说:成本不是随规模线性涨的,是平方级涨的。这就是「数十亿美元」的来历。

7. 训练之二:人类反馈(书里最被低估的一节)

这一节回答:预训练完成之后,为什么还要人来插一脚。

先看现象

预训练完成后,网络已经会续写了。但作者说了一个很具体的问题19:

结果通常看起来合理,但很容易(特别是在较长的文本片段中)以「非类人」的方式「偏离正轨」。 这不是通过对文本进行传统的统计可以轻易检测到的。但是,实际阅读文本的人很容易注意到。

关键在最后一句:统计查不出来,人一眼就看出来。 既然判据在人这边(第 01 章的结论),那就只能把人拉进来。

那四步

做什么
1让人真的去用它,看它产出什么
2让人给结果打分
3再训一个网络,专门用来预测「人会打几分」
4把这个「会打分的网络」当作误差来源,反过来调原来的网络

第 3 步是这套方法的精髓: 人打分昂贵且有限; 所以不直接拿人的分数去训,而是先训一个会打分的模型,再用它去无限地训。 第 3 步那个会打分的网络,后来就叫奖励模型

作者的评价是:实践中这一步对系统能否产生「类人」输出有很大的影响。

补充(不在书里,来自通用知识):强化学习—— 不给它标准答案,只给它一个分数,让它自己试出怎么才能拿高分。 上面那张表里,人交给机器的正是一个分数、不是一份标准答案, 所以那四步走的就是强化学习这条路。

判断(我们的,不是书里的): 上面那四步,就是后来被叫作 RLHF 的骨架: 那个缩写里的 RL 就是强化学习,HF 是「人给的反馈」, 合起来就是「拿人打的分来做强化学习」。

这本书成书太早,还没有这些名字,也没讲后面那两步: 先拿人写好的范例再训一轮,再拿这个打分网络反复调 —— 中文版导读序把这一点列为全书最主要的遗憾20如果错,会错在: 书里描述的是「用评分模型当误差来源」, 与后来标准 RLHF 用强化学习一步步逼近最好不完全是一回事;把两者等同会模糊方法上的差别。

补充(不在书里): 这套流程的标准论文是 OpenAI 2022 年 3 月的 《Training language models to follow instructions with human feedback》 (通称 InstructGPT),比这本书早约一年,书里没有引用它。 来源:arXiv https://arxiv.org/abs/2203.02155(查阅于 2026-08-25)。

顺带解释了「提示为什么有用」

先说清一个词:提示就是你打给它的那一整段话——你的要求、你贴进去的资料,全算在内。

作者观察到一件他自己觉得很值得琢磨的事21:

基本上只需要把东西告诉 ChatGPT 一次 —— 作为提示的一部分 —— 它就能用上。

他给了一个解释,并且明确说这只是推测:也许「你能告诉它的一切都已经在里面某个地方了」, 但这似乎不太可能;更可能的是,那些元素本来就在里面, 而你告诉它的是「这些元素之间的一条路径」。

同时他给了两条明确的边界22:

  1. 完全不符合它已有框架的东西,它整合不了 —— 只有当新信息以相对简单的方式接得上它已有的框架时,才能被吸收;
  2. 浅显的规则学得会,需要一步步算的规则学不会 —— 这类规则写进提示里也没用。原因作者说得很直接: 它每一步只是一路向前,除非生成新标记,否则不会循环。

第 2 条直接引出第 05 章。

8. 可带走的

全章那条走查,一行写完:the cat → 编号 914 / 3542 → 各变成一串数、加上位置 → 一个注意力头给 the 打 0.2、给 cat 打 0.8,掺成一串新的数 → 穿过 96 块 → 摊成五万个可能性,sat 排第一 → 接到文末,从头再来。这些数是为演示编的。

  1. 三道工序:变成嵌入 → 穿过 96 块 → 变回五万个可能性;
  2. 每生成一个标记要跑完全部 1750 亿个权重,所以长文必然慢;
  3. 关键是「不全连 + 注意力」,不是「更大」;注意力 = 让网络自己决定该看哪儿;
  4. 大量细节没有科学依据 —— 位置为什么用相加、为什么把数切成块,都是试出来的;
  5. 内部一路向前没有循环,唯一的循环在最外层 —— 写出来的字就是它的草稿纸;
  6. 训练成本是平方级的:n 个权重需要 n 个词,于是约 n×n 步计算;
  7. 权重数与训练词数量级相当,内部是分布式编码,不是存原文;
  8. 训练是两件事:海量文字预训练 + 用「会打分的模型」做调优;
  9. 提示之所以有效,可能是因为它指了一条路径,而不是塞进了新知识;
  10. 浅规则学得会,深计算学不会 —— 原因在结构里,不在训练不足。

9. 原文地图

主题原书章原文位置
一句话定性与规模ChatGPT的内部原理text/12-fm-chatgpt.txt:16(搜「1750亿个权重」)
三道工序ChatGPT的内部原理text/12-fm-chatgpt.txt:28(搜「三个基本阶段」)
没有细节是设计出来的ChatGPT的内部原理text/12-fm-chatgpt.txt:31(搜「明确设计」)
全连的浪费与卷积ChatGPT的内部原理text/12-fm-chatgpt.txt:19(搜「卷积神经网络」)
注意力与模块化ChatGPT的内部原理text/12-fm-chatgpt.txt:22(搜「注意力」) · text/12-fm-chatgpt.txt:22(搜「模块化」)
嵌入长度与位置ChatGPT的内部原理text/12-fm-chatgpt.txt:43(搜「12 288」) · text/12-fm-chatgpt.txt:55(搜「位置嵌入」)
相加没有科学依据ChatGPT的内部原理text/12-fm-chatgpt.txt:46(搜「不认为有什么特别的科学依据」)
注意力头在回头看ChatGPT的内部原理text/12-fm-chatgpt.txt:70(搜「回顾」) · text/12-fm-chatgpt.txt:58(搜「96个」)
全连接层的纹路之谜ChatGPT的内部原理text/12-fm-chatgpt.txt:85(搜「滑动平均」) · text/12-fm-chatgpt.txt:85(搜「随机游走式」)
层数与每标记的计算量ChatGPT的内部原理text/12-fm-chatgpt.txt:133(搜「400个」)
一路向前、没有循环ChatGPT的内部原理text/12-fm-chatgpt.txt:118(搜「没有循环」)
最外层的循环ChatGPT的内部原理text/12-fm-chatgpt.txt:124(搜「反馈循环」)
语料规模ChatGPT的训练text/13-fm-chatgpt.txt:19(搜「万亿级别」) · text/13-fm-chatgpt.txt:19(搜「500万本电子书」)
分布式编码与低压缩率ChatGPT的训练text/13-fm-chatgpt.txt:34(搜「分布式编码」)
训练成本ChatGPT的训练text/13-fm-chatgpt.txt:40(搜「数十亿美元」)
偏离正轨与人类打分在基础训练之外text/14-fm.txt:19(搜「偏离正轨」)
提示只需说一次在基础训练之外text/14-fm.txt:28(搜「只需要把东西告诉ChatGPT一次」)
学不会的那类规则在基础训练之外text/14-fm.txt:34(搜「匪夷所思」) · text/14-fm.txt:40(搜「表查找式」)

Footnotes

  1. 出处:「ChatGPT的内部原理」第 133 段(text/12-fm-chatgpt.txt:133,搜「400个」)。

  2. 出处:「ChatGPT的内部原理」第 28 段(text/12-fm-chatgpt.txt:28,搜「三个基本阶段」)。同章第 16 段(text/12-fm-chatgpt.txt:16,搜「1750亿个权重」)给了一句话定性:它「在许多方面非常像前面讨论过的其他神经网络,只不过是一个特别为处理语言而设置的神经网络」。

  3. 出处:「ChatGPT的内部原理」第 31 段(text/12-fm-chatgpt.txt:31,搜「明确设计」)。原文:「除了整体架构,实际上没有任何细节是有『明确设计』的,一切都是从训练数据中『学习』来的。」

  4. 出处:「ChatGPT的内部原理」第 19 段(text/12-fm-chatgpt.txt:19,搜「卷积神经网络」)。

  5. 出处:「ChatGPT的内部原理」第 22 段(text/12-fm-chatgpt.txt:22,搜「注意力」)与第 22 段(text/12-fm-chatgpt.txt:22,搜「模块化」)。

  6. 出处:「ChatGPT的内部原理」第 43 段(text/12-fm-chatgpt.txt:43,搜「12 288」)。

  7. 出处:「ChatGPT的内部原理」第 46 段(text/12-fm-chatgpt.txt:46,搜「不认为有什么特别的科学依据」)。

  8. 出处:「ChatGPT的内部原理」第 55 段(text/12-fm-chatgpt.txt:55,搜「位置嵌入」)。

  9. 出处:「ChatGPT的内部原理」第 70 段(text/12-fm-chatgpt.txt:70,搜「回顾」)。

  10. 出处:「ChatGPT的内部原理」第 58 段(text/12-fm-chatgpt.txt:58,搜「96个」)。

  11. 出处:「ChatGPT的内部原理」第 85 段(text/12-fm-chatgpt.txt:85,搜「滑动平均」)与第 85 段(text/12-fm-chatgpt.txt:85,搜「随机游走式」)。补充(不在书里,来自通用知识):滑动平均是把相邻数值取平均以抹掉噪声、看出大尺度趋势的常规手法。

  12. 出处:「ChatGPT的内部原理」第 112 段(text/12-fm-chatgpt.txt:112,搜「最后一个嵌入」)。

  13. 出处:「ChatGPT的内部原理」第 118 段(text/12-fm-chatgpt.txt:118,搜「没有循环」)。

  14. 出处:「ChatGPT的内部原理」第 124 段(text/12-fm-chatgpt.txt:124,搜「反馈循环」)。

  15. 出处:「ChatGPT的训练」第 22 段(text/13-fm-chatgpt.txt:22,搜「反向传播」)。

  16. 出处:「ChatGPT的训练」第 19 段(text/13-fm-chatgpt.txt:19,搜「万亿级别」)与第 19 段(text/13-fm-chatgpt.txt:19,搜「500万本电子书」)。

  17. 出处:「ChatGPT的训练」第 34 段(text/13-fm-chatgpt.txt:34,搜「分布式编码」)与第 34 段(text/13-fm-chatgpt.txt:34,搜「精度不到10位」)。

  18. 出处:「ChatGPT的训练」第 40 段(text/13-fm-chatgpt.txt:40,搜「数十亿美元」)。

  19. 出处:「在基础训练之外」第 19 段(text/14-fm.txt:19,搜「偏离正轨」)。

  20. 出处:「导读序」第 287 段(text/01-fm.txt:287,搜「监督微调」)。导读序原文:「稍有遗憾的是,本书只重点讲了 ChatGPT 的预训练部分,而没有过多涉及后面也很重要的几个微调步骤:监督微调(SFT)、奖励建模和强化学习。」这是导读序作者的判断。

  21. 出处:「在基础训练之外」第 28 段(text/14-fm.txt:28,搜「只需要把东西告诉ChatGPT一次」)。

  22. 出处:「在基础训练之外」第 34 段(text/14-fm.txt:34,搜「匪夷所思」)与第 40 段(text/14-fm.txt:40,搜「表查找式」)。