跳到主要内容
Agentic RL

第7章:Self-Improvement 与 SFT-RL Flywheel

Rejection Fine-tuning、ReST/ReST^EM、STaR、Synthetic Data、Self-play 等自我改进算法,以及 SFT → RL → 采样 → SFT → RL 飞轮的工程模式

Self-Improvement RFT ReST STaR Synthetic Data Self-Play Flywheel

DeepSeek R1、OpenAI o3、Claude 4.x 都在用一个反直觉的训练栈:SFT → RL → 用 RL 采样数据 → 再 SFT → 再 RL——一遍遍轮转。这就是 SFT-RL flywheel(自改进飞轮)。本章讲清:为什么 RL 训完还要回去 SFT、Rejection Fine-tuning 怎么做、ReST/STaR 是什么、合成数据怎么不让模型 collapse、self-play 在 LLM 时代的新意——读完你能给自己的模型设计一个长期演进的 roadmap。

📑 目录


1. 为什么 RL 训完要回去 SFT

1.1 RL 训出来的模型有几个”病”

RL 后模型的典型问题:
  ① 输出风格变怪(过拟合 reward 形态,如疯狂用 boxed)
  ② Format / 思考链冗长(为了拿满 reward 拉长思考)
  ③ 在简单任务上"过度推理"
  ④ Catastrophic forgetting:RL 训练时其他能力可能退化

1.2 SFT 怎么”修复”

把 RL 模型采样的正确+精炼的样本,作为新 SFT 数据:

RL 模型 ──→ 采样 N 个 trajectory

         筛选(只留正确 + 简洁)

         作为 SFT 数据 ──→ 再 SFT

         得到"既会推理又输出干净"的模型

         可以再进入下一轮 RL

1.3 经验数据

DeepSeek R1 论文:

  • R1-Zero(纯 RL):推理能力强,但输出可读性差,语言混杂
  • R1(SFT cold start + RL + SFT clean + RL):推理 + 可读性 + 多语言全好

🌟 关键洞察:RL 是”放大器”,SFT 是”整形器”,两者互相需要


2. Rejection Fine-tuning(RFT)

2.1 算法

1. 拿当前模型 M(可以是 SFT 或 RL 训过的)
2. 对每个 prompt,采 N 个 response(温度 > 0)
3. 用 verifier 筛选 → 留下"对的"
4. 对正确 response 再加一道筛选:
   - 长度 < threshold(精炼)
   - 没有 reward hacking 模式
   - 多样性(去重)
5. 把筛后的 (prompt, response) 当 SFT 数据训新模型 M'

2.2 数学等价性

RFT 数学上等价于:用一个简单 binary verifier 做的 RL——只是不用 PG 而用 SFT loss。

实操上 RFT 比 RL 简单 100 倍:

  • 不用 critic
  • 不用 advantage 计算
  • 不用 KL penalty(过拟合靠 epoch 控)
  • 训练像普通 SFT 一样稳

2.3 何时用 RFT 而非 GRPO

场景推荐
想”白嫖” RL 能力但不想搞复杂工程✅ RFT
资源受限(单机几卡)✅ RFT
有质量数据 verifier✅ RFT
需要”emergent capability”(self-correction 等)❌ 必须 GRPO
需要 long trajectory 推理能力❌ 必须 GRPO

🍎 RFT 是 GRPO 的”穷人版”——80% 收益,20% 复杂度。中小团队的入门选项。

2.4 工程实现

def rejection_fine_tuning(
    model, prompts, verifier,
    n_samples_per_prompt=16,
    selection_strategy="best_of_n",
    n_epochs=2,
):
    sft_data = []
    for prompt in prompts:
        # 1. 采样
        responses = [model.generate(prompt, temperature=1.0) for _ in range(n_samples_per_prompt)]
        rewards = [verifier(r, prompt) for r in responses]
        
        # 2. 筛选
        if selection_strategy == "best_of_n":
            best = responses[rewards.index(max(rewards))]
            if max(rewards) > 0.5:
                sft_data.append((prompt, best))
        elif selection_strategy == "all_correct":
            for r, reward in zip(responses, rewards):
                if reward > 0.5:
                    sft_data.append((prompt, r))
    
    # 3. SFT
    new_model = sft(model, sft_data, n_epochs=n_epochs)
    return new_model

