← 返回 PaperDaily 视觉与图像

Apple Research新方法:不用教师也能提升代码模型

这篇论文最狠的地方,不是把代码模型调高了几个点,而是它几乎没加任何“外挂”:不要验证器,不要教师模型,不要强化学习,只靠模型自己的原始输出就能涨分。更有意思的是,提升还主要落在更难题上,说明它不是在“刷题套路”,而是在改模型分布本身。

Apple Research新方法:不用教师也能提升代码模型
🐉 龙哥读论文知识星球来了!
公众号每日8篇拆解不够看?星球无上限更AI领域论文、资讯、招聘、招博、开源代码,一站式干货,每日2分钟刷完即赚!
👇扫码加入「龙哥读论文」知识星球,前沿干货、实用资源一站式拿捏~ xingqiu_header

龙哥推荐理由:
这篇论文最狠的地方,不是把代码模型调高了几个点,而是它几乎没加任何“外挂”:不要验证器,不要教师模型,不要强化学习,只靠模型自己的原始输出就能涨分。更有意思的是,提升还主要落在更难题上,说明它不是在“刷题套路”,而是在改模型分布本身。


原论文信息如下:
论文标题:
Embarrassingly Simple Self-Distillation Improves Code Generation
发表日期: 2026年04月
发表单位: Apple
原文链接: https://arxiv.org/pdf/2604.01193
开源代码链接: https://github.com/apple/ml-ssd
项目链接: https://github.com/apple/ml-ssd

揭秘大模型自提升密码:简单自蒸馏为何有效

这篇 Apple Research 的论文,名字看着像在“谦虚”,内容却一点都不客气:不用验证器,不用教师模型,不用强化学习,只拿模型自己的原始输出做再训练,代码生成性能就能往上走一大截。更离谱的是,这不是只在某个模型上碰巧有效,而是跨了 Qwen、Llama、GPT-OSS 三个家族、4B 到 30B 多个规模都能涨。
封面
图1:简单自蒸馏(SSD)的整体流程。先从冻结模型里按特定温度和截断策略采样,再拿这些“未经验证的原始答案”做标准监督微调,最后用单独调好的解码参数推理。整个过程没有奖励模型、没有执行环境、没有老师,主打一个“朴素到让人怀疑人生”。
项目开源页给出的三步法也很直白:采样、微调、解码。听上去像“把模型自己吐出来的东西再喂回去”,但论文证明,这种看似土办法,确实能把代码模型从“会写”推到“更会写”。

论文主体思路

*表格超出部分左右可以滑动
项目 内容
应用场景提升大语言模型的代码生成能力,尤其适用于编程助手、代码补全和竞赛编程类任务。
问题建模给定问题提示词,仅依赖模型自身采样出的原始答案,通过监督微调让模型“向自己学习”。
模型Backbone及选择原因覆盖 Qwen、Llama、GPT-OSS 的 4B–30B 模型,包含 instruct 与 thinking 版本,便于验证方法的通用性。
损失函数标准交叉熵损失,也就是常规监督微调,不引入额外奖励项。
训练数据集来自 rSTARcoder seed 子集,去重后约 1 万道竞赛编程题;每题采样 1 个答案即可。
测试数据集主要是 LiveCodeBench v6,辅以 LiveCodeBench v5 做补充验证。
训练方法先用训练时温度 Ttrain 和截断策略采样,再用这些样本做 SFT;推理时再单独调 Teval。
实验效果整体提升明显,尤其在难题上更突出;Qwen3-30B-Instruct 的 pass@1 从 42.4% 提升到 55.3%。
方法优势不依赖教师、验证器和强化学习,工程链路短,数据管道简单,能直接复用现有模型。
方法缺点仍然依赖采样温度与截断配置,且收益主要在代码任务上验证,跨领域边界还需进一步确认。
这套方法的核心,不是“找更强老师”,而是把模型自己的输出重新整理一遍。训练时先让模型按较高或经过截断的温度去采样,再把这些样本当成监督信号做交叉熵微调。听起来像把家里旧衣服洗洗熨熨再穿一遍,但论文的结果说明:有些“旧衣服”本来就比想象中更值钱。
项目演示图把这个过程画得很清楚。模型先在训练时采样,后面再用不同的解码温度推理。关键点是:训练温度和推理温度不是一回事,前者负责“喂什么样的数据”,后者负责“怎么把学到的东西吐出来”。
项目整体效果示意图
项目整体效果示意图:SSD 先从模型采样,再用原始输出微调,最后单独调优推理温度。这个流程的狠点在于,它完全绕开了奖励模型、验证器和执行环境,工程上省了很多“本来就很贵”的环节。

核心设计

