Chapter 01

全景与核心词汇

起点页给了一张流水线地图。这一章把地图坐实:拆开三个阶段、认清它们共用的同一台"学习机器"、并把全书的核心分界——能力 vs 对齐——立起来。后面三章是这张地图上的三段放大。

本章你将建立的 schema

  • 一个对话模型的"出厂流程"分三段:预训练 → SFT → 偏好优化,各改变什么
  • 三段共用同一台机器:把文本切成 token,预测下一个,用交叉熵算错得多离谱,再用梯度往回修
  • 贯穿全书的分界:能力(预训练给)vs 对齐(后训练给),以及这条线 2025 年后为何开始模糊

1.1一封邮件的来历:三个阶段

对着一个对话模型输入"帮我给房东写封催修水管的邮件,语气客气但坚定",它几秒钟就给你一封像模像样的邮件。这个能力不是一次训练出来的,而是三个性质完全不同的阶段叠出来的。倒过来看,每一阶段贡献了这封邮件的不同侧面:

  • 它认识"水管""房东""催修"这些词,知道一封邮件长什么样、客气的中文怎么说——这些来自预训练:模型把几乎整个互联网的文本压进了参数里,语言、常识、格式都在这一步成形。
  • 它听懂了"帮我写"是一条要执行的指令,而不是一段要续写的文本——这来自 SFT(监督微调):有人给它看了大量"指令 → 理想回答"的范例,它学会了"看到请求就给回应"这种对话姿态。
  • 它没有写得啰嗦冗长、没有夹带攻击性、在"客气但坚定"之间拿捏得当——这来自偏好优化(RLHF / DPO 等):人类对"哪个回答更好"做了大量比较,模型被推着往人更喜欢的那种风格走。

三个阶段,三种数据,三个不同的训练目标。把它们当成同一件事("训练让模型变好")是初学者最大的误区,也是后面所有困惑的来源。先把这张顺序图刻进脑子:

① 预训练 数据:海量无标注文本 ② SFT 监督微调 数据:指令→理想回答 ③ 偏好优化 数据:人类偏好比较 产出:基座模型 有能力,但只会"续写" 产出:指令模型 会听话,但风格未调 产出:对齐模型 有用·无害·风格好 三段共用同一台机器(§1.2),但目标和数据各不相同
图 1.1同一条流水线,这次标注每段的数据和产出。 注意:数据形态一段比一段贵、一段比一段少——无标注文本几乎免费且海量,偏好比较要人逐条标注,所以越往右数据量越小、越精。这个"量递减、精递增"的梯度,解释了后面很多设计。
洞察 · 为什么必须分三段

能不能一步到位,直接拿"指令→好回答"的数据从头训练?理论上可以,现实中行不通:高质量标注数据只有百万量级,而模型要先掌握语言和常识,需要的是万亿量级的文本。用昂贵的小数据学不出能力,用免费的大数据学不出对齐——分段,本质是让每种数据各司其职。

1.2同一台机器:预测下一个 token

三个阶段表面各异,底层是同一台机器:把文本切成 token,让模型预测下一个,用交叉熵衡量预测错得多离谱,再用梯度把参数往"少错一点"的方向推。

为什么先讲这个

如果不先认清这台共用的机器,你会把预训练、SFT、RLHF 当成三种互不相干的黑魔法。认清之后,三章的区别会收敛成一句话:"它们只是在同一台机器上换了不同的 loss 和数据。"

四个零件

Token:模型不直接看字符,先把文本切成 token(子词单元)。"水管"通常是 1 个 token,"catastrophic" 会被切成 cata + strophic 两个。一个模型的词表通常有 5 万–15 万个 token,每个 token 对应词表里的一个编号。

预测下一个 token:给定前面的 token 序列,模型输出一个覆盖整个词表的概率分布——"下一个 token 是 的 的概率 0.31,是 和 的概率 0.08……"。这就是它做的唯一一件事。生成一段话,就是反复"预测下一个、采样、接上、再预测"。

交叉熵 loss:训练时,正确的下一个 token 是已知的。交叉熵 loss 就是 −log P(正确 token):模型给正确 token 的概率越高,loss 越小;如果它给正确 token 只分了 0.01 的概率,loss = −log(0.01) ≈ 4.6,很大,说明错得离谱。

梯度下降:loss 对每个参数求偏导,得到"把这个参数往哪调能让 loss 变小"的方向,再走一小步。几万亿 token 看下来,参数被推到一个能很好预测文本的状态——而"能很好预测文本"这件事,逼着模型内部长出了语法、事实、甚至推理的结构。

