核心矛盾
基础模型的能力越来越强,但一旦部署就"定型"了。想让模型持续学新技能、新知识,就必须解决灾难性遗忘——学会新东西的同时把旧能力忘光。
问题在于,on-policy 学习(模型在自己生成的数据上训练)能有效缓解遗忘,但需要显式的 reward 函数,这在大多数场景下不可得。而更现实的学习方式——从专家演示学习——几乎都被 SFT(监督微调)主导,但 SFT 本质上是 off-policy 的,越学越偏,遗忘越严重。
这就是 SDFT 要解决的核心矛盾:如何在没有 reward 的情况下,实现 on-policy 学习?
SDFT 的巧妙设计
答案藏在模型的 in-context learning 能力里。SDFT 的核心思想极其简洁:让模型自己当自己的老师。
对于一个查询 x,模型扮演两个角色:
Student(学生):只看到查询 x,生成自己的 token 分布 P = π(·|x)
Teacher(教师):看到查询 x + 专家演示 c,生成演示感知的分布 Q = π(·|x, c)
训练目标是最小化反向 KL 散度 DKL(P ∥ Q),即让学生向教师靠拢。
关键洞察是:当模型通过 ICL 接收到专家演示后,其输出分布 Q 相比原始的 expert 数据分布,要接近基础模型的分布得多。教师给的训练信号本身就是 on-policy 的——它既保留了新任务的知识,又不会把分布拉得太远。演示起到了"软引导"的作用,而不是 SFT 那种"硬复制"。
Teacher 的参数通过 EMA(指数移动平均) 更新,φ ← αφ + (1-α)θ,保持稳定性。
为什么比 SFT 强?
SFT 直接在 expert token 上做交叉熵,等于把模型拉向一个和基础模型分布差异很大的目标——这就是遗忘的根源。
SDFT 的学生模型采样自自己的分布(on-policy),目标是跟上教师的分布,而教师的分布又因为 EMA + ICL 的双重约束,不会偏离基础模型太远。结果是:新任务学得更好,旧任务掉得更少。
量化对比
| 方法 | 新任务 (Science QA) | 旧任务平均 | 新任务 (Tooluse) | 旧任务平均 |
|---|---|---|---|---|
| Base (Qwen2.5-7B) | 32.1 | 65.5 | 42.9 | 65.5 |
| SFT | 66.2 | 53.4 | 63.2 | 56.0 |
| DFT | 54.8 | 60.2 | 64.2 | 60.8 |
| SDFT (Ours) | 70.2 | 64.5 | 70.6 | 65.4 |
顺序学习:真正的持续学习
最有说服力的实验是顺序学习。SFT 的结果是一个典型的"学习曲线崩塌"——每学一个新技能,前面学的就废掉一部分。而 SDFT 展现出了一条单调递增的学习曲线——模型稳步积累技能,没有任何回退。这才是持续学习真正该有的样子。
工程意义
SDFT 的工程价值在于它的极简性。不需要 reward model,不需要 replay buffer,不需要额外的正则化损失。唯一增加的超参数是 EMA 系数 α,实验中 α=0.01~0.05 都有效。
它本质上是对 SFT 流程的轻量级改造:把"直接拟合 expert 输出"换成"让学生跟上 ICL 教师的分布"。对于已经在做 SFT 的团队来说,迁移成本极低。
另一个值得关注的点:SDFT 用的是 Qwen2.5-7B,不是超大模型。这意味着 on-policy 蒸馏的效果在中等规模模型上已经非常显著,不需要等到千亿参数才能看到收益。
局限与思考
SDFT 依赖模型的 ICL 能力,这意味着如果模型本身的 few-shot 能力弱,教师分布 Q 可能不够好。作者也坦承这是一个理论上的依赖。此外,实验主要集中在 7B 规模,在更大模型上的效果以及和 LoRA 等参数高效微调方法的结合,都值得进一步探索。
总结
SDFT 的贡献不是提出了什么复杂的新架构,而是用一个极其优雅的洞察——模型的 ICL 能力天然就是一座连接 off-policy 演示和 on-policy 学习的桥梁——把持续学习从"需要 reward 的强化学习"拉回了"只需演示"的实用轨道。这种"用模型的已有能力解决新问题"的思路,本身就很有启发性。