Industry & PracticeResearch & Benchmarks
代码 大 语言 模型 中 健全 且 对抗 性 测试 生成 的 两 阶段 强化 学习
强化学习(RL)通过可执行反馈显著推进了代码大语言模型(LLM)的发展。针对编程问题的反馈主要来自特定测试用例,而高质量测试用例往往稀缺,因为它们必须同时具备健全性(sound)和判别力(discriminative)。
In this piece
代码大语言模型中健全且对抗性测试生成的两阶段强化学习(中文全译)
翻译说明:本文是 arXiv 论文 Two-Stage Reinforcement Learning for Sound and Adversarial Test Generation in Code LLMs(arXiv:2609.03955)的中文全译,由智测团队翻译。原作者:Jiacheng Xu、Wentao Zhang、Zhiyi Lyu、Fuxiang Zhang、Chaojie Wang、Yang Liu、Bo An(南洋理工大学、Skywork AI)。原文以 CC BY 4.0 许可发布。译文保留原文全部章节、数据与结论;参考文献列表从略。
摘要
强化学习(RL)通过可执行反馈显著推进了代码大语言模型(LLM)的发展。针对编程问题的反馈主要来自特定测试用例,而高质量测试用例往往稀缺,因为它们必须同时具备健全性(sound)和判别力(discriminative)。
因此,我们转而研究使用学习到的模型自动生成测试用例。我们发现这天然是一个对抗性强化学习问题:模型需要根据求解器当前的失败模式,生成有效的测试用例作为反例。
我们提出了测试用例扩展(Test Cases Scaling, TCS),一个用于有效测试生成的两阶段强化学习框架。两个阶段都从滚动策略对齐缓冲区训练测试生成器:第一阶段生成与参考解一致的测试,第二阶段将缓冲区限制为当前失败模式,并学习反例测试。
在 TACO 和 LiveCodeBench 基准上,TCS 改善了 pass@1 以及基于生成测试的推理时答案选择性能。
我们发现,学习到的测试生成器还能有效改进对其他大语言模型输出的选择。
1 引言
图 1: TCS 利用真实解实现对抗性测试用例生成。
代码生成是大语言模型最具影响力的应用之一,它提高了开发者生产力,降低了非专家的使用门槛 (Dong et al., 2025)。现代代码大语言模型已远超启发式系统 (Gulwani, 2010; Roziere et al., 2023; Hui et al., 2024; Dong et al., 2025),而强化学习(RL)已成为一种特别有效的后训练工具,因为候选程序可以通过在测试用例上的执行进行验证,其表现通常优于仅基于昂贵演示的监督微调 (Shojaee et al., 2023; Le et al., 2022; Luo et al., 2025)。
随着代码模型的进步,瓶颈从生成合理的解决方案转向验证哪个候选方案实际正确。这使得推理时自验证具有吸引力:生成测试,执行候选程序,并选择具有最强实证支持的程序。对于代码任务而言,这种方法很有吸引力,因为它依赖于可执行证据而非通用标量奖励。但只有当生成的测试可靠且有针对性时,基于测试的选择才有帮助。不健全的测试可能导致候选排名错误,而弱测试则无法暴露细微错误。在我们的实验中,自生成测试提供了实质性帮助,但当单独使用时,精心策划的公开测试仍然可以超越它们,这表明挑战不在于生成更多测试,而在于生成更好的测试。
这一挑战解释了为什么强化学习在此处超越了监督模仿。测试生成是一个多解、效用驱动的目标:许多测试可以是正确的,其判断依据是执行结果而非精确目标匹配。该目标是非平稳的,因为有信息量的测试取决于求解器当前的失败模式。代码生成可以针对固定测试套件进行优化,而测试生成必须产生的测试既要针对参考解保持健全,又要能区分看似正确的错误代码。仅优化健全性会产生琐碎的测试,而从零开始的反例奖励稀疏且不稳定,使得奖励设计尤为重要 (Chen et al., 2024; Fu et al., 2025)。
因此,我们研究了一种执行可验证的后训练设置,其中真实解可用于验证生成的测试。这使我们能够分离两个容易混淆的目标:通过真实验证进行健全性控制,以及针对模型演化失败模式的候选条件对抗性。该设置为理解什么使学习到的测试生成有用提供了干净的测试床。基于这一观点,我们提出了测试用例扩展(TCS),一个两阶段强化学习框架,通过阶段特定的奖励和滚动策略对齐缓冲区联合训练代码生成和测试生成。第一阶段学习与真实解一致的测试,而第二阶段学习候选条件的反例测试,这些测试通过参考解但在看似错误的程序上失败。在推理时,学习到的验证器为候选程序生成测试,我们选择在汇集测试中具有最高通过计数的候选。
在 TACO 和 LiveCodeBench 上的实验显示,训练时和推理时的性能均有一致提升。本文的主要贡献有三点:
- 我们认为,代码大语言模型的有效测试生成既需要健全性控制,也需要候选条件对抗性,并在执行可验证的后训练设置中将这一观点形式化,其中生成的测试可以对照真实解进行检查。
- 我们提出了测试用例扩展(TCS),一个实例化这些原则的两阶段强化学习框架:第一阶段学习真实验证的测试,第二阶段通过阶段特定奖励和策略对齐缓冲区学习候选条件反例测试。
- 我们为基于测试的推理时扩展提供了理论和实证证据。我们推导了在自生成测试下基于通过计数选择的指数可靠性界限(第 3.4 节),并且在 TACO 和 LiveCodeBench 上的实验表明,相较于联合监督微调、仅代码强化学习和仅测试强化学习均有改进。学习到的验证器还可以改进强外部大语言模型输出的选择。
2 背景
2.1 强化学习
强化学习(RL)微调策略 π_θ 以最大化任务奖励。我们使用组相对策略优化(Group Relative Policy Optimization, GRPO)(Shao et al., 2024),它通过使用同一提示的多个输出的平均奖励作为基线,避免了独立的值函数模型。对于每个提示 x,GRPO 采样一组 G 个输出 {y_i}_{i=1}^G 并计算组相对优势:
$$\mathcal{J}(\theta) = \mathbb{E}_{x,\mathbf{y}}\Bigg[\frac{1}{G}\sum_{i=1}^{G}\min\!\Big(\rho_{i}A_{i},\;\bar{\rho}_{i}A_{i}\Big) - \beta\,D_{\mathrm{KL}}(\pi_{\theta}\,\|\,\pi_{\mathrm{ref}})\Bigg]$$
(1)
其中期望简写为 x ~ D 且 y = (y_1, ..., y_G) ~ π_{θ_old}^G(·|x)。这里 ρ_i ≜ π_θ(y_i|x) / π_{θ_old}(y_i|x) 表示重要性采样比率,ρ̄_i ≜ clip(ρ_i, 1-ε, 1+ε),ε 是裁剪范围,β 控制 KL 正则化的强度,D_KL(·‖·) 是 KL 散度。
优势 A_i 定义为:
$$A_i \triangleq \frac{r_i - \operatorname{mean}(r_1, \dots, r_G)}{\operatorname{std}(r_1, \dots, r_G)}$$
其中 r_i 是响应 y_i 的奖励。
图 2: 测试用例扩展(TCS)两阶段训练流程概览。
2.2 代码和测试用例生成
代码生成的任务是从自然语言问题描述 P 生成满足规范的程序 C。由于许多问题允许多种正确实现,候选程序根据测试套件 T = {(I_i, O_i)}_{i=1}^m 进行验证。在代码生成的强化学习中,标准奖励函数 R^c 评估生成的程序 C 是否通过假设的理想测试套件 T* (Yu et al., 2025a):
$$R^c(C, \mathcal{T}^) = \begin{cases} 1, & \text{if } \forall(I_i, O_i) \in \mathcal{T}^: \mathrm{Exec}(C, I_i) = O_i \\ 0, & \text{otherwise.} \end{cases}$$
(2)
因此,测试质量对于训练和评估都至关重要。有用的测试套件应该 (i) 对参考解健全,(ii) 具有足够的判别力以暴露可能错误实现的失败。生成同时满足这两种属性的测试正是 TCS 所针对的挑战。这反映了竞争性编程实践,其中构建能够打破看似正确解决方案的测试本身就是一项核心技能,而不仅仅是评估工件。
3 测试用例扩展(TCS)
3.1 问题形式化
每个训练实例包含问题描述 P、真实解 C* 和测试套件 T = {(I_i, O_i)}_{i=1}^m。此设置为同一个大语言模型分配了两个不同的角色:
- 求解器:给定问题描述 P,求解器旨在生成代码 C,使其通过测试套件 T 中的所有测试用例,即 ∀(I_i, O_i) ∈ T: Exec(C, I_i) = O_i。
- 验证器:给定问题描述 P 和候选程序 C,验证器旨在生成测试用例 (I_v, O_v),使其在 C* 下健全(即 Exec(C*, I_v) = O_v)并对错误候选具有判别力(即当 C 错误时 Exec(C, I_v) ≠ O_v)。
与仅优化求解器的强化学习流水线不同,TCS 显式地将同一模型训练为验证器。真实解为健全性提供了清晰的信号,而候选程序 C 定义了对抗目标。这种共享策略设置很重要:验证器不是外部检查器,而是同一模型的能力,它随后评估自己生成的候选。验证器训练是代码理解的一部分:为了生成健全的反例,模型必须共同推理规范、输出和错误模式。这在训练期间(测试生成加深了对边界情况的推理)和推理期间(验证器通过自生成测试对候选进行排名)都有帮助(第 3.3 节)。
3.2 强化学习训练
强化学习非常适合此设置,因为执行为多解目标提供了直接的效用反馈。但奖励设计至关重要,而且测试生成比代码生成更难,因为有用的测试必须对参考解健全,同时对可能的错误代码具有对抗性。同时优化两者是脆弱的:忽略健全性的奖励会导致奖励黑客攻击,而从一开始就要求完整反例的奖励过于稀疏,难以学习。因此,TCS 采用分阶段的验证器课程:第一阶段通过密集反馈学习健全性,第二阶段学习针对错误解的候选条件反例。
我们通过混合来自代码数据集 D 的提示和在线从策略对齐缓冲区 B 构建的验证器提示,联合训练代码生成和测试生成(图 2),使用单一共享策略。我们使用 GRPO(公式 (1);附录算法 1)更新策略,对求解器 rollout 使用 R^c,对验证器 rollout 使用阶段特定的验证器奖励 R_1^t(公式 (3))/ R_2^t(公式 (4))。生成的测试用于训练验证器并支持推理时选择,而求解器 rollout 仅由数据集测试评分。这种联合优化耦合了求解器和验证器:求解器 rollout 用策略的当前行为填充 B,验证器 rollout 学习首先生成可靠的测试,然后生成越来越针对这些演化失败模式的测试。与固定的离线监督不同,这种在线强化学习循环使验证器能够跟踪求解器的移动误差分布。
#### 3.2.1 策略对齐缓冲区
为了学习候选条件测试,验证器提示必须反映求解器当前的失败模式,而不是静态的离线代码集合。因此,我们从训练期间在线生成的求解器输出动态构建测试生成提示。满足阶段特定标准的输出被收集到滚动缓冲区 B 中,作为验证器实例的储备库。为了保持多样性并与当前策略保持一致,我们仅保留最近 T_b 个训练步骤中的项目。即使在不要求强对抗性目标的第一阶段,基于当前代码的条件也有助于验证器学习候选特定的上下文,并使提示分布与第二阶段保持一致。完整的测试生成提示模板见附录 E。
#### 3.2.2 第一阶段训练(健全性)
第一阶段控制健全性。对于真实解 C* 和生成的测试用例 (I_g, O_g),如果 Exec(C*, I_g) = O_g,则分配奖励 1,否则为 0。为了防止完全重用提示中的示例测试,我们还要求 (I_g, O_g) ∉ T_example,得到 R_1^t:
$$R_1^t(I_g, O_g) = \begin{cases} 1, & \text{if } \mathrm{Exec}(C^*, I_g) = O_g \text{ and } (I_g, O_g) \notin \mathcal{T}_{\text{example}} \\ 0, & \text{otherwise.} \end{cases}$$
(3)
其中 T_example 表示问题描述中的示例测试用例。此过滤器故意保守:它阻止精确复制,而主要防护仍然是针对 C* 的执行验证。
在第一阶段,B 接纳可执行的求解器输出(例如,无语法错误或超时),使验证器接触到多样化的、与策略一致的代码上下文,而不需要强对抗性目标。当验证器达到预定的成功阈值时(附录 A),第一阶段结束,之后我们过渡到第二阶段。直观地说,第一阶段在优化更难的反例之前降低生成测试的健全性误差。
#### 3.2.3 第二阶段训练(反例)
虽然 R_1^t 促进健全性,但它仍可能鼓励判别力有限的琐碎测试。在第一阶段到第二阶段的转换时,我们清空 B,此后仅接纳可执行但不正确的候选,定义为至少在一个数据集测试用例 T 中失败的程序。然后第二阶段训练验证器生成候选条件反例:这些测试通过 C* 但在从 B 采样的错误候选 C_wrong 上失败(第 3.2.1 节)。我们将对抗性奖励 R_2^t 定义为:
$$R_2^t(I_g, O_g, C^, C_{\text{wrong}}) = \begin{cases} 1, & \text{if } \mathrm{Exec}(C^, I_g) = O_g \text{ and } \mathrm{Exec}(C_{\text{wrong}}, I_g) \neq O_g \text{ and } (I_g, O_g) \notin \mathcal{T}_{\text{example}} \\ 0, & \text{otherwise.} \end{cases}$$
(4)
尽管动机充分,R_2^t 在训练初期可能极其稀疏,特别是对于测试生成能力较弱的模型。对于像 R1-Distill-Qwen-1.5B 这样的模型,直接优化 R_2^t 会在很长时间内产生接近零的奖励,因为生成反例测试需要同时 (i) 生成健全的 (I_g, O_g) 和 (ii) 针对 C_wrong 的非平凡失败模式。这种稀疏性证明了上述第一阶段到第二阶段的课程的必要性。
由于 R_2^t 显式地以 C_wrong 为条件,第二阶段激励有针对性的反例,而不是通用的边界情况。从这个意义上说,第一阶段和第二阶段实例化了引言中强调的两个原则:第一阶段通过真实验证控制健全性,而第二阶段增加候选条件对抗性。
3.3 推理时扩展
传统的推理时扩展通常采样多个候选并使用外部奖励模型重新排名。对于代码生成,我们改为通过生成和执行自生成测试来进行扩展:我们使用与训练中相同的测试生成机制来构建以 (P, C_i) 为条件的提示,然后选择最能满足这些测试的候选。只有当汇集的测试足够健全且具有足够判别力时,此选择规则才有用,而这正是 TCS 旨在改进的。
给定一个问题,我们采样 N 个候选代码解 {C_i}_{i=1}^N。对于每个 C_i,我们生成 M 个以 (P, C_i) 为条件的测试用例,产生 K = N × M 个自生成测试的汇集集。我们在汇集测试上执行每个 C_i,并选择具有最高通过计数的候选。
正式地,我们的选择准则可以表示为:
$$C_{\text{selected}} = \underset{C_i \in \{C_1, C_2, \ldots, C_N\}}{\arg\max} \; S(C_i)$$
(5)
$$S(C_i) = \sum_{j=1}^{N \times M} \mathbb{I}[\mathrm{Exec}(C_i, I_j) = O_j]$$
其中 S(C_i) 是第 i 个候选代码解的通过计数,{(I_j, O_j)}_{j=1}^{N×M} 表示汇集的自生成测试用例,I 是指示函数,当执行与预期输出匹配时为 1,否则为 0。
3.4 理论分析
公式 (5) 选择在汇集自生成测试下具有最大通过计数的候选。我们形式化了随着测试数量增加,此选择何时变得可靠。
设 C = {C_1, ..., C_N} 为候选集,C⁻ ⊂ C 表示错误候选集。假设 C 包含至少一个正确候选,即 C \ C⁻ ≠ ∅。如果 C⁻ = ∅,则错误选择不可能,结论是平凡的。因此我们考虑非平凡情况 C⁻ ≠ ∅。对于每个候选 C_i,我们从条件测试生成器 G(·|P, C_i) 独立采样 M 个测试,产生大小为 K = N × M 的分层汇集测试集 T = {(I_{i,m}, O_{i,m})}_{i=1,m=1}^{N,M}。在整个分析中,假设生成的测试输入满足 P 的输入约束。我们使用诱导的均匀混合分布,该分布首先采样 i ~ Unif({1, ..., N}),然后从 G(·|P, C_i) 采样,仅用于定义下面的聚合量 α 和 δ。
定义 1(健全性误差和反例率)
设 (I, O) 是从上述混合分布中抽取的随机测试。定义健全性误差:
$$\alpha \triangleq \Pr[\mathrm{Exec}(C^*, I) \neq O]$$
对于任何错误候选 C ∈ C⁻,定义反例率:
$$\delta(C) \triangleq \Pr[\mathrm{Exec}(C^*, I) = O \land \mathrm{Exec}(C, I) \neq O]$$
$$\delta \triangleq \min_{C \in \mathcal{C}^-} \delta(C)$$
α 衡量测试生成器对 C* 分配错误标签的频率,而 δ 衡量测试使错误候选失败而 C* 通过的频率。
假设 1(独立分层采样和净判别性)
在固定候选集 C 的条件下,分层测试 {(I_{i,m}, O_{i,m})}_{i=1,m=1}^{N,M} 是独立的,且在诱导的混合分布下 δ > α。
命题 1(通过计数选择的指数可靠性)
在假设 1 下,公式 (5) 中的推理时规则选择错误候选的概率最多为:
$$\Pr[C_{\text{selected}} \in \mathcal{C}^-] \leq (N-1)\exp\left(-\frac{K(\delta-\alpha)^2}{2}\right)$$
直观地,每个额外的测试用例最多以 ±1 改变正确和错误候选之间的通过计数差距。当测试具有净判别性(δ > α)时,预期差距随 K 线性增长,并通过 Hoeffding/Chernoff 集中,从而产生指数小的误选概率。完整证明见附录 B。
解释和与两阶段训练的联系
命题 1 中的界限确定了推理时扩展的两个控制旋钮:测试数量 K 和边际 (δ - α)。第一阶段(公式 (3))旨在通过奖励与 C* 一致的测试来减少 α,而第二阶段(公式 (4))旨在通过奖励在通过 C* 的同时使错误解失败的测试来增加 δ。这证明了附录表 4 中解耦消融研究的动机。
4 实验
表 1:TACO 和 LiveCodeBench 上的性能
| TACO | LiveCodeBench | ||||
|---|---|---|---|---|---|
| Model | w/o pub | w/ pub | w/o pub | w/ pub | Avg. |
| DeepSeek-R1-Distill-Qwen-1.5B | |||||
| Base Model | 5.63 | 14.38 | 10.01 | ||
| + Reward Model | 12.70 | 14.60 | 23.30 | 30.11 | 20.18 |
| + Self-Generated Test Cases | 5.78 | 13.91 | 22.00 | 30.09 | 17.95 |
| SFT Model | 9.43 | 17.21 | 13.32 | ||
| + Reward Model | 14.32 | 16.78 | 23.67 | 32.45 | 21.81 |
| + Self-Generated Test Cases | 15.12 | 16.23 | 24.33 | 31.89 | 21.89 |
| RL using TCS Training | 12.31 | 20.63 | 16.47 | ||
| + Reward Model | 15.66 | 23.17 | 24.01 | 37.99 | 25.21 |
| + Self-Generated Test Cases | 20.52 | 25.18 | 27.47 | 38.90 | 28.02 |
| DeepSeek-R1-Distill-Qwen-7B | |||||
| Base Model | 14.36 | 28.56 | 21.46 | ||
| + Reward Model | 24.87 | 26.98 | 42.65 | 46.24 | 35.19 |
| + Self-Generated Test Cases | 18.67 | 26.02 | 43.01 | 46.15 | 33.46 |
| SFT Model | 18.92 | 32.14 | 25.53 | ||
| + Reward Model | 27.45 | 29.67 | 43.23 | 48.91 | 37.32 |
| + Self-Generated Test Cases | 27.32 | 29.78 | 44.67 | 47.82 | 37.40 |
| RL using TCS Training | 24.09 | 37.03 | 30.56 | ||
| + Reward Model | 31.11 | 37.67 | 43.01 | 53.40 | 41.30 |
| + Self-Generated Test Cases | 35.35 | 39.40 | 48.79 | 54.75 | 44.57 |
4.1 实验设置
我们的方法假设一个执行可验证的设置:每个训练样本包含问题描述、真实解和可靠的测试用例,因此在后训练期间可以检查生成的测试。我们使用 TACO (Li et al., 2023) 进行训练和评估,将其 25,433 个问题过滤到 6,318 个精选实例,这些实例具有足够的测试覆盖率和至少一个通过所有案例的 Python 解。我们在 TACO 验证集(1,000 个问题)和 LiveCodeBench (Jain et al., 2025) 上进行评估。第一阶段到第二阶段的切换是与大约 0.75 训练批次测试准确率对齐的固定硬转换(1.5B 模型 200 步,7B 模型 40 步),推理时选择使用每个候选 M=1 个生成的测试。完整细节推迟到附录 A。
4.2 主要结果
我们在三种设置中评估 DeepSeek-R1-Distill-Qwen 模型(1.5B 和 7B):基础模型、离线联合代码-测试 SFT 基线和 TCS。SFT 基线使用与 TCS 相同的训练问题,采用 R1-Distill-Qwen-32B 样本生成,遵循 Sol-Ver (Lin et al., 2025):代码监督来自通过参考测试的教师样本,测试监督来自候选条件、真实验证的案例,这些案例暴露配对的错误代码样本。因此,基线已经接收执行验证的对抗性监督,但仅通过固定的离线数据集,而不是 TCS 的策略对齐在线更新。在 TCS 中,一旦测试生成准确率超过阈值,我们就进入第二阶段。
表 1 报告了 pass@1(TACO 上 16 个样本,LiveCodeBench 上 32 个样本)和 Best-of-N 选择,由奖励模型排名或自生成测试选择(TACO 上 N=16,LiveCodeBench 上 N=32,每个候选 M=1 个生成的测试)。我们使用 InternLM2-7B-reward (Cai et al., 2024) 和 CodeT (Chen et al., 2023) 流水线进行这两种选择规则,无论是否使用公开测试用例。
表 1 总结了训练时和推理时的性能。与基础和联合 SFT 基线相比,TCS 提高了 1.5B 和 7B 模型的 pass@1,表明验证器训练不仅有助于重新排名,还有助于求解器本身。更重要的是,当使用自生成测试进行选择时,TCS 产生了最强的增益,表明学习到的验证器在训练后变得实质上更有用。由于联合 SFT 基线已经在离线状态下接收候选条件、真实验证的对抗性监督,这一差距反映了在线强化学习的价值,而不仅仅是更好的标签。
该表阐明了为什么健全性控制很重要。对于基础模型,自生成测试通常弱于奖励模型排名,反映了不可靠的测试生成。SFT 缩小了这一差距,但仍使基于测试的选择不一致。TCS 改变了这种模式:在匹配主干的情况下,自生成测试与奖励模型排名具有竞争力或更强,尤其是在没有公开测试用例时,此时选择几乎完全依赖于学习到的验证器。
在 LiveCodeBench 上,7B 基础模型的 pass@1 从 28.56 提高到 BoN-32 下自生成测试选择的 43.01。在相同协议下,仅精心策划的公开测试达到 45.99,而结合公开和自生成测试在 46.15 时效果最佳。因此,自生成测试在没有自动超越策划测试的情况下提供了实质性价值;这正是健全性控制重要的地方。TCS 通过第一阶段提高可靠性,第二阶段提供候选条件反例来解决这个问题。附录图 5 将此比较扩展到不同样本数量,有和没有公开测试用例,显示了相同的模式:当自生成测试补充可靠的过滤信号而不是盲目替换它们时,帮助最大。
重要的是,这些增益并非来自任何外部测试生成器。在相同的推理时预算下,由 CodeRM-8B (Ma et al., 2025) 生成的测试产生的过滤性能弱于奖励模型排名和我们的自生成测试(附录 C.6)。
联合与解耦训练
为了分离联合训练的效果与通用强化学习增益,我们在相同的 R1-Distill-Qwen-1.5B 主干上比较 TCS 与两个解耦基线:仅代码强化学习(Code-RL)和仅测试强化学习(Test-RL)。附录表 4 报告了 pass@1 和无公开测试选择结果。
这些结果区分了求解器端和验证器端的强化学习。Code-RL 相对于基础模型提高了 pass@1,但在 "+TC" 下增加很少,表明更好的解决方案而没有更好的验证器。相比之下,Test-RL 产生了更强的验证器:虽然其直接 pass@1 仍然适中,但其自生成测试在 "+TC" 下产生了更大的增益,与更高的反例率 δ 一致。联合 TCS 训练实现了最佳的训练时性能和自生成测试选择下最大的推理时增益,这与第 3.4 节中共同减少健全性误差和扩大 (δ - α) 的情况一致。使用 Test-RL 测试过滤 TCS 生成的代码仍然不如 TCS 自验证,这与协同自博弈效应一致:更强的求解器为验证器创造了更难的失败模式。附录表 6 同样显示,仅代码强化学习没有重现相同的基于测试的选择增益。这排除了 TCS 仅因强化学习改进求解器而工作的更简单解释:显式验证器训练独立重要。
4.3 推理时扩展比较
图 3:TACO 上不同推理时扩展方法的比较
推理时计算通常通过采样多个候选并使用辅助信号对它们进行排名来提高答案质量。对于代码生成,一种自然的信号是在自生成测试上的执行。我们使用 DeepSeek-R1-Distill-Qwen-14B 作为强基线,并应用与第 3.3 节相同的选择规则。图 3 显示,随着 N 增加,自生成测试选择产生一致的增益。值得注意的是,在此规则下,TCS 微调的 1.5B 模型可以胜过更大的 14B 基线。奖励模型选择对于较弱模型比朴素自生成更强,但随着 N 增长变得不那么稳定,表明对分布外候选的敏感性。相比之下,TCS 产生更稳健的基于测试的扩展信号,与第 3.4 节一致:只有当测试分布保持 α 低同时提供足够的 δ 时,额外测试才有帮助。
图 4: (a) LiveCodeBench 中强外部模型的最佳 N 选择性能,由自生成或 TCS-7B 生成的测试用例选择。(b) 测试用例输出预测准确率。缩写 "ft." 表示微调模型。(c) 不同训练奖励下的分数。
4.4 测试用例有效性
为了更好地理解为什么 TCS 有帮助,我们从两个轴评估生成的测试。首先,我们测量实际过滤能力:生成的测试是否改进了强外部模型的最佳 N 选择?其次,我们使用官方 LiveCodeBench 测试输出预测任务测量输出一致性:给定问题和黄金测试输入,模型预测相应的输出,根据验证参考进行评分。我们将此预测准确率用作测试可靠性和健全性的代理,而不是作为对抗性的完整度量。
图 4(a) 显示,TCS-7B 生成的测试在 LiveCodeBench 上比强外部模型产生更大的下游选择增益,表明更强的实际过滤能力。图 4(b) 显示,TCS 模型实现了更高的测试输出预测准确率,我们将其解释为更强健全性和一致性的代理。因此,我们使用输出预测准确率来表征可靠性,使用下游选择增益来表征候选过滤的有用性。这些结果共同支持 TCS 改善生成测试的可靠性和实际价值的说法。附录图 6 和 7 进一步说明了 TCS 学习到的对抗性测试,包括即使在通过所有可用公开测试后也能消除错误解决方案的案例。
4.5 两阶段强化学习的有效性
我们假设第一阶段和第二阶段扮演不同的角色:第一阶段主要提高健全性,而第二阶段主要提高对抗性。在相同的计算预算下,仅第一阶段训练只产生适度的基于测试的扩展增益(附录表 5),表明仅健全性随着 N 增长是不够的。相比之下,完整的两阶段奖励产生更清晰的增益,尤其是在结合公开和自生成测试时。
图 4(c) 绘制了训练步骤的批次平均测试生成奖励,显示从一开始就直接优化 R_2^t 会在许多步骤中产生稀疏奖励和无效的反例学习。因此,第一阶段在进入第二阶段之前建立足够健全的验证器,使第二阶段训练更有效。
5 相关工作
代码大语言模型的后训练主要集中在改进求解器,代码生成任务的监督微调和强化学习带来了巨大增益 (Hui et al., 2024; Guo et al., 2024; Jiang et al., 2024; Fan et al., 2025)。最近的工作也探索了单元测试生成、验证器学习和求解器-验证器协同训练 (Lin et al., 2025; Li et al., 2025; Takerngsaksiri et al., 2025; Wang et al., 2025)。在此背景下,我们关注一个更狭窄的问题:在执行可验证的设置中,什么属性使学习到的测试生成对推理时选择有用?因此,我们通过阶段化强化学习目标和策略对齐缓冲区,研究匹配主干、匹配预算的证据,以证明健全性控制和候选条件对抗性。
最近的推理时扩展方法通过采样多个候选并使用辅助信号在它们之间进行选择来提高质量 (Snell et al., 2025; Wu et al., 2025)。对于代码,先前的工作使用奖励模型、解释器、搜索和自生成测试来重新排名候选程序 (Cai et al., 2024; Liu et al., 2025; Shinn et al., 2023; Chen et al., 2023; Li and Yuan, 2024; Light et al., 2025; Yu et al., 2025b; Tang et al., 2024)。我们的重点在三个方面有所不同:我们训练验证器本身,使用强化学习优化验证器效用而不仅仅模仿固定的离线测试分布,并通过健全性误差 α 和反例率 δ 分析可靠性。
6 结论
我们认为,代码大语言模型的有效测试生成需要健全性控制和候选条件对抗性,而强化学习在此处有用,因为测试生成是多解、执行定义且策略依赖的。在 TACO 和 LiveCodeBench 上,测试用例扩展(TCS)改进了代码生成和自验证;理论和消融研究支持相同的结论:随着健全性误差降低和反例率增加,推理时扩展得到加强。
实验还揭示了一个实际教训:当可靠性得到控制时,自生成测试最有用,并且当它们补充而不是简单地替换精心策划的公开测试时,效果最佳。与离线联合 SFT 基线的一致差距进一步表明,策略对齐的在线强化学习不仅仅在于让模型接触固定的对抗性监督。
附录表 7 进一步显示,这些增益在 TACO 不同难度级别上持续存在,并且在更难的子集上更加明显。
强外部模型上的迁移增益进一步表明,学习到的验证器捕获了广泛有用的失败模式,而不仅仅是自博弈工件。
局限性
我们方法的主要局限性是,在推理时测试用例生成期间,目前每次推理调用仅生成一个测试用例。在一次推理中生成多个测试用例会更高效,但这受到定义适当奖励函数的挑战的阻碍:直观的指标(如计算正确案例数或测量准确率)容易受到奖励黑客攻击。研究启用同时生成多个测试用例的强化学习策略因此仍然是一个有前景的方向。此外,我们当前的方法在训练阶段之间使用硬切换。探索通过动态调整两种测试用例奖励函数的比例来实现软切换可能会产生更好的结果。我们没有追求这一点,主要是由于大语言模型强化学习的高资源需求,因此优先考虑了直接且可靠的方法。我们的框架还假设在后训练期间可以访问真实解 C* 以验证生成的测试。虽然在推理时不需要 C*,但这一假设限制了在没有验证解的设置中的训练。将 TCS 扩展到基于模型或基于一致性的验证是未来工作的重要方向 (Zhang et al., 2025; Wang et al., 2023)。关于社会影响,虽然增强的 LLM 编码能力可以提高生产力,但也可能增加滥用风险,如在面试和竞赛中。
署名与许可
原文链接:https://arxiv.org/abs/2609.03955
本译文基于原文 CC BY 4.0 许可发布。
译者:智测团队
Found it useful? Pass it on
Scan with WeChat to open it on your phone and forward it.