CodeRL:Salesforce如何用强化学习教会AI写代码

GitHub May 2026
⭐ 569
来源:GitHubreinforcement learningcode generation归档:May 2026
在NeurIPS 2022上亮相的CodeRL,是Salesforce Research提出的一套创新框架,它将预训练语言模型与深度强化学习深度融合,以单元测试通过率作为奖励信号,大幅提升代码生成的正确性。这一方法标志着从静态监督微调向动态、奖励驱动的代码合成范式的根本转变。

CodeRL由Salesforce Research开发,发表于NeurIPS 2022,是将强化学习(RL)应用于代码生成领域的奠基性工作。与仅仅模仿训练数据的传统监督微调不同,CodeRL将代码生成视为一个序列决策问题。模型首先生成候选程序,然后在单元测试环境中执行这些程序,并将测试通过/失败的结果作为奖励信号,通过改进的actor-critic算法更新其策略。这种闭环反馈机制使模型能够从自身错误中学习,逐步提升语法和语义的正确性。在APPS基准测试中,CodeRL在pass@k分数上相比CodeGPT和CodeBERT等强基线模型取得了10-15%的绝对提升,尤其在更具挑战性的编程问题上表现突出。

技术深度解析

CodeRL的架构堪称连接自然语言处理与强化学习这两个迥异领域的典范之作。其核心框架由三个组件构成:一个预训练的代码生成模型(actor)、一个评估生成程序预期奖励的critic网络,以及一个基于单元测试结果提供二元或标量奖励的执行环境。

Actor-Critic设置: Actor通常是一个基于Transformer的语言模型(例如,在代码上微调的CodeGPT、CodeBERT或GPT-2),它接收自然语言的问题描述作为输入,并输出代表程序的token序列。Critic则是一个独立的神经网络(通常是一个较小的Transformer或MLP),它接收actor的隐藏状态,并预测生成程序的预期通过率。在训练过程中,actor通过基于温度的采样为每个问题生成多个候选程序。每个候选程序都会在一组单元测试上执行;其通过率(0到1)即为奖励。Critic通过最小化其预测奖励与实际奖励之间的均方误差来进行训练。Actor则使用策略梯度目标进行更新,具体来说是带有基线(即critic的输出)的REINFORCE算法变体,以降低方差。这种基线减法至关重要:它通过居中梯度信号来稳定训练。

奖励塑造与执行: 一个关键的创新在于使用了“软性”奖励:CodeRL并未采用二元0/1的通过/失败判定,而是使用通过的单元测试比例。这缓解了奖励稀疏性问题——在强化学习中,大多数生成的程序会失败所有测试,从而无法提供梯度信号。例如,如果一个编程问题有10个单元测试,而生成的代码通过了7个,那么奖励就是0.7。这种细粒度的反馈使得模型能够学习部分正确性。执行环境被沙箱化(使用Docker或子进程隔离),以防止在训练期间执行恶意代码。每一步生成都伴随着计算成本:为每个问题生成k个候选程序(通常k=10-50),并针对测试套件执行每一个。对于APPS基准测试(包含5000个问题),这意味着每个训练周期最多需要执行250,000次,计算强度很高,但在现代GPU集群上是可行的。

训练流程与超参数: 训练过程在监督预训练(对人类编写的代码进行标准交叉熵损失训练)和RL微调之间交替进行。监督阶段确保模型具备基本的语法能力;RL阶段则针对功能正确性进行优化。论文报告称,actor的学习率为5e-5,critic的学习率为1e-4,并使用了KL惩罚项以防止actor与监督模型偏离过远(这是避免灾难性遗忘的常用技术)。批次大小为64个问题,每个问题生成10个候选程序。在APPS训练集上进行10-15个周期的RL微调后,训练趋于收敛。

基准测试表现: 下表比较了CodeRL与基线模型在APPS基准测试上的表现(pass@k指标,其中k=1和k=5):

| 模型 | pass@1 (入门级) | pass@5 (入门级) | pass@1 (面试级) | pass@5 (面试级) | pass@1 (竞赛级) | pass@5 (竞赛级) |
|---|---|---|---|---|---|---|
| CodeGPT (监督学习) | 12.4% | 18.7% | 5.1% | 9.3% | 1.2% | 2.8% |
| CodeBERT (监督学习) | 14.1% | 21.3% | 6.2% | 11.0% | 1.8% | 3.5% |
| CodeRL (CodeGPT骨干) | 24.7% | 35.2% | 12.8% | 20.1% | 4.5% | 8.9% |
| CodeRL (CodeBERT骨干) | 26.3% | 38.1% | 14.5% | 23.4% | 5.6% | 10.2% |

