面向代码生成RL的测试用例粒度对偶空间自训练:从通过率梯度冲突到细粒度正确性结构蒸馏
将DuST对偶空间训练从二值正确性判别扩展至测试用例粒度,分解梯度冲突并蒸馏细粒度正确性结构,解决代码生成RL中通过率奖励误校准与信用分配粗糙的双重瓶颈
背景与动机
代码生成大语言模型的后训练已广泛采用基于单元测试反馈的强化学习(RLVR)范式。然而,该范式面临两个相互关联的核心瓶颈:
瓶颈一:通过率奖励的梯度冲突。 当二元”全通过/全失败”奖励过于稀疏时,常见的替代方案是使用测试用例通过率(pass-rate)作为代理奖励。然而 Li 等人(2605.02944)在严格受控实验中揭示了一个反直觉的发现:尽管通过率奖励密度更高,它并不能可靠地改善最终性能。根本原因在于——通过率是朝向完全正确性的误校准代理:同一组内不同部分通过的解会产生冲突的梯度方向,相互抵消后无法一致地将概率质量推向全通解。
瓶颈二:信用分配粗糙。 Kumar 等人(2603.16158)指出,当模型已能生成语法正确、可执行的代码时,信用分配(而非奖励稀疏性)才是性能提升的主要瓶颈。GRPO 式更新将单一结果信号均匀扩散至整个程序,即使失败源于局部语义错误,梯度也会”涂抹”到大量正确的代码段上。
新机遇:对偶空间训练的判别-生成转移。 Jiao 等人(2605.11299)提出的 DuST 框架揭示了一个关键现象:在对偶判断空间(对候选解进行正确性排序)中用 GRPO 训练模型,无需任何生成奖励即可提升原始生成空间的 pass@1 达 +3.1。更关键的是,SFT 在相同排序数据上仅改善判断力而不改善生成力,在策 RL 是对偶空间学习向原始生成空间转移的机制。
现有工作的关键缺口: DuST 的对偶判断仅使用二元正确/错误标签,丢弃了测试用例级别的丰富结构。而直接使用通过率作为奖励又因梯度冲突而失效。核心矛盾是:测试用例级别的正确性结构蕴含远比二元标签丰富的监督信号,但其作为奖励信号直接注入原始空间时会因梯度冲突而失效。这要求我们找到一种方式,在对偶空间中利用测试用例级结构,同时避免将其直接用作原始空间的奖励。
核心思路
我们提出 TC-DUAL(Test-Case-aware Dual-space Self-Training)框架,核心思想是将测试用例级正确性结构从原始空间的奖励信号转化为对偶空间的分解判别目标。
关键区别一:从二元判别到测试用例粒度分解判别。 DuST 对每个候选解做一次二元正确/错误排序;TC-DUAL 将其分解为 K 个独立的二元子判别(K 为测试用例数),每个子判别预测该候选解是否通过特定测试用例。这直接消除了通过率奖励的梯度冲突——每个子判别都是干净的二元分类,具有明确的优化方向。
关键区别二:从粗粒度信用到因果定位的信用蒸馏。 通过测试用例粒度的对偶判别,模型学习到代码特征与特定测试用例结果之间的细粒度对应关系。这种对应关系在对偶空间中被 GRPO 的在策优化蒸馏回原始生成空间,实现了比 EGCA 执行轨迹对比更根本的信用分配改进——不是定位”哪里错了”,而是学习”哪些代码模式导致哪些测试用例失败”。
关键区别三:模式一致性约束。 K 个独立的子判别缺乏联合一致性保障。我们引入模式一致性奖励,要求模型的 K 个子判别预测联合一致(即被预测为通过全部 K 个测试用例的候选应被预测为整体正确),形成正则化的对偶空间训练目标。
技术路线
阶段一:测试用例正确性模式矩阵构建
- 候选采样:对训练集每个问题 x,从模型分布 π_θ 采样 N 个候选解 {c_1, …, c_N}
- 沙箱执行:对每个候选 c_i 执行全部 K 个测试用例,得到正确性模式向量 t(c_i) = (t_1, …, t_K) ∈ {0,1}^K,其中 t_j = 1 表示通过第 j 个测试用例
- 混合组构建:保留包含至少一个”全通”候选和至少一个”部分通过”候选的问题组,形成对偶判别训练数据
阶段二:测试用例粒度分解对偶判别训练
- 子判别任务设计:对于问题 x 和候选组 C_N,模型需要为每个候选 c_i 生成 K 个独立判断——“候选 c_i 是否通过测试用例 j?“,形成 K 个独立的排序子任务
- 分解 GRPO 优化:对每个子任务 j,独立计算 GRPO 优势:
- 对通过测试用例 j 的候选赋予正优势,未通过的赋予负优势
- K 个子任务的梯度独立计算、累加更新,避免不同通过模式之间的梯度冲突
- 在策采样:判别响应从当前策略在策采样(与 DuST 一致),确保 RL 机制将对偶空间学习转移回原始生成空间
阶段三:模式一致性正则化与联合训练
- 一致性奖励设计:除 K 个独立子判别奖励外,引入一致性奖励 r_consist,衡量 K 个子判别预测的联合分布与整体正确性的一致程度
- 组合训练目标:总奖励为 R = Σ_j r_j + λ · r_consist,其中 λ 控制一致性正则化强度
- 渐进式课程:训练初期使用较小 K(仅关注关键测试用例子集),随训练推进逐步增加至全部测试用例
关键技术挑战
- 测试用例依赖性建模:不同测试用例之间可能存在逻辑依赖(如边界测试依赖基本功能测试),需要建模子判别之间的条件依赖关系而非完全独立假设
- 计算开销控制:K 个子判别将计算量扩大 K 倍;需要设计高效的多头判别架构和批量化执行策略
- 对偶-原始转移的验证:需要严格验证测试用例粒度的对偶训练是否确实改善了原始生成空间,而非仅改善判别能力(类似 DuST 中 SFT 与 GRPO 的对比实验设计)
- 测试用例质量:单元测试本身可能存在缺陷或冗余,需要设计测试用例筛选机制以确保子判别信号的质量
预期成果
定量目标
- Pass@1 提升:在 LiveCodeBench v6 上,相对于 DuST 基线额外提升 2-4 个 pass@1 百分点;相对于 GRPO 原始空间基线提升 5-8 个百分点
- 梯度冲突消除:在包含部分通过解的训练组中,梯度方向的组内方差降低 50% 以上(相比通过率奖励基线)
- 判别-生成转移效率:对偶空间训练的 pass@1 提升与原始空间 GRPO 训练的 pass@1 提升之比 ≥ 0.8(衡量转移效率)
- Best-of-N 缩放:在 Best-of-4 测试时缩放中,NDCG 提升相比 DuST 额外 +2 以上
定性目标
- 揭示测试用例粒度正确性结构在对偶空间训练中的信息增益理论边界
- 建立对偶空间判别粒度与原始空间信用分配精度之间的因果联系
- 为代码生成 RL 中的”奖励设计-梯度冲突”困境提供新的解决范式
可能的影响
- 方法论层面:将对偶空间训练从粗粒度二元判别推广至细粒度结构化判别,为 RLVR 中的奖励设计开辟新维度
- 实践层面:为代码生成模型的自我改进提供更数据高效的训练范式——同等计算预算下获取更高质量的训练信号
- 理论层面:加深对”判别学习为何能改善生成能力”这一 DuST 发现的理解,从特征级分析推进至测试用例级分析
相关工作
-
DuST: Primal Generation, Dual Judgment — Self-Training from Test-Time Scaling (Jiao et al., 2026)
- 首次提出对偶空间自训练框架,证明对偶判别训练可转移至原始生成空间
- arXiv: 2605.11299
-
Exploring Pass-Rate Reward in Reinforcement Learning for Code Generation (Li et al., 2026)
- 系统性揭示通过率奖励的梯度冲突机制,证明其虽密度更高但优化方向不一致
- arXiv: 2605.02944
-
Execution-Grounded Credit Assignment for GRPO in Code Generation (Kumar et al., 2026)
- 提出基于执行轨迹的信用定位方法,证明信用分配是近正确代码的核心瓶颈
- arXiv: 2603.16158
-
AcquisitionSynthesis: Targeted Data Generation using Acquisition Functions (2026)
- 将主动学习的采集函数重新形式化为 GRPO 奖励,实现目标导向的数据生成
- arXiv: 2605.13149
-
HLS-Seek: QoR-Aware Code Generation via Proxy Comparative Reward RL (Zou et al., 2026)
- 提出比较式代理奖励与不确定性感知切换机制,解决硬件代码生成中的奖励设计问题
- arXiv: 2605.13536