跳到主要内容

训一个会写型的 — 三步、两次省钱,以及「没有金标准」

这一章讲三件事: 从「会说话」到「听话」再到「说人话」,中间到底发生了什么; 为什么这两步都贵,以及业界怎么把成本压进一张显卡; 以及一个所有人都想跳过、但跳不过去的问题——你怎么知道训完之后是变好了。 在全书链条里,这一章是最后一站:前面八章的顺序走到这里才轮到「动模型」。 需要先读第 03、08 章,其余生词都在当场解释。

1. 先看现象:一个只完成了第一步的模型,长什么样

这一节回答:为什么「预训练完就能用」是错的。

书给了一个非常直观的对照。同一个模型,只做完最贵的第一步训练:

你说它答
「跟我讲讲大语言模型。」它不回答,而是接着往下编:「……以及它们和小语言模型有什么区别?」1

它不是不会,是不知道你在要求它。 书的描述很准: 当人类要求模型撰写文章时,他们要的是模型写出文章,而不是列出另外一堆指令2

而这一步完成之后,同一个问题的回答变成了:

「大语言模型是一类学习语言、并理解在某种语言里说某件事意味着什么的人工智能模型。 它们在海量文字上训练……」3

书的评价一句话:模型现在能够紧密地遵循我们的指令,这是基础模型无法做到的3

这一章讲的就是从上面那行到下面那行,中间要做什么、要花多少钱。

2. 顶层全景:三步,以及每一步喂的数据长什么样

① 预训练:拿海量网页文字,一遍遍猜下一个词元
│ 数据形态:纯文本,没有标签。书叫这种「自监督」——
│ 答案就藏在数据自己身上(下一个词就是答案),不用人来标
│ 产物:基座模型。会说话,但不听指令
│ **极贵。这本书不讲这一步,也不建议你做**

② 监督微调:拿「指令 + 标准回答」来训
│ 数据形态:成对的问答
│ **动作还是「猜下一个词元」,但要猜的只有「回答」那一半**
│ 产物:会听指令的模型

③ 偏好调优:拿「同一个问题的好答案 vs 差答案」来训
数据形态:一个提示 + 一个被接受的回答 + 一个被拒绝的回答
产物:说人话、合口味的模型

图说:**三步的动作越来越不像「训练」,越来越像「调教」。**
而它们最大的区别不在算法,在**喂进去的数据长什么样**。

书对第一步产物的描述值得记住:它是训练过程中的关键产物, 但对最终用户来说较难直接使用4——这句话就是后两步存在的全部理由。

3. 核心原理

3.1 第二步:动作没变,变的是「哪一半要猜」

它解决什么问题: 让模型学会「回答」,而不是「接着编问题」。

它怎么做:一个小得让人意外的改动。

预训练: 给它一段话 → 猜下一个词元 → 对不对 → 调
整段话每个位置都要猜

监督微调: 给它「指令 + 回答」 → 只在「回答」这一半上猜下一个词元
指令那一半不参与打分

图说:**算法一模一样,变的只是「在哪一段上计分」。**
书的说法:它「基于用户的输入来预测下一个词元」[^5]。

书对这一步的正式叫法是监督微调(也常叫指令调优)。 它还顺带说明这一步不只能教「听指令」——也可用于其他任务,如分类5

最直接的做法是全微调:更新模型的所有参数。 和第一步的区别只有一个:这次用的是较小但有标签的数据集6

但全微调有三个明摆着的问题,书列得很清楚:

训练成本高、训练速度慢,并且需要大量的存储空间。7

第三条最容易被忽略:每为一个任务微调一次,你就得存一整份模型。 十个任务就是十份。

这三条问题,直接催生了下一节。

3.2 省钱第一招:大部分冻住,只训一小块

这一节是这一章的技术核心,而它的念头你在第 07 章已经见过。

书给这一整类做法起了个统称:参数高效微调—— 专注于以更高的计算效率来微调预训练模型8

先看一个更早的做法:插件式的小模块

做法是在模型内部各处插进一些额外的小模块,只训这些小模块,其余全冻住9

书给的数字很有说服力:

针对一个任务,只微调 3.6% 的参数,就能达到与微调所有权重相当的性能; 在一套公开语言理解考卷上,性能在全微调的 0.4% 以内10

这套做法带来一个很漂亮的副产品:小模块可以像插件一样换。 书举的例子:一个小模块专管医学文本分类,另一个专管找人名地名—— 只要底座模型和权重相同,就能在同一个架构里互换11

但这条路今天不是主流。 书的说法是:早期的这类工作更多围绕表示模型那一支12

今天的主流:把「改动量」近似成两个瘦条

它解决什么问题: 上面那招要往模型里插新东西,改动了结构。有没有不改结构的办法?

有,而且思路完全不同:不加层,只是把要训的那部分「变小」。 这套做法叫 LoRA,中文一般叫低秩适配—— 它创建了基础模型的一个小子集进行微调,而不是向模型添加层13名字里的「低秩」,说的就是下面那两个瘦条很窄;窄就是省。

在看那个例子之前,先补一级台阶——不补的话,后面那个「改动量」会凭空冒出来。

微调要训的,从来不是模型里那张权重方阵本身:它冻着不动。 要训的是「这一次微调把它改动了多少」,也就是一张和它同样大小的改动量方阵全微调之所以贵,贵就贵在这里:原方阵多大,这张改动量方阵就多大,一个数都不少。 下面那个「变小」,变小的自始至终是这张改动量方阵。

怎么把它变小?书用一个 10×10 的例子讲得极清楚14:

原本:改动量是一个 10 × 10 的方阵 = 100 个数要训


改成:用两个瘦条 —— 一个 10 × 1,一个 1 × 10 —— 相乘来近似这张改动量方阵


现在:只有 10 + 10 = 20 个数要训

图说:**100 个变成 20 个。而且这只是 10×10,方阵越大,省得越狠。**
**变小的是改动量,不是原方阵**——原方阵从头到尾一个数都没动过。

