后训练是个数据问题
很多后训练项目最后拼的不是 PPO、GRPO 还是 DPO,而是你能不能持续造出好数据:合成轨迹、自我博弈、拒绝采样,再加一个足够可靠的裁判。
在刚接触强化学习微调时,很容易陷入算法缩写的崇拜:这该用 PPO,还是 GRPO,抑或是 DPO?直到我在训练器中挣扎,看着 loss 平稳下降但模型死活学不到目标行为,或者评测指标出现神经质般的震荡时,我才明白一个物理定律:优化器只是在爬坡,而这个坡的陡峭程度与方向,完全是由喂进去的数据分布决定的。
要想把一个 Base 模型中沉睡的潜在能力唤起 (elicit),并在巨大的状态空间里将其塑形 (shape),单纯对梯度进行把戏远远不够。真正的战场在更上游:如何无中生有地制造出大量含有致密逻辑信息的高质量样本,并把那些有毒的噪声无情地截杀掉。
架构重组:四台数据引擎的咬合
在 ORBIT 的体系里,我编写了四座独立的流水线模块,全部输出标准化的 JSONL 数据 (messages, env, score, task_id)。
1. 确定性合成轨迹:在复杂的长链路规划任务中,人工标注昂贵且错漏百出。我构建了环境模拟器直接生成确定性的轨迹。在 orbit/data/liveweb_teacher_gen.py 中,系统完全不调用 LLM,而是通过回放缓存的 Web 工具数据直接拼装出完美的组合调用流。这正是类似 WebSailor (2025) 中倡导的“高信息熵合成数据”思路。
2. 自我博弈 (Self-Play):在封闭规则下,让生成器在 OpenSpiel 沙盒里疯狂对弈,只保留那些导向胜利的轨迹。
3. 拒绝采样 (Rejection Sampling):其实就是 Best-of-N 的工程化降级,将推理算力转化为数据密度。它的有效性是有严谨的数学支撑的。如果单样本存活概率为 ,那么采 条至少存活一条的概率是 。当 时,存活率逼近 88%。在期望意义上,保留 Top-1 样本带来的隐式策略改进,等同于相对于 Base 策略产生了约为 nats 的 KL 散度偏移。正如 Llama 2 (Touvron et al., 2023) 所验证的,这是一种在有界偏离内获取更高质量梯度的免训练强化范式。
4. 裁判验证器 (Judge/Verifier):前面所有的引擎都依赖于它。这台处于 orbit/verifiers/static.py 中的冷血验证机器,或者是根据复杂 rubric 运转的静态规则判定。这直接响应了 Constitutional AI (Bai et al., 2022) 中将自我批评提纯为监督信号的哲学。
原理推演:飞轮效应的物理方程
这四台引擎组合起来,形成了一个严密的反馈飞轮,这也正是 STaR (Zelikman et al., 2022) 最初揭示的“生成 过滤 微调”循环:
[ Synthesizer (Self-Play) ] =======> [ Verifier (Filter / Score) ]
^ |
| v
[ Stronger Generator ] <======= [ SFT / RLHF on Survivors ]
我将这个过程用数学模型量化。记 为第 轮训练后验证器的通过率(良率)。假设每一轮微调带来的能力提升相当于将通过率的几率 (odds) 乘以一个放大系数 ,其动力学可以描述为:
即便在 时只有 () 的良率,只要 ,四轮之后几率就会膨胀 16 倍,通过率跃升至约 。这里的生死线就在 。如果验证器带有噪声,放过了有毒样本, 就会向 跌落。一旦 ,整个引擎立刻抛锚,飞轮变成了空转。
硬核落地:把工程预算砸向验证器
在这个物理规律面前,我彻底改变了算力分配逻辑:
- 我几乎不再碰底层的训练器代码,把所有的工程精力投入到生成器和那些极其复杂的验证规则(Rubric)中。
- 良率 是真正的试金石。它不仅预测了下一轮模型能力的上限,更是裸露的成本账单。为了凑齐 条训练种子,需要消耗 的推理算力。如果能把漏洞百出的裁判写得更严格,良率的微小跃升将直接砍掉一半的账单。
在后训练的深水区里,不存在什么魔法梯度,只有冷冰冰的数据过滤与无情的验证逻辑。
评论