跳转至

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 (基准) 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. 后训练与对齐