放到真实模型上,这个比例吓人。 书算的账15:

数量
一个真实的大模型里,单个权重方阵有多大,它的改动量方阵就有多大12,288 × 12,288 ≈ 1.5 亿个数
而这样的方阵,每一块处理块里都有一份,一共 96 块——
用两个瘦条(宽度取 8)来近似同一个方阵约 19.7 万个数

从 1.5 亿降到不到 20 万。

「秩」这个词你会到处看到,它就是上面那个「瘦条有多宽」。 秩取 8,就是两个宽度为 8 的瘦条;秩取 64,就是宽度 64。 秩越大,近似得越准、能表达的东西越多,但省得越少。 书说常用值在 4 到 64 之间16

这套办法凭什么行得通?书引了一条研究结论:

语言模型「具有非常低的内在维度」—— 意思是即使是巨大的改动量方阵,也能用很小的秩来近似17

注意这句话的口径: 那篇研究讲的是「微调需要改动多少」这件事的内在维度, 不是权重本身的。这两件事差得很远——权重本身信息极密,改动量却很稀。

训完之后怎么用? 把那两个瘦条乘出来的改动量, 和冻住的原始权重合到一起18——到这一步,原方阵才第一次被动。

还有一个很实用的灵活性:你可以挑着训。 书说可以只微调每个处理块里的某几个方阵19—— 而挑哪些,书直说了是个权衡:少挑几个训得快,但性能会降;反之亦然20

补充(不在书里): 书没有给这套做法的原始效果数字。原论文摘要给的是: 相比用常规方法全量微调一个 1750 亿参数的模型, 它把需要训练的参数减少到万分之一,把显存需求降到三分之一。 来源:《LoRA: Low-Rank Adaptation of Large Language Models》 (Hu、Shen、Wallis、Allen-Zhu、Li、Wang、Wang、Chen,2021-06-17) https://arxiv.org/abs/2106.09685(查阅于 2026-08-25)

判断(我们的,不是书里的): 这一招和第 07 章那座桥、第 08 章那些冻结层, 是同一个念头的三次出现:不要动大的,只训一小块可控的东西。 而这三次的差别只在「那一小块长在哪儿」—— 桥长在两个模型中间,冻结层是「不冻的那几层」,这里是「大方阵的一个瘦影子」。 如果错,会错在: 如果任务要模型学的东西超出了「小幅调整已有能力」的范围 (比如教一个只会英文的模型说一门全新的语言),那小块可能根本不够—— 判据是:训练时那个「差多远」的数降不下去,或者一降就把原有能力搞坏。

3.3 省钱第二招:把冻住的那部分存得粗一点

它解决什么问题: 上一招省了「要训的」,但冻住的那一大坨还得装进显存

它怎么做:降低精度。 而这就是第 01 章提过的量化

先把「精度」讲清楚:

模型里每个数都是用若干个比特(0 和 1 那种最小的存储单位)存的。 比特越多,能表示的数越精细,占的内存也越大。 书举的例子是圆周率:用 32 个比特存,和用 16 个比特存,后者明显没那么准21

量化就是:少用几个比特,但尽量还原出原来那个数。

书打的比方很好懂: 有人问你几点了,你说「14:16」—— 这个答案没错,但并非完全精确;你本可以说「14 点 16 分 12 秒」。 但秒数通常没什么用,我们习惯把它归到整分钟。 量化就是这样一个过程:降低精度,但不丢关键信息22

直接压会出什么问题

高精度那一侧: 0.412 0.413 0.418 0.421 ……
│ 全都很接近,但确实是不同的数
▼ 直接映射到低精度
低精度那一侧: 0.4 0.4 0.4 0.4

图说:**四个不同的数,压完变成同一个数。区分它们的信息,没了。**
书的说法是:「多个高精度值最终可能由同一个低精度值表示」[^24]。

两个补救,书都讲了

补救一:分块压。 不是把整个模型放在一起统一压,而是分成一块一块,每块单独定尺度23这样每一块内部的数差别不大,压完还分得开。

补救二:利用一个已知的统计规律。 书说神经网络的数值通常在 -1 到 1 之间呈正态分布—— 也就是中间密、两头稀。既然知道这一点, 就按数值的实际疏密来分格子:密的地方格子细,稀的地方格子粗24

书对效果的表述: 这两条加起来,可以从 16 位浮点表示转变为仅 4 位归一化浮点表示, 而性能只有很小的下降25

「4 位归一化浮点」是那种存储格式的名字,指的就是「按上面那条中间密两头稀的规律 划好格子的 4 位数字格式」。它和第 03 章讲的那个「归一化」不是一回事,只是撞了名字。

把这一招和上一招叠起来,就是 QLoRA:冻住的底座压到 4 位,只有那两个瘦条保持高精度。

书给的实测很直观: 用这套办法加载模型只用约 1 GB 显存,不量化则需要约 4 GB—— 不过它诚实地补了一句:微调过程中所需的显存会更多26

补充(不在书里): 书没有给这套做法的原始效果数字。原论文摘要给的是: 它把显存需求降到能在单张 48GB 显卡上微调一个 650 亿参数的模型, 同时保持全 16 位微调的任务性能;用它训出来的模型在一项评测上 达到 ChatGPT 性能水平的 99.3%,而训练只用了单卡 24 小时。 来源:《QLoRA: Efficient Finetuning of Quantized LLMs》 (Dettmers、Pagnoni、Holtzman、Zettlemoyer,2023-05-23) https://arxiv.org/abs/2305.14314(查阅于 2026-08-25)

书还给了一条可以直接抄的经验规则:

尽量选至少 4 位的量化模型。这类模型在压缩和精度之间取得了良好的平衡。 虽然也可以用 3 位甚至 2 位,但性能下降会变得明显—— 此时宁可选择精度更高的小型模型。27

最后这半句是这一章最实用的一条选型建议: 「大模型压得很狠」通常不如「小模型压得温和」。

3.4 第三步:让它说人话

它解决什么问题: 它现在听指令了,但答得干巴巴、或者不合你的口味。