SSD 的流程其实很像“先让模型自己出题,再让它自己补课”。具体做法分三步:第一步冻结基础模型,用训练时的温度 Ttrain 和截断策略采样;第二步把采到的原始代码答案直接拿来做监督微调;第三步在推理时再用单独的 Teval 解码。这里的截断策略对应 top-k 和 top-p,论文里把它记作 ρ
图8:vLLM 解码流程
图8:论文使用的 vLLM 解码管线。先做温度缩放,再做 top-k 过滤,然后做 top-p 过滤,最后采样。这个顺序很重要,因为 SSD 的数据质量,很多时候就卡在“哪些候选被留下”这一步。
从工程角度看,这个设计极其克制。数据生成只有一个样本 N=1 也能跑,训练阶段就是标准 SFT,没有额外的 reward hacking 风险,也没有复杂的 on-policy 采样回路。对产品团队来说,这意味着它不是“研究员专属魔法”,而是能被放进现有训练管线里的普通工具。
更关键的是,SSD 不是简单地“把温度调高就完事”。论文后面会证明,训练时温度和推理时温度会形成一种有效温度 Teff=Ttrain×Teval 的耦合关系。也就是说,训练阶段改了分布,推理阶段再利用这个分布,二者是配合关系,不是独立按钮。

为什么不能只靠调解码参数?深入解析“精度-探索”冲突

论文给出的解释很像现实里的一道老难题:既要稳,又要会试错。在代码生成里,这个矛盾尤其明显。某些位置只能选一个几乎唯一正确的 token,这叫 lock;另一些位置则有多个都可能通向正确答案的分支,这叫 fork。前者需要精度,后者需要探索。
图4:精度-探索冲突
图4:单一的推理温度没法同时满足 fork 和 lock。温度低时,lock 位置更稳,但 fork 位置会被压得没啥想象力;温度高时,fork 位置更活,但 lock 位置的“坏尾巴”又冒出来了。说白了,模型不是不会,而是一个温度管全场,天然会互相打架。
这就是为什么只调解码参数,收益很有限。论文在基座模型上做了大范围温度扫描,结果曲线很平,说明单纯靠解码,最多是在原地挪一小步。原因也不复杂:温度调节改的是“怎么抽样”,但没改“模型内部到底偏向什么”。SSD 的作用更像是先把模型分布本身掰一掰,再让解码去发挥。
图2:SSD 优于最佳解码扫描点
图2:在标准全局解码策略下,SSD 仍然超过了基座模型调参能达到的最好点。也就是说,“只调温度”救不了的分数,训练后还能继续涨

令人惊讶的发现:在“垃圾”数据上训练也能提升模型?

这部分最容易让人皱眉:如果采样温度很高,模型吐出来的东西可能已经开始“发散”,那拿这种数据训练,岂不是在喂噪声?论文还真专门做了一个高温测试。结果很有戏剧性:在 Ttrain=2.0 且不截断时,样本里有不少内容已经接近胡言乱语,但微调后的模型依然能涨分。
图7:坏数据,好结果
图7:高温无截断采样会产生大量看起来不太靠谱的输出,甚至有 62% 的样本无法提取出有效代码;但微调后,模型仍然从 42.4% / 53.5% 的基线涨到 48.1% / 64.0%。这说明 SSD 不是在“相信垃圾”,而是在利用模型自身分布中仍然保留的可学习结构。
当然,这里不能把“垃圾数据也能涨分”理解成玄学。更准确地说,高温采样会放大探索,而后续微调会把其中有价值的结构重新压回模型里。只要没把分布彻底搞烂,模型还是能从这些样本中学到一些“更好的偏好”。这就像一个人做题时把草稿写得乱七八糟,但最后老师还是能从乱草稿里看出思路对不对。

SSD的理论基础:支持压缩与头部重塑

论文给 SSD 的理论解释,核心可以拆成两个词:支持压缩头部重塑。支持压缩,意思是训练时只保留采样后还能留下来的 token 集合,把低概率尾巴尽量踢出去;头部重塑,则是在这些保留下来的 token 里重新分配概率,让真正有用的候选更均衡、更可探索。
图5:fork 和 lock 的重塑
图5:SSD 会把 fork 变成更平的“平台”,把 lock 变成更尖的“高峰”。fork 处保留更多合理分支,lock 处则把无用尾巴压得更狠。它不是简单地一刀切降熵,而是按上下文把分布重新整理了一遍。
论文还用理论分解说明了一个很关键的点:SSD 不是单纯模仿原模型,而是同时在做两件事——一边压缩无效尾部,一边在保留下来的 support 上重塑头部形状。于是,模型整体会更“干净”,但并不等于更死板;相反,它给推理阶段留下了更合理的探索空间。
图6:真实模型中的尾部压缩与头部空间
图6:真实模型分析显示,SSD 让概率头更干净、尾巴更弱,同时让温度在头部区域更能发挥作用。换成人话就是:该收的时候收,该放的时候放,而不是一锅粥。

六步提升代码模型:SSD的全面实验与结论启示