洞察 · 为什么"预测下一个词"足以涌现出能力

要在海量真实文本上把"下一个 token"预测准,模型被迫学会的远不止接词。要续写"法国的首都是____",它得存下事实;要续写"已知 x+3=7,则 x=____",它得会算;要续写一段对话,它得建出人物的意图模型。预测下一个 token 是个幌子,背后是"把世界压缩进参数"——压缩得越好,预测越准,loss 越低。这就是为什么一个看似无聊的目标能长出推理能力。

想一想

训练文本里有一句"巴黎是法国的首都"。模型在"巴黎是法国的"之后,对正确 token 首都 给出概率 0.6。这一步的交叉熵 loss 约是多少?如果它给的是 0.6 但正确答案其实是别的词,梯度会把"首都"的概率往上推还是往下压?

展开答案(先停 10 秒再点)

loss = −log(0.6) ≈ 0.51。这是个不算大的 loss——模型已经比较确信了。

梯度永远朝"让实际正确的那个 token 概率更高"的方向推。如果正确答案是"首都",就把"首都"往上推、其余往下压;如果语料里正确答案其实是别的词,那就把那个别的词往上推、"首都"往下压。模型不在乎"事实对不对",只在乎"语料里下一个 token 是什么"——这一点在第 3 章会变成"教模型幻觉"的根源。

1.3能力 vs 对齐:全书的分界线

这是整份教程最该先立住的一条分界。跨过它,后面所有内容会各就各位;跨不过,你会反复在"微调能不能加知识""RLHF 是不是让模型变聪明"这类问题上栽跟头。

能力(知识、推理、语言)几乎全部在预训练阶段灌进参数;后训练几乎不再增加能力,只是把已有的能力对齐成人类想要的行为(听话、有用、无害、风格好)。

一个刚预训练完的基座模型,其实"什么都会",但你没法好好用它。给它输入"法国的首都是哪里?",它往往不回答你,反而续写出"法国的首都是哪里?这是一道常见的地理题。德国的首都又是哪里?……"——因为在它见过的网页里,一个问句后面接的往往是更多问句,而不是答案。它知道巴黎(能力在),但不知道你想要它回答(行为没对齐)。

SFT 和偏好优化做的,就是把这个"什么都会但不好好说话"的模型,调成"好好回答、好好做事"。关键在于:它们动的是行为,几乎不动知识。这条不对称,是图 1.2 要让你一眼记住的:

能力 知识·推理 预训练贡献(约 90%+) 后训练 行为 格式·价值观 预训练 后训练贡献(约 90%+) 2025+ 推理 RL(RLVR) 正在撬动「能力」条里这一小段——这是第 4 章的争论焦点
图 1.2同一个模型的两种"内容",分别由哪个阶段填充。 注意:两条进度条几乎是镜像的——能力这条预训练占满,行为这条后训练占满。教程里 90% 的困惑,都来自把这两条进度条混为一谈。红色小段(能力·后训练)就是 2025 年推理 RL 正在松动的地方。
常见误解

"公司有很多内部文档,微调一下模型就能让它学会这些知识。"——这句话把"行为条"的工具用在了"能力条"的目标上。后训练这点数据量根本灌不动预训练占满的知识条;强行用它灌新知识,多半的结果是模型学会了"自信地编"(第 3 章详述)。要灌事实,用 RAG(检索);要调行为,才用微调。

1.4三种存档点:base / instruct / reasoning

流水线上每跑完一段,就存一个模型存档点。你在 Hugging Face 上看到同一个模型名后面跟着 -base / -instruct / 或带"思考"标记,指的就是它停在了哪一段。对同一个 prompt,三种存档点的反应截然不同:

表 1.1 · 三种存档点对 "9.11 和 9.9 哪个大?" 的典型反应
存档点停在哪一段典型反应怎么来的
Base 基座模型 预训练后 续写而非回答:倾向于续接"?这是一个有趣的数学问题。9.12 和 9.10 哪个大?" 只学了预测下一个 token
Instruct 指令模型 + SFT(+ 偏好优化) 直接回答,但常答错:"9.9 更大"或"9.11 更大"全凭直觉,不展开 额外学了"听指令、好好说话"
Reasoning 推理模型 + 可验证奖励 RL 先在"草稿"里逐位比较小数 0.11 vs 0.90,自行纠错,再给"9.9 更大" 额外用 RLVR 训出长链思考(第 4 章)

这三个名字会贯穿全书。一句话记忆:base 有能力但不听话,instruct 听话但不一定深思,reasoning 会先想再答。注意 reasoning 模型是 2024 年底才规模化的新存档点——它的存在本身,就是图 1.2 那条红色小段被撬动的证据。