书举的例子很具体: 问「什么是大语言模型?」, 你可能更希望得到一个详尽解释内部机制的答案, 而不是「它是一个大语言模型」这种没有进一步解释的回答28

这两个回答都「遵循了指令」。区别只在偏好。

最朴素的做法,以及它为什么不可行

① 模型生成一个回答


② 找一个人来打分,比如打 4 分


③ 分高 → 调模型,鼓励它多生成这类;分低 → 调模型,抑制这类

图说:道理没问题。**问题是第 ② 步——你需要海量样本,人打不过来。**[^31]

所以要养一个「打分员」

书给的解法:训练另一个模型专门打分,书叫奖励模型29

它怎么造?一个很省事的改装:

拿那个已经会听指令的模型,复制一份,把最外面那个「预测下一个词元」的头部, 换成一个「输出一个分数」的头部。30

回想第 03 章那句话:同一摞处理块,换个头部就换了工种。这里就是那句话的应用。

打分员用什么数据训? 一种常见形式是:每条训练样本 = 一个提示 + 一个被接受的回答 + 一个被拒绝的回答31

书在这里加了一个很重要的澄清,别漏了:

并不总是一个好的生成结果与一个坏的生成结果; 也可能是两个生成结果都不错,但其中一个比另一个更好。31

这些数据怎么来? 让模型对同一个提示生成两个不同的回答, 再请人工标注者选出更喜欢哪一个32

训练目标只有一句话:确保被接受的那个,得分比被拒绝的那个高33

合起来是三个阶段:收集偏好数据 → 训练打分员 → 用打分员去调模型34

一条走查:同一个提示的两个回答,在这三步里各是什么数

下面所有数值都是为演示编的,不是书里的实测值。 书给了机制,没给任何一条样本的中间结果。

提示就用书自己那个:「什么是大语言模型?」 两个回答是:

回答
被接受的(记作 A)「大语言模型是一类读了海量文字、学会接着往下写的模型。它内部有几十亿到几千亿个可调的数……」
被拒绝的(记作 B)「它是一个大语言模型。」

第一步,打分员给分。 那个换了头部的模型,吃进「提示 + 回答」,吐出一个数:

A → 0.8 B → 0.3

图说:训练打分员时唯一的要求就是这一条不等式成立:**0.8 > 0.3。**
至于是 0.8 对 0.3 还是 0.9 对 0.2,不重要——**要的是次序,不是绝对值。**

书还提了一个很实际的扩展:打分员可以不止一个。 它举的例子是某个模型系列训练了两个奖励模型:一个评有用性,一个评安全性35

用打分员去调模型的具体办法,书点名了一个,叫 PPO(全称近端策略优化)。

它属于强化学习——就是「不给标准答案,只给一个分数,让模型自己摸索怎么拿更高的分」的那一类做法。

它的作用是确保模型不会偏离预期奖励太远; 书还提了一句历史:它甚至被用于训练 2022 年 11 月发布的原始 ChatGPT36

你可以把强化学习理解成训小狗:不说「该怎么做」,只说「这次做得好/不好」。

3.5 一个把打分员整个省掉的办法

PPO 有一个明摆着的问题,书说得很干脆:

它是一种复杂的方法,需要至少训练两个模型(奖励模型和语言模型), 这可能比实际需要的成本更高。37

于是有了 DPO(全称直接偏好优化)。 它的思路很妙:让模型自己当自己的打分员38

留一份自己的副本,冻住不动 —— 当「参照」


对同一个「被接受的回答」和「被拒绝的回答」:
│ 分别看看「参照的自己」和「正在训的自己」各觉得它们有多可能

计算两者之间的「偏移」


朝一个方向调:让「正在训的自己」对被接受的更有信心、对被拒绝的更没信心

图说:**没有第二个模型要训,只有一个冻住的自己当尺子。**
两个模型变回了一个。

这个「偏移」到底是什么?接着上面那条走查算一遍。

两个模型分别给 A 和 B 打一个「这段话有多可能被写出来」的数 (下面四个数同样是编的):

参照的自己(冻住)正在训的自己挪了多少
A(被接受的)−18.0−17.2+0.8
B(被拒绝的)−6.0−6.4−0.4

偏移量 = A 挪的 − B 挪的 = 0.8 − (−0.4) = +1.2。 正数说明方向对了:正在训的这一份相对参照,已经把 A 抬高、把 B 压低, 所以这一步只需要轻轻推一下;如果算出来是负数,就往「抬 A 压 B」的方向狠推。

别被 A 那个 −18.0 吓到。 A 比 B 长得多,长句子的这个数天然更小—— DPO 比的是「相对参照挪了多少」,不是绝对值,所以回答的长短不影响判断。 这也是它比「直接看谁分高」稳的地方。

这个「有多可能」是怎么算的?

先讲一个词:「对数」就是数学上把很小的数换个尺度来表示的一种办法—— 这里用它,是为了让一长串很小的数乘起来时不至于小到算不动。 所以**「对数概率」就是「这段话有多可能被写出来」的一种数值表示**,不用管它怎么算。

书说得很具体:从两个模型里取出被接受和被拒绝那两段回答的对数概率, 在词元级别上算,再组合起来算出偏移量39

书给的评价:与 PPO 相比,DPO 在训练过程中更稳定且更准确40

补充(不在书里): 书没有引用原论文的具体主张。原论文摘要的说法是: 这套办法稳定、计算开销轻、不需要在微调时从模型采样、也不需要大量调超参数—— 超参数就是「训练开始前由你定死、训练过程中不会被自动调整」的那些设定,比如下一节那几个; 效果上与现有方法相当或更好,在控制情感倾向这一项上超过了基于 PPO 的做法。 来源:《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》 (Rafailov、Sharma、Mitchell、Ermon、Manning、Finn,2023-05-29) https://arxiv.org/abs/2305.18290(查阅于 2026-08-25)

书最后还提了一个更省事的方向:把第二步和第三步合成一步。 它点名了一个叫 ORPO 的做法,消除了执行两个独立训练循环的需要41