表2:主要实验结果
表2:LiveCodeBench v6 / v5 的主结果。六个模型全部提升,且提升大多集中在中等和困难题上。最扎眼的是 Qwen3-30B-Instruct,pass@1 从 42.4% 提到 55.3%,这已经不是“抠一点点分”,而是实打实地把模型的可用性往上拽了一截。
实验设计也挺讲究。数据来自约一万道去重后的竞赛编程题,每题只采一个样本,训练用的是标准 SFT,评测则主要看 LiveCodeBench v6,并用 v5 做补充确认。也就是说,这不是靠“多采几次碰运气”,而是在很克制的条件下依然拿到了稳定收益。
图9:超参搜索与有效温度
图9:不同超参数组合下,性能大体沿着有效温度带变化;加入截断后,上限还能再抬高一点。说明 SSD 不是“拍脑袋选个温度就灵”,而是确实存在可解释的调参规律。
更有意思的是,SSD 的收益并不只是体现在 pass@1。很多模型在 pass@5 上涨得更明显,说明它并没有把输出空间压扁,反而让多个候选解都更靠谱了。这对代码任务很重要,因为代码不是背答案,很多时候是一道题有多条可行路径,能不能把“可行路径池”保住,比死盯着单一路径更重要。
图3:训练温度与推理温度的组合关系
图3:训练温度和推理温度会通过有效温度带形成组合效应;加入截断后,整体上限更高。这个结果很像在说:不是单点参数神奇,而是训练时把分布修好以后,推理时才有更大的操作空间。
图15:高温压力测试的扩展视图
图15:高温无截断训练虽然会产出很多看起来不太像代码的样本,但最终模型仍能提升,尤其在难题上更明显。这个结果很反直觉,但也说明 SSD 的关键不是“样本必须完美”,而是“样本里有没有足够多的可学习结构”。
表1:训练范式对比
表1:SSD 和其他训练范式的对比。它最突出的地方,就是把 NoTeacher、NoVerifier、NoRL 这三件“常规外挂”全都拿掉了,整个训练链路变得异常干净。
从结论上看,这项工作最值得记住的不是“它很强”,而是它证明了模型自身输出也能成为有效训练信号。这对工程实践的意义很直接:当高质量标注贵、验证器难、RL 不稳定时,SSD 提供了一条成本更低、链路更短的后训练路径。代价也同样明确:它依赖一个还算靠谱的基础模型,且目前最强证据集中在代码生成场景。

总结与未来展望

SSD 的价值,简单说就是把“自我学习”从口号变成了可操作的工程流程。它不是万能药,但它足够便宜、足够简单、足够可复现,尤其适合那些已经有不错基础模型、又想继续榨出代码能力的团队。未来如果要继续往前走,比较值得看的方向有两个:一是把这种自蒸馏机制推广到更多结构化任务,二是进一步研究不同任务里 fork 和 lock 的比例,看看 SSD 能不能从“代码好使”变成“更广泛地好使”。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

这篇论文到底解决了什么问题?它解决的是“代码模型还能不能靠自己继续变强”这个问题。答案是能,而且不靠老师、不靠验证器、不靠 RL,只靠模型自己的原始输出就能带来稳定提升。

文中的 fork 和 lock 是什么意思?fork 指的是有多个合理后续分支的位置,需要探索;lock 指的是几乎只有一个正确 token 的位置,需要精度。SSD 的核心,就是让这两类位置各得其所,而不是拿一个温度硬管全场。

“坏数据也能训练出好模型”是不是说明数据质量不重要?不是。更准确地说,是只要基础模型足够强,采样里仍然保留了可学习结构,SSD 就能把这些结构重新吸收回来。但这不等于可以随便喂垃圾,太烂的样本还是会把训练带沟里。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★☆☆ 不是提出了一个复杂新框架,而是把“模型自蒸馏”这件事做到了极简且有效,创新点在于机制解释和工程可用性。

实验合理度:★★★★☆ 覆盖多个模型家族和两个版本的 LiveCodeBench,且有解码扫描和高温压力测试,验证链条比较完整。

学术研究价值:★★★★☆ 它把“自我生成数据也能提升模型”这件事讲清楚了,尤其对后训练、分布重塑和解码机制研究都有启发。

稳定性:★★★☆☆ 结果不错,但仍依赖采样温度、截断和基础模型质量;离“拿来就能无脑部署”还有一步。

适应性以及泛化能力:★★★☆☆ 跨模型家族泛化不错,但目前主要证据仍集中在代码生成,跨到数学、通用推理还需要更多验证。

硬件需求及成本:★★★★☆ 训练仍然要跑大模型微调,但没有 RL 和 verifier 的额外开销,整体比复杂后训练路线省事得多。

复现难度:★★★★☆ 项目已开源,数据生成和评估管线也给得比较完整,复现门槛不算高。

产品化成熟度:★★★☆☆ 适合做代码模型后训练的一个模块,但还需要结合具体业务做安全性、稳定性和收益评估。

可能的问题:方法很巧,但并不神秘;它的上限仍受基础模型和采样质量约束,跨任务有效性也还没完全证明。


主要参考文献

Ruixiang Zhang, Richard He Bai, Huangjie Zheng, Navdeep Jaitly, Ronan Collobert, Yizhe Zhang. Embarrassingly Simple Self-Distillation Improves Code Generation. arXiv:2604.01193, 2026.
Apple 开源项目:ml-ssd(https://github.com/apple/ml-ssd)

*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!       

end
欢迎加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥),根据格式备注,可更快被通过且邀请进群。
『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群
wechat_helperdianzan
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。