拆解大模型四:ChatGPT 不是"训练出来的",是"驯化出来的"
很多人以为大模型的训练就是:
喂数据 → 模型变聪明 → 完成。
这个理解只对了三分之一。
真实的训练过程分三个完全不同的阶段,目标、数据、方法全不一样。理解这三个阶段,你才能明白为什么 GPT-3 和 ChatGPT 用的是同一个架构,但一个像"文字接龙机器",另一个像"真正的助手"。
一、预训练:造一个"什么都见过"的大脑
第一阶段叫预训练(Pre-training) 。
目标只有一个:在海量文本上,学会预测下一个 Token。
训练数据是从互联网上爬下来的文本,规模大到难以想象——Common Crawl、Wikipedia、GitHub、书籍……GPT-3 的训练数据大约 3000 亿 Token,LLaMA-3 用了 15 万亿 Token。
训练过程:把一段文本切成 Token 序列,遮住最后一个,让模型猜,猜错了就调整参数,反复迭代。
# 预训练的核心损失函数
logits = model(input_ids) # (B, T, vocab_size)
loss = F.cross_entropy(
logits[:, :-1].reshape(-1, vocab_size),
input_ids[:, 1:].reshape(-1) # 目标是下一个 Token
)
这一步结束后,模型学会了语言的统计规律,积累了大量世界知识。但它只会"续写",不会"对话"。
你问它"法国的首都是哪里?",它可能会续写成:
法国的首都是哪里?这是一道地理题,答案是……
法国的首都是哪里?很多人不知道……
法国的首都是哪里?巴黎当然是……
它不知道你是在问问题,它只是在做文字接龙。
二、SFT:教模型"怎么回答问题"
第二阶段叫 SFT(Supervised Fine-Tuning,有监督微调) 。
目标:让模型学会"问答"这种格式,而不是无脑续写。
做法:收集一批高质量的"问题-回答"对,让人工标注员写出理想的回答,然后在这些数据上继续训练模型。
[问题] 法国的首都是哪里?
[回答] 法国的首都是巴黎。
训练方式跟预训练一样,还是预测下一个 Token,但数据换成了这种有明确格式的对话。
数据量远比预训练小——OpenAI 做 InstructGPT 时只用了大约 1.3 万条标注数据,但效果显著。原因是:模型在预训练阶段已经积累了大量知识,SFT 只是在教它"用什么格式输出"。
这一步结束后,模型知道如何回答问题了。但还有个问题没解决:
它只知道怎么"看起来像回答",不知道什么叫"好的回答"。
三、RLHF:用人类偏好来"驯化"模型
这是最关键、也最容易被讲烂的一步——RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习) 。
分两个子步骤。
3.1 训练一个 Reward Model
首先要解决一个问题:怎么让计算机知道哪个回答"更好"?
办法是训练一个 Reward Model(奖励模型) 。
具体做法:对同一个问题,让 SFT 模型生成多个不同的回答,然后让人工标注员对这些回答排序("A 比 B 好,B 比 C 好")。用这些排序数据训练一个模型,让它学会给任意一个回答打分。
问题:帮我写一首关于秋天的诗
回答 A:秋风吹落叶,天高云淡…… → 人工评分:好
回答 B:秋天是一个季节,特点是…… → 人工评分:差
Reward Model 训练好之后,就变成了一个自动化的"人类偏好评分器"——给它任意一个(问题,回答)对,它能输出一个分数。
3.2 用 PPO 优化语言模型
有了 Reward Model,就可以用强化学习来优化语言模型了。
算法用的是 PPO(Proximal Policy Optimization) 。直觉上很简单:
- 语言模型是"策略"(Policy):给定问题,输出回答
- Reward Model 是"环境":给回答打分
- 目标:调整语言模型的参数,让它生成的回答得分越来越高
模型生成回答
↓
Reward Model 打分
↓
PPO 根据分数调整模型参数
↓
循环
但这里有个关键细节:训练时会同时惩罚模型"跑偏太远"——如果模型为了拿高分开始生成奇怪的文本,会有一个 KL 散度惩罚把它拉回来,防止它钻 Reward Model 的空子。
# PPO 的目标函数(简化版)
reward = reward_model(question, response)
kl_penalty = kl_divergence(policy, reference_policy) # 防止跑偏太远
loss = -(reward - beta * kl_penalty) # beta 控制惩罚力度
这个过程就是"驯化"——模型不只是在学格式,而是在学"什么样的输出让人满意"。
四、三个阶段的对比
| 预训练 | SFT | RLHF | |
|---|---|---|---|
| 目标 | 学会语言 | 学会格式 | 学会讨好人类 |
| 数据 | 数万亿 Token | 数万条标注对话 | 数万条人工排序 |
| 方法 | 下一个 Token 预测 | 下一个 Token 预测 | 强化学习(PPO) |
| 计算量 | 极大 | 小 | 中等 |
| 产出 | Base Model | Instruct Model | Chat Model |
一个有趣的认知:预训练花了 99% 的算力,RLHF 只花了不到 1%,但 RLHF 决定了用户的直接体验。
GPT-3(Base Model)和 ChatGPT 架构几乎一样,差距主要来自 SFT 和 RLHF。
五、RLHF 之后的演进:DPO
RLHF 有个明显的缺点:流程复杂,需要单独训练 Reward Model,PPO 训练也不稳定。
2023 年有人提出了 DPO(Direct Preference Optimization) ,把 Reward Model 和强化学习这两步合并成一个简单的分类损失:
直接告诉模型"这个回答比那个好",模型自己调整参数,不需要显式的 Reward Model。
# DPO 损失(简化)
# chosen: 偏好回答, rejected: 不偏好回答
loss = -log_sigmoid(
beta * (log_prob(chosen) - log_prob(rejected))
)
效果跟 RLHF 相当,但简单得多。现在很多开源模型的对齐训练都在用 DPO。
小结
大模型的训练不是一步,是三步:
预训练:在海量数据上学语言规律,产出 Base Model,只会续写,不会对话。
SFT:在少量标注数据上学对话格式,产出 Instruct Model,知道怎么回答问题。
RLHF:用人类偏好数据做强化学习,产出 Chat Model,知道什么叫"好的回答"。
颠覆一下认知:你每天用的 ChatGPT,它的"聪明"来自预训练,它的"好用"来自 RLHF——而 RLHF 用的算力,还不到整个训练的 1%。
下一篇,我们聊推理阶段:
模型训练好之后,生成一个 Token 到底发生了什么?KV Cache 为什么能让推理快几十倍?我带大家手撕KV cache!