补充(不在书里): 原论文摘要的主张是:对不受偏好的那种写法施加一点小小的惩罚, 就足以让监督微调本身带上偏好对齐(对齐:就是「把模型的回答调到合人的口味」, 也就是这一整节在干的事);而且它不需要参照模型。 来源:《ORPO: Monolithic Preference Optimization without Reference Model》 (Hong、Lee、Thorne,2024-03-12)https://arxiv.org/abs/2403.07691(查阅于 2026-08-25)

书对「监督微调 + DPO」这套组合的评价很平衡,值得抄:

这是首先微调模型以执行基本聊天、然后将其回答与人类偏好对齐的绝佳方法。 然而,它确实有代价,因为我们需要执行两个训练循环,并可能在这两个过程中调整参数。42

3.6 训练时那几个设定,书解释了为什么

这一节把几个反复出现的设定讲清楚,它们不是玄学。

设定是什么书的说明
训练轮数整份数据从头到尾过几遍值越高往往导致性能下降,所以通常保持较低43

剩下三个是同一样东西的三个面,一个一个来。

学习率就是「每次调整时一步迈多大」:迈太大会越过去,迈太小会很慢。 书说对较大的模型(超过 330 亿参数),较高的学习率效果更好44

学习率调度就是「学习率怎么随时间变」——它不是从头到尾一个数。 书用的那种:先从零线性升上去,之后按一条平滑的曲线降下来45

预热就是「开头那一小段先用很小的学习率」,要调的是它占总步数的比例。 理由很实在:在开始时保持较小的学习率,让模型先适应数据,避免有害的发散46

书对这一整块的态度很诚实(下面这段是书的原话,它把上表这些设定叫「参数」):

优化这些参数是一项困难的任务,没有固定的准则。 需要进行实验来确定对于特定数据集、模型大小和目标任务最有效的设置。47

书还给了一条很实用的用法扩展,容易被跳过: 这套省钱的微调办法不只能把基座模型变成聊天模型,也可以拿来微调已经会聊天的模型—— 比如让它产出符合特定格式的输出,或者写出一种叫 SQL(专门用来查数据库的那种语言) 的代码48

换句话说:第 05 章那个「让输出永远合规」的问题,除了约束采样,还有第三条路——训进去。

3.7 最后一节,也是最诚实的一节:你怎么知道它变好了

书开门见山:评估生成模型是一个重大挑战49

理由很硬: 生成模型被用在太多不同场景上,很难依赖单一指标来判断; 而且解决数学问题的能力并不能保证成功解决编程问题50

它还提了一个只有做过才知道的痛点: 生成模型的输出不一定一致,所以在一致性很重要的生产环境里,需要稳健的评估51

书给了五档办法,而且每一档都自带毛病。

第一档:数词的重合度

做法: 拿模型写的和参考答案比,看用词重合多少。 书列了几种常见的,并挑出一个专门解释52:

困惑度:一个衡量语言模型对文本的预测能力的数—— 给一段文字,如果模型对每一个下一个词元都给出很高的可能性,那它的困惑度就低。 一句话:面对一篇写得好的文档,模型不该感到「困惑」。

毛病书直说了:

它们没有考虑生成文本的一致性、流畅性、创造性甚至正确性。53

第二档:公开考卷

书列了六套,并按用途分了类54表里那些大写的名字都是考卷的代号,记不住不影响理解—— 比如 MMLU 就是那套横跨 57 个科目的综合理解题,HumanEval 就是那套 164 道的编程题:

考卷考什么
MMLU57 个不同科目的综合理解
GLUE各种难度的语言理解任务
TruthfulQA生成的内容说不说实话
GSM8k小学数学应用题,由人类出题者编写,语言上有多样性
HellaSwag常识推理,四选一
HumanEval164 道编程题,专门评生成的代码

毛病书列了三条55:

  1. 模型可能会对这些考卷「过拟合」——为了刷高分而针对性优化「过拟合」就是「只把这套题背熟了,换一套就不会」;
  2. 考卷太宽泛,可能覆盖不到你的具体场景;
  3. 有些考卷需要强大的显卡、运行时间长达数小时,使得迭代变得困难。

第三档:排行榜

做法: 把多套考卷凑在一起排个总榜。

毛病和上一档同源,但更严重: 书直说了存在对排行榜过拟合的风险56

第四档:让另一个模型当裁判

做法: 让一个有能力的模型去评判被测模型的输出质量。 书还提了一个变体:两个模型各写一个答案,由第三个模型判哪个更好57

这一档有一个真正的优点,书说得很好:

随着模型的改进,它们评判输出质量的能力也在提高。 换句话说,这种评估方法与领域共同发展。58

毛病是显而易见的:裁判自己会偏。

第五档:人来评

书直说这是黄金标准59。它举的例子是一个公开的对战平台: 你提一个问题,两个匿名模型各答一个,你选哪个更好;投票之后才揭晓是哪两个模型。 写作时已经累积了超过 80 万张人工投票,用一套类似国际象棋等级分的算法算出排名60这个量级要和上面那一档比才有意义: 上一档里那套编程考卷一共只有 164 道题, 这一档拿到的判断是它的近五千倍——这正是它被叫做黄金标准的原因。

但书紧接着自己拆台:

它仍然是广泛用户的聚合意见,可能与你的具体用例无关。60

书的结论,以及那句被引用最多的话

书给的建议只有两条,但很实在61:

  1. 根据预期的用例来评估——对于编程任务,编程考卷比数学考卷更合理;
  2. 你自己才是最好的评估者。 书甚至举了它自己的做法: 两位作者一个是阿拉伯人、一个是荷兰人,他们接触新模型时经常用母语提问

最后它引了一句话作结,而这句话值得刻在墙上:

当一个指标成为目标时,它就不再是一个好指标。62

书自己给了一个很好的解释: 如果你纯粹专注于优化「生成语法正确的句子」, 模型可能学会只输出一句话:「这是一个句子。」 它在语法上完全正确,但无法告诉你关于它语言理解能力的任何信息63

