这篇论文没有修改监督微调(SFT)的训练目标,而是先处理数据:把一条正确但不符合基础模型惯常表达的专家解题记录,多次切成前缀和后缀并重写后半段,保留基础模型更容易生成的版本,再做普通 SFT。论文把理想目标写成信息投影(information projection),并用 Metropolis-Hastings(MH,一种按接受概率在候选之间移动的采样算法)推导;公开代码采用的则是“只接受平均概率提高”的贪心搜索。
Q1. 为什么不直接用专家解题记录做 SFT?
正确数据仍可能不适合当前模型学习,因为它的 token 序列离当前模型的生成分布太远。
普通 SFT 把专家回答当成唯一目标,不考虑基础模型原本会如何表达。模型为了拟合一条低概率轨迹,可能发生较大的参数更新,并让新任务的表述方式干扰旧能力。同策略强化学习和自蒸馏通常更稳定,因为训练样本来自当前模型附近;代价是困难样本很难生成成功回答。
作者保留 SFT,但先用基础模型重写数据。专家解答仍放在生成提示词里,作为模型平时看不到的额外信息;新生成的后缀则来自基础模型。因此候选回答可以保留答案内容,同时更接近待训练模型自己的表达分布。
Q2. 它与强化学习、自蒸馏和加权 SFT 有什么区别?
这篇论文在训练前改写数据,让样本更接近待训练模型自己的分布。
| 方法 | 专家信息怎样进入 | 改变什么 | 困难任务的限制 |
|---|---|---|---|
| 普通 SFT | 直接拟合专家轨迹 | 不改训练目标,也不改数据 | 数据可能离学生模型的分布很远。 |
| 重要性加权 / KL 约束 SFT | 仍使用原始专家数据 | 修改损失函数,或增加 KL 约束来限制新旧模型的回答分布差异 | 需要可靠的重要性比率或正则项。 |
| GRPO / UFT(两种同策略训练方法;UFT 把监督微调与强化学习统一起来) | 专家轨迹作为生成时的额外上下文 | 根据当前模型自己生成的回答和奖励更新模型 | 基础模型仍可能难以产生可训练的成功回答组。 |
| OPSD(同策略自蒸馏) | 基础模型在额外上下文下充当教师 | 做自蒸馏 | 每次训练需要教师分布或多次生成结果。 |
| Sampling SFT | 专家解答约束候选改写 | 先改变数据分布,再做普通 SFT | 需要大量生成计算,并依赖改写前后语义不变。 |
把 MCMC(马尔可夫链蒙特卡洛) 用于语言模型并非这篇论文首次提出。已有工作用 MCMC 让采样分布偏向外部奖励,或偏向更集中的推理分布;这里从分布外的专家数据出发,改写后的结果用于继续微调,而不是只改善推理时生成的样本。
Q3. 从目标分布到公开代码,算法到底做了什么?
论文给出一个严格的目标分布和 Metropolis-Hastings(MH)推导,实验代码采用更激进的近似。两者必须分开讲。
固定一个问题,并令 C 表示所有与专家轨迹信息等价的回答。理想目标是:
也就是把基础模型的分布限制在正确集合 C 内。论文算法 1 从专家轨迹开始,逐段扩展回答。每次 MCMC 更新随机选择切分点,把当前前缀、原题和完整专家解答一起交给基础模型,让它重写后缀。理论算法应根据目标概率,以及从旧回答提议新回答和从新回答提议旧回答的概率,计算 Metropolis-Hastings 接受概率。
公开实现实际接受什么?
# official boost_sci.py / boost_math.py
target_log_prob_prop = get_logprobs_vLLM(p, question, prop)
if target_log_prob_prop[0] > target_log_prob_cur[0]:
gen = prop
target_log_prob_cur = target_log_prob_prop
get_logprobs_vLLM 返回回答中各 token 在基础模型下的平均对数概率。代码只在候选改写的概率更高时替换当前回答,没有计算正反向提议概率之比 κ(x|x') / κ(x'|x),也没有按照接受概率随机接纳概率下降的候选。因此公开实现更接近只向高处移动的贪心爬山。附录 C.2 将它称为近似,并说明这样做是为了少算一次反向提议所需的模型前向计算。
这处差别影响理论边界:论文关于 MH stationary distribution(经过足够多步后保持不变的目标分布) 和逐步逼近 p_C 的结论,只适用于理想的转移规则,不能直接当作公开代码的保证。图 5 只能说明在作者的化学实验中,随着更新次数增加,估计的 KL 距离降低且准确率上升。
真实案例:附录 A 的化学方程式
`CO₂ + H₂O → C₃H₆O₃ + O₂`
- 来源:论文附录 A 发布了原始回答与改写后的回答;生成逻辑对应公开脚本 `boost_sci.py`。
- 输入:问题要求配平方程,并保持反应物与生成物的原有顺序。专家解答给出正确系数和推理过程。
- 候选改写:代码随机选择一个 token 位置,把当前前缀与完整专家解答放进化学任务提示词,重新生成剩余后缀。
- 接受条件:只有候选改写在基础模型下的平均对数概率高于当前回答时,代码才会保留它。
- 输出检查:生成结束后,化学方程式检查器比较方程是否配平,并写入 `is_correct`。
- 公开结果:附录中的改写回答保持了正确配平,但论文没有发布这个样本逐轮接受或拒绝候选的记录。
公开脚本会把 is_correct 写进数据行,随后无条件把整条记录追加到逐行 JSON(JSONL)文件。仓库说明(README)说这些输出可以转换为 SFT 的提示词/回答数据,却没有说明是否先过滤 is_correct=0。论文报告最终改写数据集的正确率在 93.94% 到 95.86% 之间,所以“答案信息保持不变”在实现中只是经验比例,不是严格条件。
另一个小问题是脚本接受 --seed 参数,却固定执行 random.seed(0);传入其他随机种子不会改变 Python 的随机切分序列。
Q4. 实验结果能支持多强的结论?
Sampling SFT 在 Qwen 化学与数学任务上表现较好,也保留了更多旧能力;医疗任务和 Olmo 结果说明它并未在所有任务上超过同策略基线。
| 实验 | Sampling SFT | 最相关基线 | 怎么读 |
|---|---|---|---|
| Qwen2.5-7B 化学 | 66.0 | SFT 61.8;OPSD 61.8 | 新任务准确率高 4.2 个百分点;旧能力平均分 58.6,接近基础模型的 59.7。 |
| Qwen2.5-3B 数学平均分 | 53.4 | GRPO 45.7;UFT 45.2 | Sampling SFT 高 7.7 / 8.2 个百分点;再接强化学习可到 56.7。 |
| Qwen2.5-7B 医疗 | 45.8 | OPSD 46.6 | 新任务准确率低 0.8;旧能力平均分 51.6,高于 OPSD 的 50.1。 |
| Olmo-3-7B 化学 | 58.3 | OPSD 59.7 | 新任务准确率低 1.4;旧能力平均分 61.7,为表中最高。 |
一个支持作者机制解释的对照实验是跨模型数据错配:用 Olmo 改写的数据训练 Qwen,化学准确率只有 57.33%,低于普通 SFT 的 61.8%;把 Qwen 改写数据与原始数据各混一半,得到 62.14%,落在普通 SFT 与完整 Qwen Sampling SFT 之间。这说明改写数据的效果依赖目标基础模型,不只是把专家答案写得更流畅。
不过,全部结果都只来自一次实验。论文没有报告多个随机种子或置信区间,也没有把 Sampling SFT 与所有基线的总生成成本放在同一张表里。医疗任务的正确性还依赖 GPT-5-mini 判分,因此 0.8 个百分点的差异不宜过度解读。
Q5. 这条路线下一步应该怎样验证?
最需要的实验是在相同计算预算下,比较严格采样器、只接受概率上升的近似实现和简单改写。
第一组对照应实现论文里的完整接受概率,至少在较短序列上检查最终经验分布是否接近理论的 stationary distribution(经过足够多步后保持不变的目标分布)。第二组保留当前“只接受基础模型平均概率更高候选”的规则。第三组直接生成多个由专家答案引导的改写,再选基础模型平均概率最高的一条。三组固定候选生成次数与 token 预算,才能判断 MCMC 的转移结构是否真的贡献了额外效果。
数据方面,应明确 SFT 前是否过滤 is_correct=0,并同时报告过滤前后样本数、任务覆盖与最终准确率。若保留错误数据行,就需要解释它们为何仍属于正确集合 C;若过滤,则数据生成成本和筛选偏差都会改变。
最后,应该发布改写后的数据集、每轮候选被接受或拒绝的记录、模型存档,并补充多随机种子实验。当前仓库只包含化学/数学数据生成和评测脚本,没有医疗任务的数据生成流程,也没有声明仓库许可证。
Q6. 最终应该怎样评价这篇论文?
先改造训练数据再做 SFT 值得继续研究;实验显示它能改善新任务准确率与旧能力保留之间的折中,但“MCMC 保证”与公开算法之间仍有明显缺口。
这篇论文适合研究后训练、蒸馏与数据筛选的读者。我的判断是:想法比当前实证更成熟。它给出了一个清楚的问题表述,也展示了几组有说服力的结果;下一步若能把理论目标、近似采样器与公开数据逐项对齐,研究价值会更扎实。
主要来源:论文 v1 全文与附录、官方仓库版本 6d3e9f0bfaa98dcca534247dd35dc1b33dd8c428。代码检查日期:2026-10-06。仓库未发布改写后的数据集、训练模型存档或医疗任务的数据生成流程。
留言