SFT、拒绝采样与蒸馏

T5
深入解析 · 训练智能体模型

SFT、拒绝采样与蒸馏:伸手够 RL 之前先自举数据。

在"给它提示"与"跑 RL"之间,坐着一族有监督技术,它们悄悄解决了大多数智能体训练问题:在示范上做 SFT、用拒绝采样/best-of-N 造出比手工收集更好的 SFT 集、用专家迭代把这一改进复利化,以及用蒸馏把一个强但贵的智能体折进一个便宜的里。这些方法以 RL 一小部分的不稳定性,给你 RL 大部分的结果。本文讲何时及如何使用每一个。

STEP 1

SFT 是模仿,而模仿有一道硬上限

SFT 最大化被示范轨迹的似然。它的上限恰恰是示范的质量:它会忠实复制示范者的推理、它的捷径和它的错误,且不会发明数据里没有的策略。因此高级有监督训练的全部博弈就是一个问题:当人工收集的示范稀缺、不一致或被人类技能封顶时,更好的示范从哪里来

STEP 2

拒绝采样:让模型写出它自己的训练集

关键动作:一个模型即便通常做不好,往往也偶尔能产出一条出色的轨迹。每个任务采样 N 条轨迹,过滤到核验器或奖励模型说好的那些,再在幸存者上做 SFT。你用模型自己的最佳行为,造出了一个高于其平均行为的训练集。

# Rejection sampling / best-of-N -> new SFT set
cands = [sample(model, task) for _ in range(N)]
good  = [c for c in cands if verify(c)]   # keep only passing
sft(model, good)                            # imitate your own best

拒绝采样是整篇文章里杠杆最高、风险最低的技术。它只需一个核验器和采样——没有 RL 循环、没有价值函数、没有 KL 调参——却拿下了团队跑 PPO 想要的大部分增益。任何 RL 之前先试它。

STEP 3

专家迭代:把自举复利化

再做一遍。在过滤出的最佳上做 SFT 抬高了模型的平均;现在它的 best-of-N 更好了;再过滤再 SFT。每一轮,策略把它自己的搜索蒸进权重,下一轮的采样从一个更强的先验起步。这就是专家迭代(亦即 STaR/自学推理):穷人的 RL,在可核验任务上往往闭合掉到 PPO 的大部分差距。

# Expert iteration: search, distill, repeat
for round in range(K):
    good = filter(sample_many(model, tasks), verify)
    model = sft(model, good)        # next round samples from a better prior

与 RL 的关系是精确的:拒绝采样 + SFT 就是带退化的、硬阈值化优势且无探索奖励的 RL。它更稳定、远更易调试,且在存在核验器时是正确的第一件该试的事。

STEP 4

蒸馏:把一个强智能体折进一个便宜的里

蒸馏在一个更强教师的轨迹上训练一个更小/更便宜的学生。关键在于,迁移的是教师在你任务分布上的行为——它的工具使用模式、推理结构和恢复动作——不是通用能力。教师可以是一个前沿模型、一个昂贵的集成,或你自己那条慢速 best-of-N 管线被压成单次快速前向。

蒸馏把教师的失效模式与偏置复制得和其强项一样忠实,且学生继承一道处在教师水平的能力上限。当教师是第三方 API 时,它还引出授权/服务条款问题——在你基于它搭管线之前先把这敲定。

STEP 5

如何在它们之间选择

  • SFT——你已有好轨迹。最快路径,上限 = 数据质量。
  • 拒绝采样——你有核验器,且模型有时成功。造出更好的 SFT 集;默认的自举。
  • 专家迭代——拒绝采样奏效过一次且仍在逐轮改进。复利它直到触顶。
  • 蒸馏——存在一个强教师,而你需要它更便宜或更小。是行为迁移,不是魔法。
  • RL(T3)——仅在上述触顶之后,且残余差距值得那份不稳定与基础设施时。
STEP 6

何时不要用这些

没有核验器或可信奖励模型,拒绝采样与专家迭代毫无用处——没有过滤,你只是在平均行为上做 SFT。若没有任何模型已展现出该行为,蒸馏就是错的工具,因为没东西可复制。而这些没有一个能超过它们训练所用的最佳轨迹;若你需要比当前能产出的任何东西都更好的行为,那才是真正需要 RL 的唯一情形。用有监督自举直到触顶;只为有监督可证地闭合不了的那道差距才伸手够 RL。