判断(我们的,不是书里的): 这一节是全书最诚实的一节,也是全书最大的缺口。 它把「为什么难」讲透了,却没有回答「那你该怎么办」。 五档办法各自的毛病都列了,但没有一条「怎么给自己的系统建一套评测集」的可执行建议—— 比如该收集多少条真实用例、怎么分层抽样、多久重跑一次、什么情况下该推翻结论。 这个缺口在第 04、06 章各出现过一次,这里是第三次。 如果错,会错在: 如果建评测集这件事确实高度依赖具体业务、写不出通用步骤, 那书的沉默是合理的克制——但它连「这一步很重要、请自己做」都没有明说。

4. 作者的判断与证据

说法属于哪一类说明
基座模型不听指令,只会接着编问题有演示这是整章的动机,而且可以自己复现1
插件式小模块:3.6% 参数、性能差 0.4% 以内转述外部结果书引的是那篇原论文,不是自己跑的10
LoRA 的算术:1.5 亿 → 19.7 万有推算是书自己按秩 8 算的,不是实测性能15
「语言模型具有非常低的内在维度」转述外部结论,而且它是整招成立的前提书引了论文,但没有讨论这个前提在什么情况下不成立17
4 位加载 1 GB vs 不量化 4 GB有实测,而且书主动补了「训练时会更多」这是一处很好的诚实26
「至少 4 位」这条经验规则经验建议,无数据但它后半句(「宁可选精度更高的小模型」)是很有价值的判断27
DPO 比 PPO 更稳定更准确转述,书没有自己做对照书直接说了「作者发现」40
「优化这些设定没有固定准则」作者主动坦白值得当成整章的免责声明47
「评估没有黄金标准」作者主动坦白,而且贯穿整节「我们要强调的是,目前缺乏黄金标准」49
「你自己才是最好的评估者」作者的判断诚实,但也是把难题推回给了读者61

5. 边界与局限

第一,这一章讲的全是「怎么训」,几乎没讲「训什么数据」。 第 08 章那句「训练的主要困难在于找到正确的数据」在这一章同样成立, 但这一章连那句话都没说。 它用的偏好数据部分由另一个模型生成64, 而「用模型生成的数据去训模型」有什么风险,书一个字没提。

第二,强化学习那条路只提了名字。 PPO 是什么、为什么要「不偏离太远」、怎么调,全部略过。 这不是缺陷(书自己定位是直觉优先),但你不能靠这一章去实施 PPO。

第三,「合并权重」这一步的坑没讲。 书演示了训完之后把瘦条合回原权重65,但没有讲多个瘦条叠加会互相干扰、 也没有讲合并之后精度怎么变。 它自己在第三步那一节做了「两个瘦条依次合并」的操作, 却没有讨论这么做的后果。

第四,评估那一节是全书最大的缺口(见上一节的判断)。

第五,今天这一章的做法已经有了新分支。 书写在 2024 年 9 月,它在最后提到的那个「把两步合成一步」的方向,今天已经是常见选项之一。 更大的变化是第 05 章那条:「让模型自己先想很久」这件事,今天是训进去的,不是提示出来的。

补充(不在书里): 有工作声称,不需要人工标注的推理过程,纯靠奖惩训练, 就能让模型自己长出自我反思、验证、动态换策略这些行为。 来源:《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》 (DeepSeek-AI 等,2025-01-22)https://arxiv.org/abs/2501.12948(查阅于 2026-08-25)

这意味着这一章的第三步已经不只是「调口味」了,它还能调「怎么想」。

6. 可带走的

  1. 三步:预训练(会说话)→ 监督微调(听指令)→ 偏好调优(说人话);
  2. 三步的真正区别不在算法,在喂进去的数据长什么样;
  3. 只做完第一步的模型不听指令——你问它,它接着编下一个问题;
  4. 监督微调的动作和预训练一模一样,变的只是「只在回答那一半上计分」;
  5. 全微调的三个问题:贵、慢、每个任务都要存一整份模型;
  6. 省钱第一招:大部分冻住,只训一小块——这是第 07、08 章那个念头的第三次出现;
  7. 要训的不是权重方阵,是「这次改动了多少」那张同样大的方阵; 具体做法是把它近似成两个瘦条:10×10 的 100 个数,变成 10+10 = 20 个;
  8. 真实规模上是 1.5 亿 → 不到 20 万;
  9. 「秩」就是瘦条有多宽:越大越准也越贵,常用 4 到 64;
  10. 它成立的前提是「大方阵其实可以用很小的秩近似」,这是引用来的结论,不是书证明的;
  11. 省钱第二招:把冻住的那部分存得粗一点(量化);
  12. 直接压会把邻近的数压成同一个数,所以要分块压 + 按数值疏密分格子;
  13. 经验规则:至少 4 位。「大模型压得很狠」通常不如「小模型压得温和」;
  14. 第三步原本要养一个打分员模型,做法是把「预测下一个词元」的头部换成「输出一个分数」的头部;
  15. 偏好数据不是「好的 vs 坏的」,常常是「不错的 vs 更好的」;
  16. 后来有人把打分员整个省掉了:留一份冻住的自己当参照,直接朝「好答案比差答案更可能」的方向调;
  17. 训练时那几个设定没有固定准则,只能实验——书自己说的;
  18. 这套省钱办法也能用来让已有的聊天模型固定输出格式,这是第 05 章那个问题的第三条解法;
  19. 评估没有金标准:数词重合不管对错,公开考卷会被刷分,排行榜也会,模型当裁判会跟着裁判偏,人评最准但只是众人口味的平均;
  20. 按你自己的用例评,而且你自己才是最好的评估者;
  21. 「当一个指标成为目标,它就不再是一个好指标」——这是全书的最后一句忠告,也是最该记住的一句。

7. 原文地图

