AI 原理 · 2025年3月11日 · 7 分钟

大模型训练全景:从预训练到 RLHF

预训练、SFT、RLHF——完整梳理大模型训练的三个阶段,理解 Base/Instruct/Chat 模型的区别。

有了 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 之后,模型已经能回答问题了,但还有两个问题:

  1. 答案不够"讨喜"——技术上正确但表达生硬
  2. 不安全——可能输出有害内容

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
 │  ╱╲      ╱  ╲  ╱╲
 │ ╱  ╲    ╱    ╲╱  ╲
 │╱    ╲  ╱         ╲
 └──────────────────────→ 步数

处理方法:

  1. 立即暂停训练
  2. 回滚到 spike 之前的 checkpoint
  3. 减小学习率
  4. 跳过导致 spike 的 batch(如果是数据问题)
  5. 恢复训练

不同模型家族的训练差异

模型 预训练数据 后训练策略 特点
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 模型。但理解训练过程能帮你:

  1. 选模型:知道不同训练策略下的模型差异,选择合适的基座
  2. 微调:知道 SFT 的风险和限制,不会盲目微调
  3. 评估:知道模型的能力边界来自训练数据,不会要求模型做它没学过的事
  4. 诊断:当模型表现奇怪时,能大致判断是预训练、SFT 还是对齐的问题

大模型训练是工程和实验的结合。那些公开细节的论文(Llama、DeepSeek、Qwen 的技术报告)每一篇都值得精读——真正的 know-how 都在那些"简单的改进"和"实验中发现"的段落里。

继续阅读

评论