数据要点: 在所有难度级别上,CodeRL相比监督基线模型实现了10-15%的绝对提升,其中在更困难的问题(面试级和竞赛级)上相对增益最大。这表明,在训练数据中的简单模式匹配失效的场景下,RL在教导模型处理复杂逻辑和边界情况方面尤为有效。

GitHub仓库: 官方实现位于 `github.com/salesforce/coderl`,提供了完整的训练流程,包括actor-critic代码、执行沙箱以及复现APPS结果的脚本。截至本文撰写时,该仓库已获得569颗星,并处于积极维护状态,最近的提交增加了对CodeGen和StarCoder等更新基础模型的支持。社区已将其分叉,用于试验不同的奖励函数(例如,执行时间、内存使用)和多任务学习。

关键参与者与案例研究

Salesforce Research是CodeRL背后的主要推动力,主要作者包括Yunxiang LiZiyang LuoXiangru Tang等研究人员。他们的工作建立在Salesforce AI生态系统先前贡献的基础上,包括CodeGen(一系列大型代码模型)和ProGen(蛋白质序列生成)。该团队的策略是将RL作为所有代码相关模型的核心训练组件,从而超越

更多来自 GitHub

StreamBert:零广告流媒体应用,或重塑数字盗版格局StreamBert以席卷之势闯入开源社区。这款基于Electron构建的应用,提供了一个统一界面,用于流式播放和下载几乎任何电影、剧集或动漫作品,全程无广告、无追踪脚本。其GitHub仓库truelockmc/streambert在一天内统一AI编码工具的智能体插件市场:wshobson/agents 如何打破生态孤岛AI 开发者工具生态正深陷各自为战的围墙花园。每个主流编码助手——Anthropic 的 Claude Code、OpenAI 的 Codex CLI、编辑器 Cursor、Google 的 Gemini CLI,以及开源替代品 OpenCVectorHub:开源平台能否让向量搜索成为所有开发者的标配技能?Superlinked 团队正式发布了 VectorHub,一个完全免费、开源的向量检索学习平台,面向从软件工程师到资深机器学习架构师的全层级开发者。其核心使命是“去神秘化”向量检索——这一现代语义搜索、RAG 系统与推荐引擎的底层技术——查看来源专题页GitHub 已收录 2133 篇文章

相关专题

reinforcement learning82 篇相关文章code generation175 篇相关文章

时间归档

May 20262491 篇已发布文章

延伸阅读

Safe-Control-Gym:安全关键型强化学习基准测试的新标杆一款名为 safe-control-gym 的全新开源基准测试平台,将 PyBullet 物理引擎与 CasADi 符号动力学深度融合,为安全关键型强化学习与控制研究打造了标准化试验场。它直指机器人及自主系统中约束策略可重复评估的迫切需求,KataGo Custom Fork Opens New Front in AI Alignment Research via GoA new GitHub repository, katago-custom, forks the powerful Go AI KataGo to create a controlled environment for AI alignmRobosuite分支:为机器人学习研究提供模块化仿真新选择作为ARISE-Initiative/robosuite仿真框架的一个分支,pearllhf/robosuite为开发和验证机器人操控算法提供了模块化环境。尽管其成熟的仿真能力和社区支持吸引了强化学习与模仿学习研究者,但该分支可能缺少主仓库Isaac Gym环境:NVIDIA的GPU并行模拟器如何成为机器人强化学习的事实标准基于NVIDIA Isaac Sim物理引擎构建的IsaacGymEnvs,已悄然成为现代机器人强化学习的基石。通过在单个GPU上并行运行数千个环境,它将训练时间从数天缩短至数小时。本文深入剖析其架构、权衡取舍,以及对具身智能未来的意义。

常见问题

GitHub 热点“CodeRL: How Salesforce Is Teaching AI to Code Through Reinforcement Learning”主要讲了什么?

CodeRL, developed by Salesforce Research and published at NeurIPS 2022, represents a foundational step in applying reinforcement learning (RL) to code generation. Unlike traditiona…

这个 GitHub 项目在“How to run CodeRL training on custom datasets”上为什么会引发关注?

CodeRL's architecture is a masterclass in bridging two disparate fields: natural language processing and reinforcement learning. At its core, the framework consists of three components: a pretrained code generation model…

从“CodeRL vs AlphaCode: which is better for competitive programming”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 569,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。