3. ReST / ReST^EM

Reinforced Self-Training, Google DeepMind, 2023-2024

3.1 ReST 算法

Outer loop(grow):
  for iter in 1..N:
    采样大量数据(用当前模型)
    用 verifier 筛(类似 RFT)
    Inner loop(improve):
      for epoch in 1..K:
        SFT on filtered data

ReST 是 “grow + improve” 双层循环——和 RFT 类似,但显式分两层:外层换数据,内层做几个 epoch SFT。

3.2 ReST^EM(EM 算法变体)

ReST^EM 把外层叫 E-step(expectation,采数据 + 筛),内层叫 M-step(maximization,SFT)——让人立刻想起 EM 算法。

理论保证:在某些条件下 ReST^EM 等价于”用 LLM 自己当 reward model 的 RL”。

3.3 与 RFT 的差异

维度RFTReST / ReST^EM
迭代单次多次 grow + improve
数据源一次性采完每轮重新采(用最新模型)
目标工程实用理论分析(EM)

4. STaR / Quiet-STaR

4.1 STaR(2022)

Self-Taught Reasoner

教模型”自己生成思维链”:

1. 给模型(prompt + 答案),让它生成"对应思维链"
2. 思维链能正确推到答案 → 留下
3. 用筛后的 (prompt, 思维链, 答案) SFT

最早的”模型自造训练数据”探索——后来 reasoning 训练的核心思想。

4.2 Quiet-STaR(2024)

更激进:让模型在每个 token 之前都”安静地”生成 rationale(不输出),然后这个 rationale 帮助预测 next token。如果有用 → reinforce;没用 → 弃。

不需要外部 supervision——纯 self-supervised 学推理。

4.3 工业落地

STaR 思想被 OpenAI o1、DeepSeek R1 间接采用——R1 的 cold start data 就是从一个”小老师模型”用 STaR 风格生成的推理数据。


5. Synthetic Data:模型自造训练数据

5.1 范式

强模型 M_strong ──→ 生成大量(prompt, answer)

                  filter / verify

                  作为 SFT data

                  训弱模型 M_weak  →  能力接近 M_strong

或者:

M ──→ 自己生成数据 ──→ 筛 ──→ SFT ──→ M' ──→ 重复

后者就是 self-distillation flywheel

5.2 真实案例

模型合成数据来源
Llama 3 SFT部分用 Llama 2 70B 合成
Phi-3 / Phi-4大量 GPT-4 合成 textbook
DeepSeek-V3 / R1自己上一代模型生成
OpenAI o1 / o3内部模型生成 reasoning chain

🍎 2025 一个共识:90% 的 post-training data 是合成的,人类标注只覆盖关键领域 + 安全 + alignment。

5.3 合成数据的”幻觉”风险

合成数据可能含错误事实——模型的”幻觉”被复制到下一代。

防御:

  • Verifier 严格筛
  • 多样性强制(不同 prompt 模板)
  • 与人工高质量数据混合(8:2 ~ 9:1)
  • Cross-validation:不同模型生成,互相筛

6. Self-play:agent 互相博弈

6.1 经典思想

AlphaGo / AlphaZero 用 self-play(自己和自己下)在围棋称霸。LLM 时代有类似变体。

6.2 LLM 的 self-play 形态

形态例子
辩论 self-play两个 agent 辩论,LLM judge 打分,reward 输方学错在哪
教学 self-play一个 agent 出题,另一个解,出题方根据”难度差”调难度
博弈 self-play多 agent 谈判 / 拍卖,reward 由结果定
Critic self-play一个 agent 提建议,另一个 critic 找漏洞

6.3 工业案例(rumor)

  • DeepSeek R1 据说用了 self-play 阶段(具体方式没披露)
  • Anthropic Constitutional AI 部分用了 critic self-play

6.4 风险

  • 同质化:两个 agent 都是同一模型,容易陷入局部最优
  • 奖励 hacking:一方 hack judge,另一方学 hack 模式
  • 算力极贵:每条数据要多次 rollout

7. SFT-RL Flywheel 的工程模式

7.1 完整流水线

