AceCoder:通过自动化大规模测试用例合成提升代码模型训练
📖阅读时长:19分钟
🕙发布时间:2025-02-13
近日热文:全网最全的神经网络数学原理(代码和公式)直观解释
欢迎关注知乎和公众号的专栏内容
LLM架构专栏
知乎LLM专栏
知乎【柏企】
公众号【柏企科技说】【柏企阅文】
AceCoder利用自动化大规模测试用例合成来增强代码模型训练。它设计了一个流程,从现有代码数据中生成大量(问题,测试用例)对。利用这些测试用例,基于采样程序的通过率构建偏好对,使用Bradley-Terry损失来训练奖励模型。结合奖励模型和测试用例通过奖励进行强化学习,从而实现持续改进。
问题公式化
用$x$表示编码问题,$y$表示程序解决方案。假设$\theta$代表模型的参数,那么在给定输入$x$的情况下,将从模型$\pi_{\theta}$中采样出$n$个响应$(y_1, …, y_n)$ 。设$(s_1, …, s_n)$为目标奖励,在我们的场景中即测试用例的通过率。那么,在训练奖励模型$R_{\varphi}$时,对于每一对得分分别为$s_i$和$s_j$的响应$y_i$和$y_j$,Bradley-Terry损失如下:
其中,$\mathbb{1}[\cdot]$表示指示函数,当括号内的表达式为真时,其值为1,否则为0。
奖励训练的最终损失函数为:
在获得经过训练的奖励模型$R_{\varphi}$之后,一种快速测试奖励模型性能的方法是Best-of-N采样,它通常被用作测试时的缩放方法。根据$R_{\varphi}$的预测值,将简单地选择最佳响应。
在获得训练良好的奖励模型$R_{\varphi}$之后,可以对原始策略模型$\pi_{\theta}$进行强化学习。
AceCode-89K
AceCode-89K在测试用例过滤前后的数据集统计信息。
从种子数据集合成测试用例
从现有的编码数据集(Magicoder-Evol-Instruct、Magicoder-OSS-Instruct-75K和StackPyFunction)出发,这些数据集提供了问题$x$和相应的程序$y$。仅保留用Python编写且包含函数或类的问题,最终得到124K个条目。
每对问题-解决方案$(x, y)$被输入到GPT-4o-mini中,以提出一个具有高度结构化指令的优化版力扣(LeetCode)风格问题$x_r$ 。同时,根据对所需程序预期行为的理解,让GPT-4o-mini为每个优化后的编码问题$x_r$“设想”大约20个测试用例$(t_1, …, t_m)$。
现有数据集中的程序解决方案$y$并未用于最终整理的AceCode-89K中。
测试用例过滤
由大语言模型(LLM)生成的这些“设想”的测试用例包含严重的幻觉内容。为了过滤掉这些内容,针对每个$x_r$,使用更强的编码模型Qwen2.5-Coder-32B-Instruct来生成一个程序$y'$,然后在这些测试用例上运行这些程序,以评估它们的质量。所有生成的解决方案程序$y'$无法通过的测试用例都将被删除。此外,过滤后测试用例数量少于5个的问题也将被删除,因为这些问题可能过于模糊。
偏好对构建
由于采样程序$y_i$的通过率$s_i$可以是$[0, 1]$之间的任意数字,通过率的微小差异可能并不代表一个程序比另一个程序更准确。因此,选择偏好对时,不使用$\mathbb{1}[s_i > s_j]$,而是将选择规则修改为:
实验设置
使用Qwen2.5-Coder-7B-Instruct作为奖励模型的基础。对于AceCode-89K中的每个问题,从该模型中采样16个响应。在46,618个不同的问题中,创建了约300K个偏好对。
从三个策略模型(Qwen2.5–7B-Instruct、Qwen2.5-Coder-7B-Base和Qwen2.5-Coder-7B-Instruct)进行强化学习训练。可以使用两种类型的奖励:经过训练的奖励模型AceCode-RM-7B和基于规则的奖励,即AceCode-89K中测试用例的通过率。在训练过程中,通过率被设置为二元奖励,当所有测试用例都通过时为1.0,否则为0。
与DeepSeek-R1类似,也从基础模型进行强化学习实验,因为监督微调(SFT)可能会导致模型的搜索空间陷入局部最小值。由于编码和数学一样是一项高度可验证的任务,所以在实验中纳入了Qwen2.5-Coder-7B-Base。
模型在AceCode-89K的一个子采样困难版本上进行训练。保留平均通过率较低且方差较高的25%的问题,这是为了确保问题具有难度,并且采样的程序足够多样化。
结果
Best-of-N结果
与贪心解码相比,AceCode-RM显著提高了各种推理模型(Mistral、Llama-3.1、Qwen2.5)的性能,在较弱的模型上表现尤为明显。
这些改进归因于奖励模型在多个候选中识别高质量完成的能力。
当采样完成之间的方差较高时,收益更为显著。
强化学习结果
使用AceCode-RM进行强化学习训练进一步提高了性能,特别是在HumanEval和MBPP基准测试中,即使使用更具挑战性的测试用例也是如此。
在不同的初始策略模型(包括Qwen2.5-Instruct-7B、Qwen2.5-Coder-Instruct-7B和Qwen2.5-Coder-7B-base)中都观察到了性能提升。
经过强化学习调整的模型在MBPP上达到了接近最先进的性能。
与其他奖励模型的比较
在代码生成任务上,AceCode-RM优于其他排名靠前的奖励模型(InternLM2-RM-8B、Skywork-Llama-3.1–8B、Skywork-Gemma-27B)。
这些通用奖励模型与贪心采样相比,往往无法提高性能,甚至会降低性能,这凸显了它们在评估代码方面的局限性。
AceCode-RM始终能实现正向收益,证明了其有效性以及专门用于代码生成的奖励模型的重要性。
论文
ACECODER: Acing Coder RL via Automated Test-Case Synthesis 2502.01718
## 推荐阅读
1. DeepSeek-R1的顿悟时刻是如何出现的? 背后的数学原理
2. 微调 DeepSeek LLM:使用监督微调(SFT)与 Hugging Face 数据
3. 使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT
4. DeepSeek R1:了解GRPO和多阶段训练
5. 深度探索:DeepSeek-R1 如何从零开始训练
6. DeepSeek 发布 Janus Pro 7B 多模态模型,免费又强大!
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。