← 返回资料站  /  Recursive Self-Improvement
论文 自提升极限分析 背景

When AI Reviews Its Own Code: Recursive Self-Training Collapse in Code LLMs

AI 自审自训:代码模型递归自训练的坍缩动力学
一句话在 4 个小型代码 LLM(1.1B-7B)上跑 5 轮'自己生成代码→过滤→自己微调'的闭环:不过滤坍缩最快(SantaCoder MBPP+ 从 0.294 跌到 0.008,-97%),compile/静态检查等外生过滤只能减缓、不能阻止坍缩,而用模型自己的 perplexity/二分类打分做过滤会进入 rubber-stamp 状态——接受率越来越高、正确率越来越低。

这是什么

这篇文章研究 model collapse 在代码域的具体形态:AI 生成的代码进入真实仓库,之后又被爬进下一代模型的训练语料,形成仓库级的自训练闭环。传统上 PR review、编译、测试会打断这个闭环,但 AI 写码的速度已超过人审的速度,而 code review 本身也在被 AI 接管——如果 AI 写码、AI 审码,验证信号就和被训练的分布耦合在一起了。

作者把 review 形式化为 gated distributional reweighting,比较三种递归微调 regime:no review(全部回收)、Human-gate(模型无关的外生过滤:compile 检查、重复率/长度等静态规则)、AI-self-gate(模型自身信号:masked-completion perplexity 取最低 25%,或 binary self-scoring 取最高 25%)。理论上证明:在 self-confirming acceptance 条件下,AI 自审门会退化为无门自训练;并给出递归重训下表示层协方差谱集中的分析。结论指向一个 RSI 关键命题:稳定的递归自训练需要 exogenous verification,模型耦合的自审不行。

主结果总览:4 个模型在 Human-gate(左列,Compile+Quality 平均)与 AI-self-gate(右列,Binary+PPL 平均)下,HumanEval+(上)和 MBPP+(下)的 5 轮轨迹。虚线为各模型预训练基线。所有曲线在 1-2 轮内即大幅跌破基线,MBPP+ 掉得比 HumanEval+ 更狠;两种门都改变不了坍缩趋势,只改变速度。
主结果总览:4 个模型在 Human-gate(左列,Compile+Quality 平均)与 AI-self-gate(右列,Binary+PPL 平均)下,HumanEval+(上)和 MBPP+(下)的 5 轮轨迹。虚线为各模型预训练基线。所有曲线在 1-2 轮内即大幅跌破基线,MBPP+ 掉得比 HumanEval+ 更狠;两种门都改变不了坍缩趋势,只改变速度。

机制与做法

实验闭环

四个模型(SantaCoder 1.1B、StarCoder2-3B、Qwen2.5-Coder-1.5B、Code Llama-7B)各跑 5 轮:每轮从固定 prompt 池生成代码,过滤门选出 5,000 条被接受样本,微调 3,000 步得到下一代模型(5 轮共 15k 步)。Human-gate 方法生成直到攒够 5,000 条;AI-self-gate 方法每轮生成 20k 条取头/尾 25%。五种策略(Vanilla / Compile / Quality / PPL / Binary)共享同一优化器和调度,只有过滤策略不同。评测用 bigcode-evaluation-harness + EvalPlus,基准为 HumanEval(+)、MBPP(+)、LiveCodeBench。

rubber-stamp 机制

核心理论点(Theorem 1):若 AI 审查器对当前模型高概率生成的代码给出近乎相同的接受分(self-confirming 条件),门控就不再改变训练分布,AI 自审等价于无门自训练。实验证据是 filter pass rate 的漂移:PPL 门的通过率从 R1 的 0.167 涨到 R5 的 0.235,自校准信号随生成器一起退化——审查分在涨,基准正确率在跌,即'橡皮图章'状态。外生门(compile、固定静态规则)的信号不随模型漂移,所以能保留部分有效性,但也挡不住长程语义漂移。

关键结果

实证核查

扎实代码已开源且结构与论文管线一一对应,过滤器实现与正文描述基本一致(仅一处超参出入);但规模小、无第三方复现,'Human-gate 挡不住坍缩'的结论只针对 compile/静态规则这种弱代理,不能外推到真实人审或执行测试门。
论文声称代码开源于 github.com/Hik289/code-retraining,包含完整的生成-过滤-重训-评测闭环。
仓库真实存在(2026-06-26 创建,与 arXiv 挂出同日),src/filters.py 实现了 compile/quality/PPL/binary 四种门,scripts/ 下有 run_selfplay_{binary,compile,ppl,quality}_filter.sh 等按策略拆分的闭环脚本和 EvalPlus/LiveCodeBench 评测脚本,与论文 5 策略×4 模型的设计对得上。但 3 stars、0 issues、S2 引用 1,尚无任何第三方复现记录。
Quality 门为'重复率 ≤ 0.3、长度 ≥ 50 tokens'的固定静态规则(正文 Filtering strategies 段)。
src/filters.py 中 check_length 默认 min_completion_tokens=50 与论文一致,但 check_repetition 默认 threshold=0.5 而非论文写的 0.3(--repetition_threshold 默认值 0.5),属于正文与代码默认值的小出入,不影响主结论。
'Human-gate 过滤减缓但不能阻止坍缩'。
论文 Limitations 自己承认:所谓 Human gate 只是 compile + 静态规则,是真实 PR review 的简化代理,不检查语义/安全/设计;也没有测执行测试(exec-based)门。所以这条结论的准确表述是'弱外生信号不够',并不能证明带单测执行或真人审查的门也失效——引用这篇时要注意别过度外推。
结论适用于'code LLMs'的递归自训练。
实验只覆盖 1.1B-7B 的旧一代小模型(SantaCoder、StarCoder2-3B、Qwen2.5-Coder-1.5B、Code Llama-7B),每轮仅微调 3k 步、5k 样本,且只有 Python。前沿规模模型是否同样坍缩、以及合成数据与真实数据混合(而非全替换)的情形,文中只有附录 Mixed Training 简单一节,证据强度有限。

与我们方向的关系

对 RSI 方向这是'自提升闭环何时坍缩'的反面对照:它给出了一个可检验的机制——验证器与生成器分布耦合时,过滤会退化为 rubber-stamp,自训练等价于无门坍缩。这正是各类 self-refine / LLM-as-judge / self-rewarding 方案的共同软肋,也解释了为什么 AlphaZero 式的成功案例都依赖 exogenous verification(棋类规则、编译器、单测执行、形式验证)。做自提升实验设计时,可以直接借用它的 filter pass rate 漂移作为 rubber-stamp 早期检测指标:接受率上升 + 基准下降的剪刀差,比等最终指标崩掉更早发现闭环失效。

阅读笔记

注意作者用词:paper 里的 'Human-gate' 其实完全没有人参与,只是 compile + 静态规则,命名容易误导。另外正文与代码有一处超参不一致(repetition threshold 0.3 vs 0.5)。SantaCoder 表里 Compile/Quality 的 FPR 恒为 1.000 是'生成到攒够 5000 条'的记账方式所致,不是过滤器不工作。

材料清单

TeX 源码
已存档:Raw/when-ai-reviews-its-own-code/source/
代码github.com/Hik289/code-retraining
完整闭环脚本(生成/四种过滤/重训/EvalPlus+LCB 评测);catalog 里 code_url 为空,实际论文摘要末尾有给

同类条目