主题原书章原文位置
三步训练总览微调生成模型text/14-fm.txt:11(搜「三个步骤」) · text/14-fm.txt:13(搜「自监督」)
基座模型难直接使用微调生成模型text/14-fm.txt:15(搜「较难直接使用」)
它不回答,接着编问题微调生成模型text/14-fm.txt:41(搜「生成新的问题」) · text/14-fm.txt:19(搜「而不是列出其他指令」)
训完之后的输出微调生成模型text/14-fm.txt:336(搜「Large Language Models (LLMs) are artificial intelligence」) · text/14-fm.txt:337(搜「紧密地遵循我们的指令」)
监督微调:只在回答那一半计分微调生成模型text/14-fm.txt:21(搜「基于用户的输入来预测下一个词元」) · text/14-fm.txt:55(搜「对输出(回答)应用下一个词元预测」)
也可用于分类微调生成模型text/14-fm.txt:25(搜「SFT 也可用于其他任务」)
全微调与它的三个问题微调生成模型text/14-fm.txt:47(搜「最常见的微调过程是全微调」) · text/14-fm.txt:59(搜「需要大量的存储空间」)
参数高效微调微调生成模型text/14-fm.txt:59(搜「研究者们将注意力转向了参数高效微调」)
插件式小模块与 3.6%微调生成模型text/14-fm.txt:63(搜「适配器是许多基于 PEFT 技术的核心组件」) · text/14-fm.txt:65(搜「3.6%」)
小模块可以互换微调生成模型text/14-fm.txt:73(搜「适配器1可以专门处理医学文本分类」)
LoRA 的定位微调生成模型text/14-fm.txt:81(搜「低秩适配(LoRA)被提出」)
10×10 的算术微调生成模型text/14-fm.txt:85(搜「10×10 矩阵」) · text/14-fm.txt:89(搜「20 个权重」)
真实规模的算术微调生成模型text/14-fm.txt:99(搜「12,288」)
内在维度微调生成模型text/14-fm.txt:99(搜「非常低的内在维度」)
可以挑着训哪几个方阵微调生成模型text/14-fm.txt:101(搜「Query 和 Value」) · text/14-fm.txt:250(搜「target_modules控制要针对哪些层」)
合并变化量与冻结权重微调生成模型text/14-fm.txt:93(搜「与完整(冻结的)权重相结合」)
比特与精度微调生成模型text/14-fm.txt:105(搜「float64 或 float32」) · text/14-fm.txt:107(搜「float 32 位和 float 16 位」)
几点了那个比方高级文本生成技术与工具text/09-fm.txt:29(搜「14:16」)
直接压会撞车微调生成模型text/14-fm.txt:109(搜「多个高精度值」) · text/14-fm.txt:111(搜「消除了任何区分因素」)
分块量化微调生成模型text/14-fm.txt:115(搜「分块量化」)
正态分布与按疏密分格子微调生成模型text/14-fm.txt:119(搜「正态分布」)
16 位 → 4 位微调生成模型text/14-fm.txt:123(搜「4 位归一化浮点表示」)
至少 4 位那条经验高级文本生成技术与工具text/09-fm.txt:35(搜「至少 4 位量化模型」)
1 GB vs 4 GB,以及「训练时更多」微调生成模型text/14-fm.txt:226(搜「约 1 GB VRAM」)
训练设定说明微调生成模型text/14-fm.txt:279(搜「num_train_epochs训练的总轮数」) · text/14-fm.txt:620(搜「warmup_ratio」)
「没有固定的准则」微调生成模型text/14-fm.txt:279(搜「没有固定的准则」)
也能用来固定输出格式微调生成模型text/14-fm.txt:283(搜「特定的 SQL 代码」)
偏好调优的动机微调生成模型text/14-fm.txt:431(搜「什么是 LLM」)
人来打分不可行微调生成模型text/14-fm.txt:437(搜「偏好评估者」) · text/14-fm.txt:449(搜「我们需要大量的训练样本」)
奖励模型与换头部微调生成模型text/14-fm.txt:449(搜「奖励模型」) · text/14-fm.txt:459(搜「质量分类头部」)
偏好数据的形式与那句澄清微调生成模型text/14-fm.txt:473(搜「并不总是一个好的生成结果」)
人工标注者选更喜欢哪个微调生成模型text/14-fm.txt:477(搜「人工标注者选择」)
训练目标与三个阶段微调生成模型text/14-fm.txt:491(搜「被接受的生成结果比被拒绝的生成结果获得更高的分数」) · text/14-fm.txt:495(搜「三个阶段」)
两个奖励模型微调生成模型text/14-fm.txt:505(搜「有用性」)
PPO 与它的缺点微调生成模型text/14-fm.txt:509(搜「近端策略优化」) · text/14-fm.txt:513(搜「至少训练两个模型」)
DPO 的做法微调生成模型text/14-fm.txt:515(搜「直接偏好优化」) · text/14-fm.txt:521(搜「对数概率」) · text/14-fm.txt:525(搜「更稳定且更准确」)
监督微调 + DPO 的代价与 ORPO微调生成模型text/14-fm.txt:683(搜「两个训练循环」) · text/14-fm.txt:685(搜「ORPO」)
偏好数据部分由另一个模型生成微调生成模型text/14-fm.txt:535(搜「部分由 ChatGPT 生成」)
合并两个瘦条微调生成模型text/14-fm.txt:312(搜「重新加载模型,以合并权重」) · text/14-fm.txt:664(搜「迭代地将适配器与基础模型合并」)
评估是重大挑战、没有金标准微调生成模型text/14-fm.txt:341(搜「重大挑战」) · text/14-fm.txt:345(搜「缺乏黄金标准」)
词级指标与困惑度微调生成模型text/14-fm.txt:349(搜「困惑度」) · text/14-fm.txt:351(搜「不应该感到」) · text/14-fm.txt:357(搜「甚至正确性」)
六套公开考卷微调生成模型text/14-fm.txt:361(搜「MMLU」) · text/14-fm.txt:363(搜「HumanEval」) · text/14-fm.txt:370(搜「57 个不同任务」)
考卷的三条毛病微调生成模型text/14-fm.txt:393(搜「过拟合这些基准」)
排行榜与它的风险微调生成模型text/14-fm.txt:399(搜「对排行榜过拟合」)
让模型当裁判微调生成模型text/14-fm.txt:405(搜「LLM-as-a-judge」) · text/14-fm.txt:407(搜「与领域共同发展」)
人评、对战平台、80 万投票微调生成模型text/14-fm.txt:411(搜「但黄金标准的评估通常被认为是人类评估」) · text/14-fm.txt:413(搜「Chatbot Arena」) · text/14-fm.txt:415(搜「80 万张人工投票」)
按用例评、你自己最会评微调生成模型text/14-fm.txt:419(搜「根据预期的用例」) · text/14-fm.txt:421(搜「母语提问」)
古德哈特定律与那个语法例子微调生成模型text/14-fm.txt:425(搜「古德哈特定律」) · text/14-fm.txt:427(搜「这是一个句子」)

