13 天前

CodeRL:通过预训练模型与深度强化学习掌握代码生成

Hung Le, Yue Wang, Akhilesh Deepak Gotmare, Silvio Savarese, Steven C.H. Hoi
CodeRL:通过预训练模型与深度强化学习掌握代码生成
摘要

程序合成(Program Synthesis)或代码生成的目标是生成满足特定问题规范的程序。近年来,基于大规模预训练语言模型(Language Models, LMs)的方法取得了令人瞩目的进展,但仍存在一些关键局限性。具体而言,这些方法通常采用标准的监督微调(supervised fine-tuning)范式,仅基于自然语言问题描述与对应正确程序的成对数据来训练代码生成模型。这一范式在很大程度上忽略了问题规范中潜在具有重要价值的其他信号,例如单元测试(unit tests),从而导致在面对复杂且未见过的编程任务时性能显著下降。为解决上述问题,我们提出了一种名为“CodeRL”的新框架,通过结合预训练语言模型与深度强化学习(Deep Reinforcement Learning, RL)来实现程序合成任务。具体而言,在训练阶段,我们将代码生成的语言模型视为策略网络(actor network),并引入一个评论家网络(critic network),该网络被训练以预测生成程序的功能正确性,并向策略网络提供密集的反馈信号。在推理阶段,我们设计了一种新的生成机制,引入关键的采样策略,使模型能够根据示例单元测试结果和评论家评分自动重生成程序,从而实现更精准的迭代优化。在模型架构方面,我们基于CodeT5的编码器-解码器结构,进一步优化了学习目标,扩大了模型规模,并采用了更高质量的预训练数据。实验结果表明,我们的方法在具有挑战性的APPS基准测试中取得了新的最先进(SOTA)性能;同时,在更为简单的MBPP基准测试上也展现出强大的零样本迁移能力,同样取得了新的SOTA结果。