大模型训练全景:预训练与后训练
AI 核心技能系列 · 第 2 篇
导语
上一篇我们搞清楚了大模型"长什么样"(Transformer 架构),这一篇要搞清楚它"怎么长大的"。
大模型不是天生就聪明的。ChatGPT 不是一上来就能跟你聊天,Claude 也不是一出生就会写代码。它们都经历了一个漫长的"培养"过程——从什么都不懂的随机参数,到能理解人类语言、遵循指令、输出有用内容。
理解这个培养过程有什么用?
- 做 Fine-tuning 的时候,你知道为什么要这样准备数据
- 选择模型的时候,你知道为什么有些模型"更听话"
- 面试的时候,SFT、RLHF、DPO 这些名词你能讲清楚而不是只知道缩写
这篇文章带你走一遍大模型从"白纸"到"产品"的完整旅程。
一、大模型训练的全景图
大模型的训练可以分为三个阶段,每个阶段目标不同、方法不同、成本也差了几个数量级:
┌────────────────────────────────────────────────────────────────────┐
│ 大模型训练全流程 │
│ │
│ 阶段一:预训练 阶段二:后训练 阶段三:部署推理 │
│ (Pre-training) (Post-training) (Inference) │
│ │
│ ┌──────────┐ ┌──────────────────────┐ ┌──────────┐ │
│ │ 海量文本 │ │ SFT → RLHF/DPO │ │ 用户使用 │ │
│ │ 学习语言 │ → │ 学会听话+对齐人类偏好 │ → │ 实时生成 │ │
│ └──────────┘ └──────────────────────┘ └──────────┘ │
│ │
│ 目标:理解语言 目标:遵循指令+安全对齐 目标:高效推理 │
│ 数据:万亿Token 数据:万~百万条指令数据 数据:用户实时输入 │
│ 成本:千万~亿美元 成本:百万~千万美元 成本:按Token计费 │
│ 时间:数月 时间:数周 时间:毫秒级 │
└────────────────────────────────────────────────────────────────────┘
一个关键的类比:
- 预训练 = 上学(系统学习知识,但不会做具体工作)
- SFT = 入职培训(学会按公司要求做事)
- RLHF = 绩效考核(根据反馈持续改进工作方式)
二、预训练:海量数据中学会"语言"
2.1 数据是一切的基础
预训练阶段的核心:用海量文本数据,让模型学会"语言"本身。
训练数据的来源:
| 数据来源 | 典型规模 | 特点 |
|---|---|---|
| 网页(Common Crawl) | 数万亿 Token | 最大来源,需要大量清洗 |
| 书籍 | 数十亿 Token | 质量高,覆盖面广 |
| 维基百科 | 数十亿 Token | 事实性强,结构化 |
| 代码(GitHub) | 数千亿 Token | 编程能力来源 |
| 论文(arXiv) | 数十亿 Token | 科学推理能力 |
| 对话数据 | 数百亿 Token | 对话能力来源 |
GPT-3 使用了约 3000 亿 Token 的训练数据。到了 Llama 3,训练数据超过 15 万亿 Token。而数据质量往往比数量更重要——DeepSeek 公开表示,他们在数据清洗和过滤上投入了大量工程资源。
数据清洗的关键步骤:
- 去重:移除重复内容(文档级 + 段落级 + 句子级)
- 质量过滤:移除低质量内容(广告、乱码、机器生成的垃圾文本)
- 敏感内容过滤:移除有害、非法内容
- 数据配比:控制不同来源数据的比例(网页太多会拉低质量)
- 去污染:移除测试集数据,防止数据泄露
2.2 Tokenizer:怎么把文字变成数字
模型不认识文字,只认识数字。Tokenizer 负责把文字转换成数字序列(Token ID)。
主流方法是 BPE(Byte Pair Encoding):
# 一个简单的例子
原始文本: "Hello, how are you?"
# BPE Tokenizer 的处理结果
Tokens: ["Hello", ",", " how", " are", " you", "?"]
Token IDs: [15496, 11, 703, 527, 499, 30]
# 注意:
# - 常见词(Hello)是一个 Token
# - 不常见的长词可能被拆成多个子词
# - 空格通常和后面的词合在一起
不同模型使用不同的 Tokenizer,这也是为什么同一段文本在不同模型上消耗的 Token 数不同:
| Tokenizer | 使用模型 | 词表大小 | 中文效率 |
|---|---|---|---|
| cl100k_base | GPT-4/4o | 100K | 较好 |
| claude-tokenizer | Claude 3.5/4 | 100K+ | 较好 |
| SentencePiece | Llama, Gemini | 32K-256K | 一般~较好 |
| Qwen-Tokenizer | Qwen 2.5 | 152K | 优秀(中文优化) |
实用小技巧:中文平均 1 个汉字 ≈ 1.5-2 个 Token(取决于 Tokenizer),英文平均 1 个单词 ≈ 1-1.5 个 Token。这对估算 API 成本很重要。
2.3 训练目标:Next Token Prediction
预训练的目标极其简单——给定前面的 Token,预测下一个 Token:
输入: "The cat sat on the"
目标: 预测下一个 Token 是 "mat" (概率最高)
具体地:
模型通过最小化交叉熵损失来学习:
就是这么"简单"的目标,当你在万亿 Token 上训练数千亿参数的模型时,涌现出了理解语言、逻辑推理、甚至编程的能力。
这也是为什么有人说大模型的能力是"涌现"的——你没有显式地教它推理,但规模足够大的时候,推理能力自己冒出来了。
2.4 训练基础设施:分布式训练
训练大模型需要的算力是惊人的。以 GPT-3 为例:
- 参数量:1750 亿
- 训练数据:3000 亿 Token
- 训练算力:约 3640 PF-days(每秒千万亿次运算 × 3640 天)
- GPU:数千张 A100/H100
- 训练时间:数周到数月
一台机器放不下这么多参数和数据,所以需要分布式训练。主流的并行策略:
| 并行策略 | 核心思想 | 适用场景 |
|---|---|---|
| 数据并行 (DP) | 每张 GPU 一份模型副本,各自处理不同数据,梯度同步 | 模型放得下单卡 |
| 张量并行 (TP) | 把一个矩阵运算拆到多张 GPU 上 | 单层太大,放不下一张卡 |
| 流水线并行 (PP) | 不同层放在不同 GPU 上,数据像流水线一样流过 | 层数太多 |
| ZeRO | 优化器状态/梯度/参数分片存储 | 内存优化 |
实际训练通常组合使用多种策略,比如 DeepSeek V3 同时使用了 TP + PP + DP + ZeRO。
2.5 Scaling Law:大力出奇迹的理论基础
2020 年 OpenAI 发表了 Scaling Law(规模定律),核心发现:
模型的性能(损失值)与参数量 N、数据量 D、算力 C 之间存在幂律关系——三者中任一个增大,模型性能都会平滑提升。
其中:
- 是损失值
- 是参数量
- 是数据量
- 是缩放指数(约 0.076 和 0.095)
- 是理论下限
直觉理解:模型越大、数据越多、训练越久,效果越好——而且这个关系是可预测的。这就是为什么各大厂商疯狂堆参数和数据——Scaling Law 告诉你,堆下去一定有回报。
后来 DeepSeek 等团队的实践表明,数据质量和训练效率可能比单纯的规模扩大更重要。这引发了行业从 "Scaling Law" 到 "Efficiency Law" 的思考转变。
2.6 预训练的成本:算一笔账
训练一个大模型要多少钱?
| 模型 | 估算训练成本 | 主要开支 |
|---|---|---|
| GPT-3 (175B) | ~$460 万 | GPU 集群租用 |
| GPT-4 | ~$1 亿+ | GPU、数据、人力 |
| Llama 3 405B | ~$3000 万+ | GPU 集群 |
| DeepSeek V3 | ~$560 万(声称) | GPU(性价比极高) |
DeepSeek V3 的训练成本之所以低得惊人,是因为他们在架构(MoE)、训练框架和工程优化上做了大量工作——这也说明训练大模型不一定要拼钱,拼工程能力也行。
2.7 代码示例:加载和探索预训练模型
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 加载一个开源预训练模型(以 Qwen2.5-7B 为例)
model_name = "Qwen/Qwen2.5-7B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto" # 自动分配到可用的 GPU
)
# 看看模型结构
print(f"参数量: {sum(p.numel() for p in model.parameters()):,}")
print(f"词表大小: {tokenizer.vocab_size:,}")
print(f"模型层数: {model.config.num_hidden_layers}")
print(f"隐藏维度: {model.config.hidden_size}")
print(f"注意力头数: {model.config.num_attention_heads}")
# 用预训练模型生成文本(注意:纯预训练模型不会"聊天",只会续写)
text = "The future of artificial intelligence is"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=50, temperature=0.7)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
注意:纯预训练模型只会"续写文本",不会"回答问题"。要让它遵循指令,需要后训练。
三、后训练阶段一:SFT(监督微调)
3.1 SFT 的目标
预训练模型会续写文本,但不会遵循指令。你问它"北京有什么好吃的?",它可能会继续写"北京有什么好玩的?上海有什么好吃的?"——因为它只是在做 Next Token Prediction,不知道你在问问题。
SFT(Supervised Fine-Tuning)的目标:让模型从"续写模式"切换到"指令遵循模式"。
做法很直接:构造大量的 (指令, 回答) 数据对,用监督学习微调模型。
3.2 指令数据的构造
// SFT 训练数据的典型格式
{
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "请解释什么是机器学习"},
{"role": "assistant", "content": "机器学习是人工智能的一个分支,它让计算机能够从数据中自动学习规律和模式,而不需要人为地编写明确的规则..."}
]
}
高质量 SFT 数据的来源:
| 数据来源 | 成本 | 质量 | 规模 |
|---|---|---|---|
| 人工标注 | 高 | 最高 | 小(万级) |
| 蒸馏(用强模型生成) | 中 | 高 | 大(十万级) |
| 开源数据集 | 低 | 参差不齐 | 大 |
| Self-Instruct | 低 | 中 | 大 |
3.3 SFT 的关键技巧
- 数据质量 >> 数据数量:1000 条高质量数据 > 100 万条低质量数据
- 覆盖多样性:指令类型要丰富(问答、写作、翻译、代码、推理……)
- 格式一致性:训练数据的格式要统一
- 避免灾难性遗忘:SFT 数据中混入一些预训练数据,防止模型忘掉通用能力
3.4 为什么只做 SFT 还不够
SFT 教会了模型"怎么回答问题",但没教它"什么是好的回答"。
一个只做过 SFT 的模型可能会:
- 一本正经地胡说八道(自信但错误)
- 回答有害问题("怎么制造炸弹")
- 输出冗长废话
- 对敏感问题不当处理
要解决这些问题,需要对齐(Alignment)——让模型的行为符合人类的价值观和偏好。这就是 RLHF 的工作。
四、后训练阶段二:RLHF(人类反馈强化学习)
4.1 核心思想
RLHF(Reinforcement Learning from Human Feedback)的核心思想:用人类偏好来教模型什么是好的回答。
直觉理解:
想象你在教一个小孩写作文。SFT 相当于给他看了大量范文,他学会了写作的基本套路。RLHF 相当于你改他的作文——"这句话写得好"、"这个论点太弱了"、"这个例子不恰当"——让他不断改进。
4.2 RLHF 的三步流程
Step 1: 收集人类偏好数据
─────────────────────────
给同一个问题,模型生成两个回答(A 和 B),
让人类标注员选择哪个更好。
问题: "解释量子计算"
回答A: [详细、准确、易懂] ← 人类选择这个 ✓
回答B: [简短、有错误]
Step 2: 训练奖励模型 (Reward Model)
─────────────────────────────────
用人类偏好数据训练一个"评分模型",
它能自动给回答打分,模拟人类判断。
Reward Model("解释量子计算", 回答A) → 0.85 分
Reward Model("解释量子计算", 回答B) → 0.32 分
Step 3: 用 PPO 优化策略模型
───────────────────────────
用强化学习(PPO 算法)优化模型,
让它生成的回答得到更高的奖励分数。
优化目标:
- : 奖励模型的分数(要高)
- : 和原始模型的差异(不能太大,防止过度优化)
4.3 RLHF 的工程挑战
RLHF 是出了名的难训:
- 奖励模型不完美:人类标注有噪声,奖励模型可能学到错误的偏好
- Reward Hacking:模型学会"讨好"奖励模型,但回答质量并没有提高(比如学会输出冗长但没信息量的回答)
- 训练不稳定:PPO 算法对超参数敏感,容易训崩
- 成本高:需要大量人类标注,一个标注员一天标不了几百条
- 四个模型同时运行:策略模型、参考模型、奖励模型、价值模型——GPU 需求巨大
五、后训练阶段三:DPO 与新范式
5.1 DPO:去掉奖励模型的简化方案
RLHF 太复杂了,有没有更简单的方法?2023 年 Stanford 提出了 DPO(Direct Preference Optimization)。
核心思想:不需要训练奖励模型和使用 PPO,直接用人类偏好数据优化语言模型。
RLHF: 偏好数据 → 训练奖励模型 → PPO优化策略 → 对齐的模型
DPO: 偏好数据 → 直接优化策略 → 对齐的模型(中间步骤省了!)
DPO 的损失函数(看不懂公式没关系,理解思想即可):
其中:
- : 人类偏好的(winning)回答
- : 人类不偏好的(losing)回答
- : 当前模型
- : 参考模型(SFT 后的初始状态)
- : 温度参数
直觉理解:DPO 让模型学会"好回答的概率要高,差回答的概率要低",同时不要偏离初始模型太远。
5.2 RLHF vs DPO 对比
| 维度 | RLHF | DPO |
|---|---|---|
| 需要奖励模型 | 是 | 否 |
| 训练稳定性 | 不稳定,超参数敏感 | 相对稳定 |
| 工程复杂度 | 高(4个模型同时运行) | 低(和 SFT 类似) |
| GPU 需求 | 高 | 相对低 |
| 实际效果 | 天花板更高 | 大部分场景足够好 |
| 在线学习 | 支持 | 不支持 |
| 迭代优化 | 容易持续优化 | 每轮需要重新收集偏好数据 |
5.3 其他新兴对齐方法
| 方法 | 核心思想 | 特点 |
|---|---|---|
| ORPO (Odds Ratio Preference Optimization) | 将 SFT 和对齐合并为一步 | 更简单,不需要参考模型 |
| KTO (Kahneman-Tversky Optimization) | 只需要"好/坏"二元标签,不需要成对比较 | 数据需求更低 |
| SimPO (Simple Preference Optimization) | 用序列平均对数概率作为隐式奖励 | 无需参考模型 |
| GRPO (Group Relative Policy Optimization) | DeepSeek 提出,组内相对排序 | 适合推理任务 |
行业趋势:DPO 及其变体正在成为主流,RLHF 则在需要极致对齐效果的场景中仍有不可替代的地位。
六、开源训练框架与工具链
你不需要从头写训练代码。以下是主流的训练框架:
| 框架 | 适用场景 | 易用性 | 功能 | 特点 |
|---|---|---|---|---|
| Hugging Face TRL | SFT + RLHF + DPO | ★★★★ | ★★★★ | 生态最完整,社区活跃 |
| LLaMA-Factory | 全流程微调 | ★★★★★ | ★★★★★ | 图形界面,一键微调,支持100+ 模型 |
| Unsloth | 高效微调 | ★★★★ | ★★★ | 2x 加速,50% 内存节省 |
| DeepSpeed | 大规模分布式训练 | ★★ | ★★★★★ | 微软出品,ZeRO 优化 |
| Megatron-LM | 预训练 | ★★ | ★★★★★ | NVIDIA 出品,张量并行 |
| Axolotl | 配置化微调 | ★★★ | ★★★★ | YAML 配置,灵活 |
选择建议:
- 入门者:LLaMA-Factory(有图形界面,上手最快)
- 日常微调:Hugging Face TRL + Unsloth(生态好 + 效率高)
- 大规模训练:DeepSpeed + Megatron-LM(工业级)
七、职业视角:理解训练对实际工作的帮助
7.1 面试高频问题
| 问题 | 考察点 | 核心答案要点 |
|---|---|---|
| SFT 和 RLHF 的区别? | 基础概念 | SFT 教模型怎么回答问题,RLHF 教模型什么是好的回答 |
| DPO 和 RLHF 的区别? | 技术深度 | DPO 去掉了奖励模型,直接用偏好数据优化,更简单但天花板略低 |
| Scaling Law 是什么? | 前沿认知 | 模型性能与参数量、数据量、算力之间的幂律关系 |
| 预训练用什么目标? | 基础理解 | Next Token Prediction,通过交叉熵损失优化 |
| 什么是灾难性遗忘? | 实战经验 | 微调后模型忘掉预训练学到的通用能力,可通过混合数据缓解 |
7.2 不同岗位的侧重点
算法岗 应用岗
├── 需要深入理解训练原理 ├── 理解概念即可,不需要自己训练
├── 要会写训练代码 ├── 重点在 Fine-tuning 和数据准备
├── 要了解分布式训练 ├── 用现成框架(LLaMA-Factory 等)
├── Scaling Law 的应用 ├── 知道什么时候该 Fine-tune
└── 对齐技术是核心竞争力 └── 模型选型和效果评估
7.3 工作中的实际应用
- 数据质量判断:理解训练过程,你就知道为什么"训练数据的质量比什么都重要"
- Fine-tuning 策略选择:知道 SFT/DPO 的区别,才能选对微调方式
- 模型能力评估:理解后训练的对齐过程,你能更准确地判断模型在哪些场景下可靠、哪些场景下不可靠
- 成本预估:理解训练成本结构,能帮你向老板解释为什么 AI 项目需要多少预算
总结
这篇文章带你走完了大模型从"白纸"到"产品"的完整旅程:
- 预训练:用万亿 Token 学会"语言",核心目标是 Next Token Prediction,需要海量算力
- SFT:用指令数据教模型"听话",从续写模式切换到指令遵循模式,数据质量是关键
- RLHF/DPO:用人类偏好教模型"什么是好的回答",实现价值观对齐
- 工具链:LLaMA-Factory、TRL、Unsloth 等框架让训练和微调变得越来越平民化
- Scaling Law:参数、数据、算力三者的关系,是行业军备竞赛的理论基础
理解训练过程不是为了让你去训练模型(大部分人不需要),而是为了让你在做 Prompt Engineering、RAG、Fine-tuning 时,知道"为什么"——这就是原理知识的价值。
本文是 AI 核心技能系列 第 2 篇,共 12 篇。上一篇:大模型基础:从 Transformer 到 GPT | 下一篇:Prompt Engineering:与大模型高效对话的艺术
关注公众号「coft」,获取完整系列更新、配套代码和学习路线图。一起交流 AI 转行经验,助力职业跃升,迈向高薪岗位。