03 / Mid-Training进阶

能力塑形:代码、数学、推理与合成数据

从提高续写概率到提供 RL 可探索的候选

系统比较合成推理、蒸馏、数据再平衡与后训练接口,避免把格式与模型真实能力混为一谈。

READ WITH A QUESTION

读完这一章,你应该能够

  • 分清知识、推理、格式能力
  • 设计可验证合成数据的血缘
  • 衡量中训练对后续SFT/RL的真实收益
前置理解 能阅读 Python/PyTorch · 理解交叉熵;梯度直觉可先补充
本章目录 · 0 个小节

一个“会推理”的分数可能来自四种变化

模型可能学到了新知识,学到了新的解题步骤,学会了把原有能力按要求输出,或者只是适应了评测格式。四者都可能提高一次 benchmark 分数,但迁移范围完全不同。课程分析:能力塑形首先要定义想改变的行为,然后设计能区分替代解释的评测。

现代代表性案例提供了两种接口:Qwen3 在预训练阶段就提高推理相关数据权重;DeepSeekMath 使用数学相关 continued pretraining,再接指令与 RL 阶段。两者支持“能力准备不必等到后训练才开始”,并不支持把所有推理收益归给其中一个阶段。Qwen3 公开阶段 DeepSeekMath 论文

数据形态和 loss mask 要一起看

样本形态可能的训练目标容易误解的地方
代码仓库与依赖说明全文 next-token能续写文件不等于能修复真实 issue
数学教材与解答全文或局部 loss公式损坏、答案复制会伪造学习信号
问题 + 教师推理 + 答案全文、response-only SFT、筛选池长链不代表每一步正确
成功/失败执行轨迹SFT、偏好、RL replay工具 observation 不应自动当 policy action
合成环境任务生成、验证与难度调节环境可能奖励漏洞而非技能

同一条问答既可以被视为原始文本,也可以被视为 instruction-response pair。若全文训练,模型还会学习问题分布;若只在回答上计算 loss,权重集中到回答。某个阶段叫“pretraining”还是“SFT”,不能替代对 input/label/mask 的检查。

构造一个有保留分布的能力池

CODE / 可复制
定义未见任务能力与失败簇
选择真实来源或构建任务生成器
教师生成候选,保留采样与版本
验证答案/编译/执行/约束
去重、难度标注、反泄漏
能力池 + 通用 replay + 格式控制
短训练消融 → 能力与保留评测
固定预算 SFT/RL 接口测试

这里每条边都可能造成选择偏差。只保留一次生成就成功的题,会集中到容易任务;只保留长答案,会引入长度偏好;按一个 grader 过滤,会把它的盲点变成数据分布。必须把“未被选中”的比例与原因保留下来,否则看不到筛选后的世界。

合成推理数据:先验证什么,再监督什么

课程建议:为每条数据保存 task_id, teacher_version, prompt_version, seed, verifier_version, verdict, difficulty_bucket, origin_cluster。验证应尽量覆盖结果与中间关键约束:数学可以检查可计算的步骤,代码可以加入隐藏测试和变形测试,数据分析可以验证输入输出类型、聚合守恒和随机种子。

结果正确不证明推理链正确。若答案能从 prompt 泄漏直接复制,长链只是装饰;若教师靠一次猜测成功,SFT 会把不可靠路径当正例。可以保留多样候选,用独立 verifier 或不同检验方式筛选,并在“只有问题无答案”的未见集上测迁移。模型 judge 有用,但它的错误率和一致性也要抽查。

蒸馏将教师产生的行为压入学生分布,成本包括候选生成、验证和学生更新。DeepSeek-R1 报告提供了推理轨迹蒸馏案例;公开报告不等于完整数据生成系统已全部公开。论文实验 当教师可用性、许可证或生成预算受限,不能把报告级成功直接变成你的可重复训练配置。

怎样判断它改善了后训练起点