Footnotes

  1. 出处:「微调生成模型」第 41 段(text/14-fm.txt:41,搜「生成新的问题」)。原文:基础模型「不会遵循指令,而是尝试预测下一个词。它甚至可能生成新的问题」。 2

  2. 出处:「微调生成模型」第 19 段(text/14-fm.txt:19,搜「而不是列出其他指令」)。

  3. 出处:「微调生成模型」第 336 段(text/14-fm.txt:336,搜「Large Language Models (LLMs) are artificial intelligence」)与第 337 段(text/14-fm.txt:337,搜「紧密地遵循我们的指令」)。 2

  4. 出处:「微调生成模型」第 15 段(text/14-fm.txt:15,搜「较难直接使用」)。书还列了这一步产物的几个同义叫法:基础模型、预训练模型、基石模型。

  5. 出处:「微调生成模型」第 25 段(text/14-fm.txt:25,搜「SFT 也可用于其他任务」)。

  6. 出处:「微调生成模型」第 47 段(text/14-fm.txt:47,搜「最常见的微调过程是全微调」)。

  7. 出处:「微调生成模型」第 59 段(text/14-fm.txt:59,搜「需要大量的存储空间」)。

  8. 出处:「微调生成模型」第 59 段(text/14-fm.txt:59,搜「研究者们将注意力转向了参数高效微调」)。

  9. 出处:「微调生成模型」第 63 段(text/14-fm.txt:63,搜「适配器是许多基于 PEFT 技术的核心组件」)。书说这些小模块被放在注意力层和前馈层之后,而且模型的每一块里都有一份。

  10. 出处:「微调生成模型」第 65 段(text/14-fm.txt:65,搜「3.6%」)。书引的是那篇提出这类做法的原论文。 2

  11. 出处:「微调生成模型」第 73 段(text/14-fm.txt:73,搜「适配器1可以专门处理医学文本分类」)。

  12. 出处:「微调生成模型」第 77 段(text/14-fm.txt:77,搜「许多早期的适配器」)。

  13. 出处:「微调生成模型」第 81 段(text/14-fm.txt:81,搜「低秩适配(LoRA)被提出」)。原文说它「在撰写本文时是一种广泛使用且有效的」这类技术。

  14. 出处:「微调生成模型」第 85 段(text/14-fm.txt:85,搜「10×10 矩阵」)与第 89 段(text/14-fm.txt:89,搜「20 个权重」)。

  15. 出处:「微调生成模型」第 99 段(text/14-fm.txt:99,搜「12,288」)。书算的是:96 块处理块,每块一个 12,288×12,288 的方阵;按秩 8 近似,每块约 19.7 万个数。原书这里写的瘦条尺寸是「12,288×2」,和它自己说的秩 8 对不上——两个 12,288×2 只有约 4.9 万个数,而 19.7 万对应的是 12,288×8。以数为准:19.7 万是按秩 8 算出来的。 2

  16. 出处:「微调生成模型」第 250 段(text/14-fm.txt:250,搜「4 到 64 之间」)。同一段还解释了另一个设定:它控制「加到原始权重上的变化量」有多大,经验做法是取秩的两倍。

  17. 出处:「微调生成模型」第 99 段(text/14-fm.txt:99,搜「非常低的内在维度」)。书引的是《Intrinsic dimensionality explains the effectiveness of language model fine-tuning》。 2

  18. 出处:「微调生成模型」第 93 段(text/14-fm.txt:93,搜「与完整(冻结的)权重相结合」)。

  19. 出处:「微调生成模型」第 101 段(text/14-fm.txt:101,搜「Query 和 Value」)。

  20. 出处:「微调生成模型」第 250 段(text/14-fm.txt:250,搜「target_modules控制要针对哪些层」)。原文:「可以加快训练速度,但会降低性能,反之亦然。」

  21. 出处:「微调生成模型」第 105 段(text/14-fm.txt:105,搜「float64 或 float32」)与第 107 段(text/14-fm.txt:107,搜「float 32 位和 float 16 位」)。

  22. 出处:「高级文本生成技术与工具」第 29 段(text/09-fm.txt:29,搜「14:16」)。这个比方出现在原书讲量化模型加载的那一章,不在微调这一章,但它是全书对量化最好懂的解释。

  23. 出处:「微调生成模型」第 115 段(text/14-fm.txt:115,搜「分块量化」)。

  24. 出处:「微调生成模型」第 119 段(text/14-fm.txt:119,搜「正态分布」)。原文还指出这样「也减少了异常值的问题」。

  25. 出处:「微调生成模型」第 123 段(text/14-fm.txt:123,搜「4 位归一化浮点表示」)。书还提到另外两个进一步的优化手段,但没有展开(第 125 段,text/14-fm.txt:125,搜「双量化」)。

  26. 出处:「微调生成模型」第 226 段(text/14-fm.txt:226,搜「约 1 GB VRAM」)。 2

  27. 出处:「高级文本生成技术与工具」第 35 段(text/09-fm.txt:35,搜「至少 4 位量化模型」)。这段在原书里是一条「提示」框,位于讲加载量化模型的那一章。 2

  28. 出处:「微调生成模型」第 431 段(text/14-fm.txt:431,搜「什么是 LLM」)。

  29. 出处:「微调生成模型」第 449 段(text/14-fm.txt:449,搜「奖励模型」)。

  30. 出处:「微调生成模型」第 459 段(text/14-fm.txt:459,搜「质量分类头部」)与第 457 段(text/14-fm.txt:457,搜「输出一个单一的分数」)。

  31. 出处:「微调生成模型」第 473 段(text/14-fm.txt:473,搜「并不总是一个好的生成结果」)。 2

  32. 出处:「微调生成模型」第 477 段(text/14-fm.txt:477,搜「人工标注者选择」)。

  33. 出处:「微调生成模型」第 491 段(text/14-fm.txt:491,搜「被接受的生成结果比被拒绝的生成结果获得更高的分数」)。

  34. 出处:「微调生成模型」第 495 段(text/14-fm.txt:495,搜「三个阶段」)。

  35. 出处:「微调生成模型」第 505 段(text/14-fm.txt:505,搜「有用性」)。

  36. 出处:「微调生成模型」第 509 段(text/14-fm.txt:509,搜「近端策略优化」)。

  37. 出处:「微调生成模型」第 513 段(text/14-fm.txt:513,搜「至少训练两个模型」)。

  38. 出处:「微调生成模型」第 515 段(text/14-fm.txt:515,搜「直接偏好优化」)。

  39. 出处:「微调生成模型」第 521 段(text/14-fm.txt:521,搜「对数概率」)。

  40. 出处:「微调生成模型」第 525 段(text/14-fm.txt:525,搜「更稳定且更准确」)。原文的措辞是「与 PPO 相比,作者发现……」——是转述,不是书自己的对照实验。 2

  41. 出处:「微调生成模型」第 685 段(text/14-fm.txt:685,搜「ORPO」)。

  42. 出处:「微调生成模型」第 683 段(text/14-fm.txt:683,搜「两个训练循环」)。

  43. 出处:「微调生成模型」第 279 段(text/14-fm.txt:279,搜「num_train_epochs训练的总轮数」)。

  44. 出处:「微调生成模型」第 279 段(text/14-fm.txt:279,搜「较高的学习率效果更好」)。

  45. 出处:「微调生成模型」第 279 段(text/14-fm.txt:279,搜「lr_scheduler_type基于余弦的调度器」)。书用的是一种基于余弦曲线的调度:先线性升到设定值,之后按余弦函数衰减。

  46. 出处:「微调生成模型」第 620 段(text/14-fm.txt:620,搜「warmup_ratio」)。原文:「通过在开始时保持较小的学习率(即预热期),我们允许模型在应用更大的学习率之前适应数据,从而避免有害的发散。」

  47. 出处:「微调生成模型」第 279 段(text/14-fm.txt:279,搜「没有固定的准则」)。 2

  48. 出处:「微调生成模型」第 283 段(text/14-fm.txt:283,搜「特定的 SQL 代码」)。这段在原书里是一条「注意」框。

  49. 出处:「微调生成模型」第 341 段(text/14-fm.txt:341,搜「重大挑战」)与第 345 段(text/14-fm.txt:345,搜「缺乏黄金标准」)。 2

  50. 出处:「微调生成模型」第 341 段(text/14-fm.txt:341,搜「并不能保证成功解决编程问题」)。

  51. 出处:「微调生成模型」第 343 段(text/14-fm.txt:343,搜「不一定能生成一致的输出」)。

  52. 出处:「微调生成模型」第 349 段(text/14-fm.txt:349,搜「困惑度」)与第 351 段(text/14-fm.txt:351,搜「不应该感到」)。书列的另外三种分别是 ROUGE、BLEU 和 BERTScore,都属于「拿生成结果和参考答案比词的重合度」这一类。

  53. 出处:「微调生成模型」第 357 段(text/14-fm.txt:357,搜「甚至正确性」)。

  54. 出处:「微调生成模型」第 370 段(text/14-fm.txt:370,搜「57 个不同任务」)起的表 12-1,六行分别见第 369、373、377、381、385、389 段(text/14-fm.txt:390,搜「164个编程问题」)。

  55. 出处:「微调生成模型」第 393 段(text/14-fm.txt:393,搜「过拟合这些基准」)。

  56. 出处:「微调生成模型」第 399 段(text/14-fm.txt:399,搜「对排行榜过拟合」)。

  57. 出处:「微调生成模型」第 405 段(text/14-fm.txt:405,搜「LLM-as-a-judge」)。

  58. 出处:「微调生成模型」第 407 段(text/14-fm.txt:407,搜「与领域共同发展」)。

  59. 出处:「微调生成模型」第 411 段(text/14-fm.txt:411,搜「但黄金标准的评估通常被认为是人类评估」)。

  60. 出处:「微调生成模型」第 413 段(text/14-fm.txt:413,搜「Chatbot Arena」)、第 415 段(text/14-fm.txt:415,搜「80 万张人工投票」)与第 417 段(text/14-fm.txt:417,搜「聚合意见」)。书说排名用的是国际象棋里那套等级分制度。 2

  61. 出处:「微调生成模型」第 419 段(text/14-fm.txt:419,搜「根据预期的用例」)与第 421 段(text/14-fm.txt:421,搜「母语提问」)。 2

  62. 出处:「微调生成模型」第 425 段(text/14-fm.txt:425,搜「古德哈特定律」)。

  63. 出处:「微调生成模型」第 427 段(text/14-fm.txt:427,搜「这是一个句子」)。

  64. 出处:「微调生成模型」第 535 段(text/14-fm.txt:535,搜「部分由 ChatGPT 生成」)。

  65. 出处:「微调生成模型」第 312 段(text/14-fm.txt:312,搜「重新加载模型,以合并权重」)与第 664 段(text/14-fm.txt:664,搜「迭代地将适配器与基础模型合并」)。