1.5反复出现的动作:把目标变成 loss

本章开头说三段共用同一台机器。那台机器只会做一件事:最小化一个 loss。所以每个阶段真正的设计难题,是把这个阶段"想要的东西"翻译成一个能求导的 loss。这恰恰是难点所在——"预测准下一个词"很容易写成 loss,但"回答得有用、无害"压根不是一个能直接求导的函数。

下面这张表是后面三章的总地图。现在表里的名词(KL、奖励模型、价值网络)你还不认识,没关系——把它当成一张"待填的地图",每读完一章回来看一眼,就会多懂一行。读全书时,反复问自己:这个阶段在最小化哪个 loss?信号从哪来?

表 1.2 · 全书地图:每个阶段把"想要的"翻译成哪个 loss
阶段优化的 loss(直觉)训练信号从哪来几个模型在显存里
预训练(第 2 章) 交叉熵:−log P(下一个 token) 文本自身(自监督,无需标注) 1
SFT(第 3 章) 同样的交叉熵,但只在"回答"部分计算 人写或合成的"指令→回答" 1
RLHF / PPO(第 4 章) 最大化 奖励 − β·KL(别跑太远) 用偏好数据训出的奖励模型打分 4(策略/参考/奖励/价值)
DPO(第 4 章) 偏好对上的逻辑回归 loss 偏好数据,直接用,不训奖励模型 2(策略/参考)
RLVR / GRPO(第 4 章) 最大化 可验证奖励(答案对/错) 确定性验证器(数学答案、代码测试) 2–3(无价值网络)

看这张表的"几个模型在显存里"一列:从预训练的 1 个,到 RLHF 的 4 个,再被 DPO 和 GRPO 砍回 2–3 个——后训练这十年的算法演进,很大一部分就是在和这个数字较劲。读完第 4 章,你能讲清每一个数字为什么是它。

§本章 self-check

先合上下面的答案,把你能想到的写在纸上或编辑器里。写完再点开对照——直接点开等于把这一节当再读一遍。

  1. 一个基座模型"知道"巴黎是法国首都,为什么直接问它"法国首都是哪?"它却往往不回答、反而续写更多问句?
  2. 用一句话说出预训练和 SFT 在训练机器上的唯一区别(提示:不是数据,是 loss 在哪里算)。
  3. 交叉熵 loss −log P(正确 token):当模型给正确 token 的概率从 0.9 掉到 0.1,loss 大约从多少变到多少?这说明 loss 对"很自信却错了"惩罚是轻还是重?
  4. "在公司文档上微调模型来让它掌握这些知识"这个计划,错在把哪条进度条的工具用在了哪条进度条的目标上?正确做法的方向是什么?
答案(先做完再展开)
  1. 因为基座模型只学过"预测下一个 token"。在它见过的网页里,一个问句后面接的常常是更多问句或题目解析,而不是直接答案。它有知识(能力),但没学过"被提问时应当回答"这种行为(对齐)。回答这个行为是 SFT 教的。
  2. 预训练在所有 token 上计算交叉熵 loss;SFT 用同样的交叉熵,但只在"回答"部分的 token 上计算(指令部分的 token 被掩码、不算 loss)。机器没变,只是 loss 算在不同位置——细节见第 3 章。
  3. loss 从 −log(0.9)≈0.105 变到 −log(0.1)≈2.303,涨了约 22 倍。−log 在概率趋近 0 时急剧增大,所以"很自信却把正确答案的概率压得很低"会被重罚。这正是模型有动力别太离谱的原因。
  4. 把"行为条"的工具(微调)用在了"能力条"的目标(灌知识)上。后训练的数据量灌不动预训练占满的知识条,还容易训出"自信地编"。要加可更新、可溯源的事实,方向是 RAG(检索增强);微调留给调行为/格式/风格。
进阶挑战 · 刚好够不着

如果只能保留一个阶段

假设算力被砍到只够做一个训练阶段,但你必须交付一个"能直接回答用户问题"的模型。你会保留预训练,还是保留 SFT?两个选择各自会得到一个什么样的残废模型?这道题没有标准答案,但想清楚它,你就真正理解了"能力"和"对齐"哪个是地基、哪个是装修。

提示(卡住再展开)

问自己:跳过预训练直接 SFT,模型连语言都没学会,再多"指令→回答"范例能教会它什么?反过来,只预训练不 SFT,模型有满脑子知识却不肯好好回答——但你能不能用 prompt 技巧(比如给它几个"问→答"的例子让它续写)骗它进入回答模式?这就指向了地基与装修的区别。