一个关键观察是:固定每题采样 kk 次时,是否产生更多不同的正确候选?另一个是:相同 rollout token 预算下,后续 RL 是否更快得到有效非零奖励。再加上保留能力与生成成本,你才能判断中训练值不值得。

课程分析:若中训练只让答案更长,pass@k 提高可能只是推理 token 更多;若格式更适合 verifier,奖励增长也可能只是解析成功率。应该至少报告 token-normalized success、parse success、valid execution、task success 和新颖解法比例。不同长度的任务也要分桶,避免短题主导平均值。

稀疏奖励的一个直觉模型是:若每次独立采样成功率为 pp,kk 次至少成功一次的概率为 1−(1−p)k1-(1-p)^k。真实采样往往相关,因此这个式子是教学近似,不是 pass@k 的统计估计器。它仍揭示:极低成功率时,仅增加 rollout 并发可能消耗巨大预算,而能力塑形可能改变探索的起点。

真实源码对照:数据权重怎样进入训练

OLMo-core SourceMixtureConfig 将目标比例和重复上限作为不同字段;官方 midtrain 配置 则展示如何将能力 mixture 接入训练器。这些透明代码用于验证“调节数据怎样改变训练输入”,不冒充 Qwen 或 DeepSeek 的私有数据 pipeline。

阅读任务是把一个目标能力描述映射到三个可查字段:来源池选了什么、实际暴露多少 token、哪些 token 参与 loss。无法回答这三项时,论文中的“高质量推理数据”还不是一个工程规格。

可运行实验与生产差异

CODE / 可复制
python3 -m labs.run --experiment mixture --seed 7
python3 -m labs.run --experiment preference --seed 7

双领域实验让你看到配比如何改变参数目标,偏好实验说明已有候选如何被重新排序。它们是课程编写的简化实现,不涉及真实教师模型或大规模 RL。把两者串起来思考:先改变可产生的行为,再优化行为偏好,与只做最后一步有何差别?

真实生产还需要数据版本冻结、去重索引、分布式生成/训练解耦以及追踪每一条样本的教师与 grader。若生成速度比验证快,应限制队列并保存失败原因;不能把未验证样本为了赶 GPU 利用率直接混入成功池。

失败案例与工程练习

代码能力提升但跨仓库修改下降:可能模型学会了独立函数模板,却缺少环境反馈与依赖理解;补实验应进入 Agent 环境与边界。数学准确率提升但语言混乱:区分推理内容与输出行为,通过格式回归而不是无限增加数学数据排查。目标域增益快速饱和:检查独有题簇和重复曝光,必要时改任务生成器而非只扩大同源采样。

工程任务:为“单测驱动的 Python 数据清洗”设计一套能力塑形数据:至少三个难度桶、两种独立验证机制、一类已知 verifier 漏洞,以及通用语言和代码能力保留集。规定 20% 数据失败后如何聚类和修订生成规则。最后比较 continued pretraining、response-only SFT 与直接 RL 的固定预算实验,明确哪种结果会推翻你的原始选择。

MAKE IT RUN

把这一章放进实验里

调整变量,观察机制,再运行本地 Python 实验验证。

进入实验

本章证据与源码

引用代表相应来源支持的结论,不意味着公开了完整训练配方。

论文实验Qwen3 Technical ReportQwen Team · arXiv:2505.0论文实验DeepSeekMathShao et al. / DeepSeek-AI · arXiv:2402.0论文实验DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement LearningDeepSeek-AI · arXiv:2501.1源码观察OLMo 3 7B:官方 Midtraining 配置与恢复语义allenai · 0589a034f721源码观察OLMo-core:数据源比例与重复上限allenai · 0589a034f721

留下你的工程判断

记录一个还没有解释清楚的现象,或下一次实验要控制的变量。笔记仅保存在当前浏览器。

自动保存在本机 · 可在“我的学习笔记”导出
理解机制,比记住结论更重要。