┌──────────────────────────────────────────────────────────┐
│  Generation 1:                                            │
│  Base model                                               │
│      ↓ SFT(初始 cold start data,可能来自 stronger 模型) │
│  M1_sft                                                   │
│      ↓ GRPO(verifier-based)                              │
│  M1_rl                                                    │
│      ↓ RFT(从 M1_rl 采样 + 筛)                           │
│  M1_rft                                                   │
│      ↓ DPO/RLHF(alignment)                              │
│  M1_release                                               │
└──────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────┐
│  Generation 2:                                            │
│  M1_release ──→ 生成 G2 训练数据                          │
│             ↓                                              │
│  Base v2 + G2 data ──→ SFT ──→ GRPO ──→ ...               │
│  M2_release                                               │
└──────────────────────────────────────────────────────────┘

                       (持续迭代...)

7.2 每一阶段的目的

阶段目的关键超参
Pre-training通用语言能力数据质量、token 量
SFT cold start给 RL 起手姿势1-3 epoch、混合数据
GRPO解锁推理 + emergent capabilityLR、KL coef、group size
RFT整形输出风格筛选 threshold、多样性
DPO/RLHF安全 + 风格 alignmentβ、偏好数据质量
Release上线

7.3 时间轴示例(假设)

Quarter 1: Generation 1 训练完成
  Day 1-7:    pre-training data prep
  Day 8-30:   SFT cold start
  Day 31-60:  GRPO 主训练
  Day 61-70:  RFT
  Day 71-80:  DPO alignment
  Day 81-90:  评测、上线

Quarter 2: Generation 2(基于 G1 输出生成新 data)
  ...

工业级模型每代训练 2-3 个月不等。


8. 警惕:模型崩溃与能力收窄

8.1 Model Collapse(模型崩溃)

一个 2024 年被广泛讨论的现象

如果完全用前代模型合成的数据训新一代,模型会逐代退化:

Gen 1: 多样性 = 1.0
Gen 2(用 Gen 1 数据训): 0.85
Gen 3(用 Gen 2 数据训): 0.65
Gen 4: 0.40
...
最终:模型只会输出特定模式

8.2 解法:数据混合

绝不让合成数据占 100%——必须留至少 10-30% 真实人类数据(网页、书籍、人工标注)。

DeepMind 实验:保留 10% 人类数据可以完全避免 collapse

8.3 Capability Narrowing(能力收窄)

RL 训练在数学上提升了 50%,但通用对话能力退化 5%——这是能力收窄

防御:

  • 训练 batch 多任务混合(数学 + 代码 + 对话 + 工具)
  • 定期跑通用 benchmark(MMLU、AlpacaEval)监控退化
  • RL 后跑一遍通用 SFT 数据”补课”

8.4 Diversity Loss(多样性丢失)

RL 鼓励 high-reward 模式,多样性被消除——所有回答开头都是 “Let me think about this…”。

防御:

  • Entropy bonus(第 3 章)
  • 数据 augmentation:相同 prompt 不同 paraphrase
  • Final stage 不用 RL,用 SFT 多样性数据

✅ 自我检验清单

  • 为什么 RL 后要 SFT:能列出 RL 模型的 4 个典型问题
  • R1-Zero vs R1:能讲清两者的训练流程差异和最终质量差异
  • RFT 算法:能默写 5 步流程,并写出代码骨架
  • RFT vs GRPO:能给出 RFT 适用 / 不适用的场景
  • ReST EM 类比:能解释 grow/improve 对应 EM 的 E-step/M-step
  • STaR / Quiet-STaR:能讲清两者各自的 self-supervised 思想
  • 合成数据 90%:能列出 4 个用大量合成数据的现代模型
  • 合成数据风险:能解释 model collapse 现象,以及”留 10% 真实”的防御
  • Self-play 形态:能列出 LLM 时代 4 种 self-play 形态
  • SFT-RL flywheel:能画出 Gen 1 → Gen 2 的完整流水线
  • 能力收窄 / 多样性丢失:能列出 3 种防御措施

📚 参考资料

论文

综述

  • Self-Improvement Survey —— 各种综述文章
  • The Curse of Recursion: Training on Generated Data Makes Models Forget

实战

  • HuggingFace TRL:RFT、ReST 都有 example
  • Phi 系列模型 paper(微软):合成数据训练范例
  • Llama 3 paper:合成数据 + 真人数据混合策略