有了 Transformer 架构(理解注意力机制),有了 prompt 技巧(知道怎么用模型),中间还有一大块空白——大模型是怎么训练出来的?
这篇文章从预训练到 RLHF 完整梳理一次,让你对 GPT 类模型的训练过程有个全景认识。
训练的三个阶段
大模型的训练不是一步到位的,而是分三个阶段:
阶段一:预训练(Pre-Training)
原料:海量互联网文本(TB 级)
目标:预测下一个词
产物:Base Model(基础模型)
特点:知识广但不听话
阶段二:监督微调(SFT)
原料:人工标注的指令-回答对
目标:学会跟随指令
产物:Instruct Model(指令模型)
特点:会聊天了,但还有潜力
阶段三:对齐(RLHF/DPO)
原料:偏好标注(哪个回答更好)
目标:对齐人类价值观
产物:Chat Model(对话模型)
特点:更安全、更友好
每个阶段解决不同的问题,缺一不可。
阶段一:预训练
训练目标
预训练的目标很简单——预测下一个词。给定一串 token,让模型预测下一个最可能出现的 token。
输入:"今天天气真"
目标输出:"好"
输入:"巴黎是法国的"
目标输出:"首都"
这个任务看似简单,但它迫使模型学习语言的统计规律、语法结构、事实知识,甚至推理能力。当一个模型见过 10 万亿个 token 后,它会隐式地学到大量知识。
训练数据
预训练数据决定了模型的知识上限。一般来源:
CommonCrawl 网页数据 ~60% ─ 主干数据,量大但噪声多
书籍/论文 ~15% ─ 高质量长文本
代码仓库 ~15% ─ 代码理解和生成能力
百科/知识库 ~5% ─ 事实性知识
社交媒体/论坛 ~5% ─ 对话风格
数据清洗是关键差异。同样是 CommonCrawl,怎么去重、怎么过滤低质量内容、怎么平衡语种——这些工程决策对模型质量的影响不亚于模型架构本身。
我举一个例子:重复数据。如果训练集中有大量重复的文本(比如同一篇新闻被多个网站转载),模型会"背"下这些内容,而不是学习泛化规律。好的去重可以去掉 30-50% 的冗余数据。
另一个例子:数据配比。代码数据只占 15%,但它对模型推理能力的提升远超它的占比。DeepSeek 论文显示,在训练中混入代码数据能显著提升数学和逻辑推理能力。所以现在的趋势是有意提高代码数据的比例。
训练过程
预训练是一次性的、大规模的、极其昂贵的计算过程。
以 Llama 3.1 8B 为例:
训练数据:15T tokens
GPU 数量:约 2000 张 H100
训练时间:约 30 天
电力成本:约 300 万美元
以 Llama 3.1 405B 为例:
训练数据:15T tokens
GPU 数量:约 16000 张 H100
训练时间:约 55 天
电力成本:约 6000 万美元
预训练中最重要的超参数是 学习率调度。一般来说,先用 warmup 逐步提高学习率,再用 cosine decay 逐步降低。
学习率
↑
│ ┌─────────┐
│ ┌┘ └┐
│ ┌┘ └┐
│ ┌┘ └┐
│ ┌┘ └┐
│ ┌┘ └──
└───┴────────────────────────→ 训练步数
warmup cosine decay
学习率太大会导致训练不稳定(loss 发散),太大会导致收敛慢。实践中常用的峰值学习率在 1e-4 到 3e-4 之间(取决于模型大小和 batch size)。
Scaling Law
Scaling Law 是大模型领域最重要的经验规律。它告诉我们:模型性能与模型大小、数据量、计算量之间的幂律关系。
模型性能 ∝ (模型参数 × 训练数据量) ^ α
这意味着:要想持续提升模型能力,需要同时扩大模型和数据。单独增加参数而不增加数据,模型会过拟合;单独增加数据而不增加参数,收益会递减。
一个实用的结论:给定计算预算,最优的模型大小和训练 token 数的比例大约为 1:20——即一个 7B 模型应该训练约 140B tokens,一个 70B 模型应该训练约 1.4T tokens。
阶段二:监督微调(SFT)
预训练产出的 Base Model 就像一个知识渊博但不怎么会交流的人——它能续写文本,但不会"回答问题"。SFT 的目的就是教会它对话。
数据格式
SFT 数据是 (指令, 回答) 对:
{
"instruction": "请解释什么是量子纠缠",
"output": "量子纠缠是量子力学中的一种现象……"
}
SFT 的要点
1. 质量 > 数量
几千条高质量的 SFT 数据,效果可能好于几万条低质量数据。关键不是让模型看到更多,而是让模型看到好的。
什么样的 SFT 数据是高质量的?
- 回答正确、完整
- 有推理过程(如果有需要)
- 格式符合预期
- 没有有害内容
2. 覆盖场景
SFT 数据需要覆盖模型在实际应用中会遇到的各种场景:
对话 — 闲聊、开放式问答
指令执行 — 翻译、摘要、改写
推理 — 数学、逻辑、代码
角色扮演 — 客服、教练、顾问
拒绝回答 — 有害内容、未知问题
特别要注意的是拒绝回答的数据。如果没有"我不知道"的训练数据,模型在面对不知道的问题时会强行编造答案(幻觉)。加上这些数据后,模型学会说"这个问题我无法回答"。
3. 过拟合问题
SFT 阶段非常容易过拟合——模型可能死记硬背训练数据,而不是学习通用的对话能力。监控方法:在训练集和验证集上分别计算 loss,如果验证集 loss 开始上升而训练集 loss 还在下降,就是过拟合的信号。
实际的 SFT 只需要训练 1-3 个 epoch。超过 3 个 epoch 后,模型开始记住具体数据,而不是泛化。
阶段三:RLHF(基于人类反馈的强化学习)
SFT 之后,模型已经能回答问题了,但还有两个问题:
- 答案不够"讨喜"——技术上正确但表达生硬
- 不安全——可能输出有害内容
RLHF 解决的就是这两个问题。它是最复杂的阶段,也是最容易被忽视的阶段。
三个子步骤
第一步:训练 Reward Model
人工标注:对于同一个 prompt,对比两个回答哪个更好
训练一个独立的模型来预测"人类偏好打分"
第二步:用 RL 优化策略
把 SFT 模型作为初始策略
RL 的目标:生成回答 → Reward Model 打分 → 最大化分数
同时加上 KL 惩罚,防止模型偏离 SFT 模型太远
第三步:迭代
收集新模型在真实场景中的表现
再次标注偏好数据
更新 Reward Model
重复第二步
Reward Model
Reward Model 本质上是一个二分类器——给定 prompt 和回答,预测人类偏好哪个回答。但它不是一个独立的东西,它的训练质量直接决定了 RLHF 阶段的最终效果。
Reward Model 的训练数据是比较对:
Prompt: "解释一下为什么天空是蓝色的"
回答 A: "因为蓝光波长比红光短……" ← 人类偏好
回答 B: "天空是蓝色的因为它是蓝色的" ← 人类不偏好
理想情况下,Reward Model 应该学会:事实性、完整性、安全性、有帮助性——所有这些人类关心的维度。实际上,Reward Model 经常会"找捷径"——比如偏好更长的回答(不管质量如何),或者偏好特定的措辞模式。
PPO 算法
RLHF 最常用的强化学习算法是 PPO(Proximal Policy Optimization)。它的核心逻辑:
1. 用当前策略(模型)生成回答
2. Reward Model 给回答打分
3. 计算策略梯度,更新模型参数
4. 约束:新策略不能离旧策略太远(KL 惩罚)
PPO 需要同时维护四个模型:
Actor(策略模型):正在优化的模型
Reference:SFT 模型(固定),用于计算 KL 散度
Reward Model:给回答打分
Critic(价值模型):评估状态价值
推理时只用 Actor,但训练时四份模型都要在 GPU 上。这就是为什么 RLHF 的计算成本极高。
KL 惩罚项是 PPO 中最关键的超参数:
如果 KL 惩罚太小 → 模型过度优化 Reward Model →
输出可能变得奇怪(Reward Hacking)
如果 KL 惩罚太大 → 模型几乎不更新 →
跟 SFT 模型没区别
DPO:更简单的替代方案
RLHF 的 PPO 实现过于复杂,2023 年出现的 DPO(Direct Preference Optimization)提供了一个更简洁的替代方案。
DPO 的核心洞察:不需要独立的 Reward Model,可以在偏好数据上直接优化策略模型。
PPO 的路径:
SFT 模型 → 训练 Reward Model → PPO 优化
DPO 的路径:
SFT 模型 → 偏好数据直接优化
DPO 的训练更加稳定,计算量大幅减少,而效果在很多场景下与 PPO 相当。不过 PPO 仍然在使用线上数据(模型自己生成的回答)方面有优势,而 DPO 只能使用离线数据。
训练基础设施
这些训练不是在一台机器上完成的,而是在超大规模 GPU 集群上。
并行策略
数据并行(Data Parallelism)
每张卡存一份完整的模型,但分不同的数据
通信需求:梯度同步
适合:小模型(< 7B)
张量并行(Tensor Parallelism)
把一层矩阵切分到多张卡
通信需求:每层前向/反向各一次 All-reduce
适合:大模型(> 7B)
流水线并行(Pipeline Parallelism)
不同层放在不同卡上
通信需求:层间传输激活值
适合:极深模型
实际训练中通常是三种并行一起用。比如 Meta 训练 Llama 3.1 405B 时用了 4D 并行(数据 + 张量 + 流水线 + 序列并行)在 16000 张 H100 上。
混合精度训练
训练时不能所有计算都用 FP32——显存不够,速度也慢。标准的做法是混合精度:
FP32:存储参数的"主副本"(master copy)
BF16/FP16:前向和反向计算
FP32:梯度累积和参数更新
这样既保证数值稳定性(主副本用高精度),又保证训练速度(计算用低精度)。
损失 spike 和处理
预训练中最令人头疼的事情是 loss spike——损失函数突然暴涨,然后可能恢复正常,也可能持续恶化。
loss
↑
│ ╱╲ ← loss spike
│ ╱╲ ╱ ╲ ╱╲
│ ╱ ╲ ╱ ╲╱ ╲
│╱ ╲ ╱ ╲
└──────────────────────→ 步数
处理方法:
- 立即暂停训练
- 回滚到 spike 之前的 checkpoint
- 减小学习率
- 跳过导致 spike 的 batch(如果是数据问题)
- 恢复训练
不同模型家族的训练差异
| 模型 | 预训练数据 | 后训练策略 | 特点 |
|---|---|---|---|
| GPT-4o | 多模态(文本+图像) | RLHF | 多模态能力强 |
| Claude | 文本为主 | Constitutional AI + RLHF | 安全性突出 |
| Llama 3 | 15T tokens, 代码占比高 | SFT + DPO | 开放权重,性价比高 |
| Qwen 2.5 | 18T tokens,中英文 | SFT + RLHF | 中文能力好 |
| DeepSeek | 混合,MoE 架构 | RLHF + GRPO | 推理特化 |
| Mistral | 高效训练,小数据 | SFT + DPO | 小模型能力强 |
训练一个模型的成本估算
╔══════════════════════════════════════════════════╗
║ 大模型训练成本估算 ║
║ ║
║ 7B 模型: ║
║ 预训练:~20 万美元 (1000 张 A100 × 10天) ║
║ SFT:~5000 美元 ║
║ RLHF/DPO:~2 万美元 ║
║ 总成本:~25 万美元 ║
║ ║
║ 70B 模型: ║
║ 预训练:~200 万美元 (8000 张 A100 × 30天) ║
║ SFT:~10 万美元 ║
║ RLHF/DPO:~50 万美元 ║
║ 总成本:~300 万美元 ║
║ ║
║ 400B+ 模型: ║
║ 预训练:~5000 万美元+ ║
╚══════════════════════════════════════════════════╝
这还只是训练的计算成本。数据采集清洗、人工标注、实验失败的试错成本——这些隐形成本往往比训练本身高得多。
理解训练对实际工作的意义
你可能不会亲自训练一个 70B 模型。但理解训练过程能帮你:
- 选模型:知道不同训练策略下的模型差异,选择合适的基座
- 微调:知道 SFT 的风险和限制,不会盲目微调
- 评估:知道模型的能力边界来自训练数据,不会要求模型做它没学过的事
- 诊断:当模型表现奇怪时,能大致判断是预训练、SFT 还是对齐的问题
大模型训练是工程和实验的结合。那些公开细节的论文(Llama、DeepSeek、Qwen 的技术报告)每一篇都值得精读——真正的 know-how 都在那些"简单的改进"和"实验中发现"的段落里。
评论