Build a Large Language Model (From Scratch) — 全书拆解
30 秒导读: 这是一本 370 页的动手教材(2024 年,Manning),回答一个问题: 一个大语言模型(LLM)——读过海量文字、学会了「猜下一个词」的机器——是怎么从零造出来的。 它不靠讲,靠写:每个零件都用 PyTorch 当场写出来跑给你看,每一步都印着真实的数字。 你从一堆随机数出发,到一台会说英语的机器收尾。
本组文档是我们重写的完整拆解,十章。读完不必看原书。
两个词先交代:这本书属于机器学习——让计算机从数据里学规律、而不是手写规则——这一行。
学出来的那个东西叫模型:一台从数据里学出来的计算装置,给它一段文字,它吐出下一个词。
这本书要造的那台机器有名字:GPT——OpenAI 那系列「会写文字的模型」;书里造的是它的第二代 GPT-2(2019 年)。
1. 先交代清楚:这是谁在什么时候写的
1.1 作者与出版
| 作者 | Sebastian Raschka——机器学习(让计算机从数据里学规律、而不是手写规则的学科)研究者,更是一个教育者:写过多本 Python 机器学习畅销书,曾是威斯康星大学麦迪逊分校统计系助理教授,写这本书时是 Lightning AI 的研究工程师,日常工作就是实现和训练(用数据把模型内部的数调对)LLM1 |
| 出版 | Manning,2024 年;代码全部开源(源代码公开、可自由取用)在 GitHub 的 rasbt/LLMs-from-scratch 仓库2 |
| 写作立场 | 作者在前言里明说了教学法:「理解 LLM 最好的方式是亲手从零写一个」3 |
利益相关:基本干净。一处要留意——书末推荐微调(在训好的模型上再用小数据接着训)框架 Axolotl 和 LitGPT,而 LitGPT 是作者雇主 Lightning AI 的产品、作者本人参与开发4。
1.2 它刻意停在 2019 年的配方
这本书造的是 GPT——OpenAI 那系列「会写文字的模型」——的第二代(GPT-2,2019 年)。
作者的理由:GPT-3 的架构与 GPT-2 相同、只是更大,而且 OpenAI 公开了 GPT-2 的权重—— 这台机器里训练好的全部数字,存成文件——可以搬进来直接用5。
这里说的「模型」,就是一台从数据里学出来的计算装置;更大的模型要 GPU(显卡,擅长同时做大批数值计算)才玩得动。
而且不是一块——要一屋子 GPU 联起来一起算,这种一屋子叫集群。
显卡、内存、机房、电——训练要花掉的这些家当,统称计算资源(能调动多少,决定了你训得起多大的模型)。
从 2026 年回看,这个选择反而成了优点:它教的是不过时的骨架与流程,零件换代的清单见第 4.2 节。
1.3 它是三本同族书里「最教材」的一本
我们书架上另有两本同题的书,已经拆过: 梁楠《从零构建大模型》(2025,中文)是广度优先的零件目录加工程实战; Grigorov《Building Large Language Models from Scratch》(2026)用 2025 年的新零件拼一台现代模型。
Raschka 这本的不可替代性在于:它是一台机器从零到听话的完整连续构建—— 每个环节(包括翻车)都印着真实的运行数字;教学坡道(先简化版、再加可学习的矩阵(排成矩形的一堆数,装的是学出来的旋钮)、再遮未来、再开多路) 是专门为「第一次读」的人设计的。
2. 全书一条主线(读完这一节,你就懂了这本书)
这本书不是知识点合集,是一台机器的施 工记录:每一步都被上一步逼出来。 下面把整条链走一遍——只读这一节,你也能把这本书讲给别人听。
① 要造的东西:一台「猜下一个词」的机器
全部目标就这一个动作:读一段文字,给它认识的每个候选词打分,猜下一个该是什么。 那份「它认识的全部词」的名单叫词表。
任务简单到令研究者惊讶——它居然能养出会翻译、会答题的模型。
「大」指两件事:读过的字有几千亿个;机器内部有几亿个可调的数。 这些数叫参数——训练时会微调的旋钮。这是第 01 章。
② 文字先进不去:先变成数
机器只认数。所以文字先切成小块:切出来的每块叫词元—— 可以是一个词、一个标点或一个词片段;英文里它叫 token(「词元」的英文名,同一个东西)。
然后查词表把词元换成编号,再查另一张对照表把编号换成一串数。 这张「词 → 一串数」的对照表叫嵌入(embedding);它也是参数,跟着模型一起学。
最后还要加一份位置向量(固定长度的一串数),否则机器分不清词序。
一篇 2 万字符的小说走完这四道工序,变成 5,145 个词元、每个词元 256 个数。这是第 02 章。
③ 机器的心脏:让每个词去给别的词打分
老一代模型(按顺序读字的循环神经网络——很多简单计算零件连成环、边读边更新内部状态的那种)要把整句话压进一个固定长度的便签,长句必丢信息。
药方的名字叫注意力:每个词去给所有词算一个「相关分」,再按分数把别的词的数掺进自己的数里。
打分用点积——两串数逐位相乘再求和,在这里当相似度用。
归一用 softmax(一种把一串分数压成「和为 1 的权重」的函数)。
学习靠三个矩阵(排成矩形的一堆数,这里装的是学出来的参数),分别管查询、键、值—— 「该看谁」是训出来的,不是人定的。这是第 03 章,全程用六个词的句子和真实数字走了一遍。
④ 拿去生成,要补三个改造
直接拿③去「猜下一个词」有三个漏洞:打分时看到了答案(未来);会把训练文本背下来; 一份注意力只看一个角度。
「背下来」这种毛病叫过拟合——在见过的题上满分,换个问法就露馅。
补丁一:把分数矩阵的上三角填成负无穷,未来就遮住了,一步且不漏。
补丁二:训练时随机清掉一部 分权重——这个做法叫 dropout,专门防过拟合。
补丁三:把一份注意力拆成几份并行(同时各算各的)跑,这叫多头。这是第 04 章。
⑤ 总装:12 个相同的块,加两件保险
整台 GPT 只有五段:嵌入加位置 → dropout → 12 个相同的 transformer 块 → 最后一次归一 → 输出头。
层叠得深,训练信号会半路消失,所以每个块配两件保险。保险一先把每层的输出归一化—— 把一批数拉回到均值 0 上。
这个做法的全名叫层归一化:除了均值归 0,还要把散开的程度也归 1。
方差——这批数离均值的平均距离——归 1,就是不让它们散得太开、也不许挤成一团。
保险二给信号开一条短路:把层的输入直接加到输出上——这叫残差连接。
训练时用来给模型打分的那个数叫损失——答得离正确答案越远,损失越大;它怎么算,第 06 章讲。
数完参数还抓到一个口径差:号称 124M,全数是 163M,差的那张表被输出头和嵌入层共享了。 这是第 05 章——章末点火,机器开口说了句胡话,因为几亿个数还全是随机值。
⑥ 点火:把「差多远」变成一个数
训练的全部 机制就一步:模型给「正确的下一个词」打了多高的分? 把那个分换成概率——0 到 1 之间、所有候选加起来等于 1 的数。
「正确的下一个词」从哪来?它就躺在原文里——这行管标准答案叫标注;这里不用人贴,是它便宜的原因。
再取对数(把小于 1 的概率变成好算的负数)、平均、取负,得到损失。
先交代一个字:熵——从物理借来的词,这里读作「不确定的程度」。
这个损失的名字叫交叉熵损失,越小越好;全书训练的靶子就是它。这是第 06 章上半。
⑦ 训练:1.24 亿个旋钮一起调
有了损失,用链式法则(复合函数求导:外壳的导数乘内核的导数)从损失倒推出每个参数该往哪挪。
这个倒推的过程叫反向传播——信号从损失那一头倒着传回每个参数;然后一万次一万次地挪。
「往哪挪、挪多少」这件事有个名字:优化——拿损失当靶子,一遍遍把参数往损失更小的方向调。
书里真点了一次火:训练集被完整过了 10 遍,每一遍叫作轮(英文 epoch:训练集被完整过一遍,就算一轮)。
10 轮下来训练损失 9.78 降到 0.39,验证损失却停在 6.45——它把训练用的小说背下来了。 学会与背题同时发生,这是全书最值钱的一段录像。这是第 06 章下半。
⑧ 挑词与搬权重:生成的最后一公里,与「别自己烧钱」
模型给的打分清单不变,「怎么挑」是独立的一层:总挑最高分(贪心)会复读,按概率抽签才有变化。
拿训好的模型干活、生成文字,这个阶段叫推理(inference,与「训练」相对:训练是调旋钮,推理是用旋钮);这一节管的就是推理时怎么挑词。
还有一个旋钮叫温度——一个除数,管差距的锐度:大于 1 更敢挑冷门,小于 1 更保守; top-k 则把长尾直接砍掉。
然后是最实战的一步:预训练(第一段训练:在海量无标注文字上学语言)动辄几十万美元, 所以把 OpenAI 公开的 GPT-2 权重逐层搬进自己写的模型——搬对了没有别的检验, 就看它开口说不说人话。这是第 07 章。
⑨ 微调一:换个小出口,变成分类器
把输出头从「768 维→5 万词表」换成「768 维→2 个类」,模型就变成一台分类器—— 只回答「是哪一类」的机器。
其余 99% 的参数冻结(设成不再更新),只用垃圾短信数据训 5 轮: 准确率从接近瞎猜的 46% 跳到测试集 95.67%。
只看最后一个词元的输出——遮未来的那个规矩顺手送了份礼:只有它看全了整条短信。 这是第 08 章。
⑩ 微调二:教它听人话,再请另一个模型当裁判
这一步的正式名字叫指令微调——用「指令+标准回答」对接着训。 数据 1,100 条,套固定模板;目标里的补位词元用 -100 从损失里摘出去,留一个结束符教模型收工。
124M 容量不够,换 355M;训 2 轮,模型学会了「主动句改被动句」。
没法用准确率评估开放回答,就让本地一个 8B 的 Llama 3 当裁判打分:平均 50.32 分—— 输给 8B 基座的 58.51,这是小模型明码标价的天花板。这是第 09 章。
⑪ 地基与加料
三个附录各补一块。第一块:PyTorch 替你算了全部微积分(附录 A)。
第二块:真实训练比教学版多三件稳定器——学习率(每步挪多大的步长)先爬坡。
爬到峰值后沿余弦(一条先缓后急再缓的弯曲轨道)降下来。
第三件:梯度(每个参数「该往哪挪多少」的信号)太长就按比例截短(附录 D)。
第三块:微调还能更省——LoRA——一种只学两个小矩阵来冒充整张权重更新的微调法, 只动 2% 的参数就追平全量微调(附录 E)。合在第 10 章。