SFT / RFT / RL / Pretrain 的关系与数据效率¶
更新日期:2026-04-14
一、训练阶段全景¶
教科书式的线性视角(实际流程见 §五,DeepSeek-R1 已打破线性顺序):
flowchart LR
pre["Pretrain<br/>预测下一 token"]
sft["SFT<br/>学习输出格式"]
rft["RFT<br/>过滤后的 SFT"]
rlhf["RLHF / DPO<br/>学习偏好"]
grpo["GRPO / RLVR<br/>学习推理策略"]
pre --> sft --> rft --> rlhf --> grpo
classDef stage fill:#fff,stroke:#cc785c,color:#1a1a1a;
class pre,sft,rft,rlhf,grpo stage
每一步教模型一件之前没学到的事:Pretrain 给"原材料",SFT 给"输出格式",RFT 用模型自身正确样本做强化模仿,RLHF/DPO 引入"好坏区分",GRPO/RLVR 通过在线试错学"如何得到答案"。
二、各阶段对比¶
| 阶段 | 数据形式 | 学习目标 | 典型规模 | 算力相对 | 关键代表 |
|---|---|---|---|---|---|
| Pretrain | 原始文本(web / code / math) | 预测下一 token(自监督) | 1T–30T tokens | 1×(基准) | GPT-3, LLaMA, DeepSeek-V3 |
| SFT | (instruction, response) 对 |
输出格式对齐 | 1k–100k 条 | ~0.1% | LIMA, Alpaca, InstructGPT |
| RFT | 自采样 + verifier 过滤 | 模仿正确回答 | 10k–1M 条 | ~1% | DeepSeekMath RFT |
| RLHF / DPO | (chosen, rejected) 偏好对 |
偏好对齐 | 10k–100k 对 | ~5% | InstructGPT, Claude, DPO |
| GRPO / RLVR | 题目 + 验证器(在线 rollout) | 推理策略(试错学习) | 100k–10M rollout | ~10–20% | DeepSeek-R1, RLVR-math |
关键观察:
- 数据规模逐阶段指数下降(Pretrain 1T → SFT 10k → ...),但单 token / 单样本的信号密度逐阶段上升:Pretrain 是无监督,SFT 是模仿,RL 是带验证的探索。
- 算力占比相对 Pretrain 都很小,但 RL 阶段的工程复杂度最高(rollout、判题器、回放、稳定性)。
- "数据效率" 在 RL 阶段被重新定义 —— GRPO 可以在同一道题上 rollout 64 次反复挤信号,传统 SFT 一条数据看一次就过。
三、每个阶段的深入理解¶
3.1 Pretrain — 学习"原材料"¶
预训练是一切能力的基础。SFT/RL 不能凭空创造能力,只能"激活"和"强化"预训练中已经学到的能力。 - 类比:预训练 = 一个人读了几百万本书,什么都知道一点
-
学到了:语言结构、常识、事实知识、代码模式、数学模式
-
没学到:如何回答问题(它只学了"预测下一个 token")
3.2 SFT — 学习"格式"¶
SFT 的主要贡献是教会模型输出格式,而非新知识。参考 LIMA: Less Is More for Alignment (Zhou et al., 2023)。
# SFT 数据示例
training_example = {
"instruction": "解释什么是 Transformer",
"response": "Transformer 是一种基于自注意力机制的神经网络架构..."
}
LIMA 论文的关键发现: 仅用 1000 条精心筛选的 SFT 数据,就能让预训练模型变成有用的助手。这说明 SFT 更多是"格式对齐",而非"知识注入"。
3.3 RFT (Rejection Fine-Tuning) — 过滤后的 SFT¶
def rejection_fine_tuning(model, problems, verifier, n_samples=64):
training_data = []
for problem in problems:
# 采样 N 个回答
responses = [model.generate(problem) for _ in range(n_samples)]
# 用验证器过滤: 只保留正确的
correct = [r for r in responses if verifier(r, problem)]
if correct:
# 选最好的或随机选一个
best = select_best(correct)
training_data.append((problem, best))
# 用过滤后的数据做 SFT
model.sft(training_data)
RFT 比标准 SFT 好在哪?它用模型自己生成的正确回答做训练,避免了人工标注的分布偏差。但仍然是模仿学习——模型学习"复制"正确回答,而非学习"如何得到"正确回答。
3.4 RLHF/DPO — 学习"偏好"¶
关键区别:SFT 只有正样本(好回答),DPO 有正负样本(好 vs 差),模型学习区分好坏。
3.5 GRPO/RLVR — 学习"推理策略"¶
关键突破:GRPO 是在线方法,可以超越训练数据。模型通过试错学习推理策略,而非模仿答案。参考 DeepSeek-R1 Technical Report (2025)。
GRPO 与 SFT 的核心区别 — 示例(数学题 "2^10 = ?"):
- SFT 做法:训练数据是 "2^10 = 1024",模型学会直接输出答案。
- GRPO 做法:模型生成 64 个回答,判题器检查哪些对。正确的回答提升概率,错误的回答降低概率。模型逐渐学会"怎么算"而非"答案是什么"。
四、学习效率与数据效率对比¶
(待补:从单 token 信号密度 / 单样本 reward gain / rollout 复用度三个角度量化对比。)
五、各阶段的关系:不是线性流水线¶
DeepSeek-R1 的实际流程打破了"线性流水线"的认知 —— RL 不是最后一步的"微调",而是核心训练阶段,SFT 反而是辅助角色:
flowchart LR
pre["Pretrain"] --> rl1["RL(cold-start)"]
rl1 --> sft["SFT(少量蒸馏)"]
sft --> rl2["RL(主训练)"]
rl2 --> sft2["SFT(最终对齐)"]
classDef stage fill:#fff,stroke:#cc785c,color:#1a1a1a;
class pre,rl1,sft,rl2,sft2 stage
DeepSeek-R1 把 RL 拆成两段,中间夹一次 SFT 做"格式重置",最后再 SFT 做对齐。SFT 占比从教科书里的"主角"降到工具人。
六、智能、记忆与泛化的关系¶
比喻:
- 预训练 = 一个人读了百万本书(记忆 + 隐式泛化)
- SFT = 教他怎么回答问题(格式对齐)
- RL = 让他做大量练习题并批改(学习推理策略)
- 智能 = 记忆 × 泛化 × 推理的乘积效应
七、合成数据在各阶段的应用¶
(待补:Pretrain 阶段的 phi-textbook 合成、SFT 阶段的 Self-Instruct/Alpaca、RFT 的自 rollout、RLAIF 的 AI judge。)
八、追问延伸¶
(待补:跨阶段 metrics、SFT-RL 边界判断、多阶段训练的 catastrophic forgetting。)
参考文献¶
-
[1] Zhou et al. LIMA: Less Is More for Alignment. NeurIPS 2023. 论文
-
[2] Rafailov et al. DPO: Direct Preference Optimization. NeurIPS 2023. 论文
-
[3] DeepSeek-AI. DeepSeek-R1 Technical Report. 2025. 论文
-
[4] Shao et al. DeepSeekMath: GRPO. 2024. 论文
-
[5] Bai et al. Constitutional AI: Harmlessness from AI Feedback. 2022. 论文
-
[6] Ouyang et al. Training language models to follow instructions with human feedback (InstructGPT). NeurIPS 2022. 论文
-
[7] Yuan et al. Scaling Relationship on Learning Mathematical Reasoning with LLMs (RFT). 2023. 论文
↑ 上级 · E. 后训练与对齐