本文分享自华为云社区《PanGu-Coder2:从排序中学习,激发大模型潜力》,作者: 华为云软件分析Lab 。
2022年7月,华为云PaaS技术创新Lab联合华为诺亚方舟语音语义实验室推出了代码大模型PanGu-Coder,随后发布了华为的代码智能生成助手CodeArts Snap。时隔一年之后,PanGu-Coder2终于来了。此次华为云、中国科学院和北京大学的研究者联合带来了更强大的代码大模型PanGu-Coder2,提出了一种高效且通用的方法来激发大规模预训练模型的代码生成能力,该模型在多个评测数据集上均取得了当前百亿级代码大模型中最好的效果。其技术报告《PanGu-Coder2: Boosting Large Language Models for Code with Ranking Feedback》已在arXiv上公开:https://arxiv.org/abs/2307.14936。华为云CodeArts Snap插件也即将上线基于PanGu-Coder2的百亿级代码生成服务,为Snap用户提供更全面的语言支持、更智能的代码生成、更准确的补全建议。
代码生成或程序合成技术,一直是软件工程(SE)和人工智能(AI)领域学术研究中的热点,并因其巨大的商业价值而备受工业界关注。近两年来,得益于人工智能研究在自然语言处理(NLP)和程序语言处理(PLP)方面取得的成果,大语言模型将代码生成从学术研究逐步推向实际落地。一方面,以Tabnine(产品:Tabnine/Codota)、硅心科技(产品:AiXCoder)等为代表的小型创业公司迅速成立并获得投资,产品敏捷迭代,用户快速增长;另一方面,以微软(产品:Copilot)、亚马逊(产品:CodeWhisperer)、华为云(产品:CodeArts Snap)为代表的大公司也开始大力投入,纷纷发挥自身优势,发布了具有各自差异化特性的代码生成产品。总之,从创业投资和头部公司的动向来看,大模型技术驱动的代码智能生成,已经成为最具高价值和可行性的人工智能落地应用之一。
大规模预训练语言模型(LLM)已经成为代码智能生成事实上的主流技术,业界的代码大模型百花齐放,如 OpenAI 的 CodeX、谷歌 DeepMind 的 AlphaCode、HuggingFace 的 StarCoder,Meta的Code LlaMa,华为的PanGu-Coder 等等。相比于前大模型时代的技术,虽然大模型的代码生成能力已有长足进步,但仍存在较大的提升和进步空间。以OpenAI提出的Benchmark HumanEval为例,在164道由人类开发者编写的简单编程任务上,大部分模型的单次生成通过率仍在50%以下。而众多开发者实际使用后的反馈也表明,在真实的业务开发中,自动生成的代码多数情况下仍需要仔细审查和修改才能使用。
为了进一步提升代码大模型的生成性能,各种各样的方法被提出,如多阶段预训练、监督精调、指令微调、强化学习等。其中,我们认为强化学习是提升模型代码生成能力最有潜力的方向之一。考虑到软件会随着需求不断演进和变化,编写程序的过程本质上就是不断试错和迭代的过程,人类编写的程序会经历多轮修改,在此过程中不断从代码调试、执行、测试、验收的过程中获取反馈来确定下一步改进方向。将强化学习用于代码生成的直观动机和基本假设是:这些反馈既然可以帮助人类开发者改进已有代码并提升其编程能力,那么理论上也应该可以帮助人工智能。
在本研究中,针对现有基于强化学习的方法(如CodeRL,PPOCoder,RLTF等)所存在的问题(如反馈信号稀疏、算法实现复杂、训练过程不稳定等),我们提出了一种新的代码大模型强化框架RRTF,其全称为 Rank Responses to align Test&Teacher Feedback,意为通过对模型不同的响应进行排序来使模型输出概率同时与测试结果和人类偏好对齐。该方法的思想最初受RLHF启发(Reinforcement Learning from Human Feedback,即基于人类反馈的强化学习,是ChatGPT/InstructGPT背后的核心技术),但采取了类似RRHF(Rank Responses to Align Language Models with Human Feedback)的实现,不同之处是将RLHF中奖励模型的训练简化为对不同响应的相对排序,使用排序响应(代替奖励模型的绝对值)作为反馈,通过排序损失函数将模型输出的概率与奖励分数对齐,避免了复杂的强化学习实现和训练过程,对训练数据和训练资源的要求显著降低,从而可以高效地实现类似RLHF的效果。
为了验证该方法的效果,我们在Huggingface开源的代码大模型StarCoder-15B上进行了一系列实验。测试结果表明,通过该方法训练出的模型在HumanEval、CoderEval、LeetCode三个基准测试集上分别达到了62.20%、38.26%、32/30/10(容易/中等/困难)的单次生成通过率,在HumanEval上的提升接近30%(绝对值,32.93%->62.20%)。超越了当前所有的同参数规模模型。进一步的多语言和多任务测试表明,PanGu-Coder2的代码生成能力接近OpenAI GPT-3.5的表现,同时在代码错误修复、代码解释等多任务上都处于业界领先水平。
RRTF框架的核心理念是:利用预定义的偏好函数和实际执行的测试结果共同作为反馈信号,对针对同一编程任务的多个响应进行排序,通过排序损失函数优化目标模型的生成概率,从而逐步引导目标模型模型生成质量更高、有更大概率通过测试的代码。作为一种简单而有效的框架,RRTF实际上吸收了多种前沿的技术或思想,包括指令调优(Instruction Tuning)、指令演化(Evol-Instruct)、强化学习(Reinforcement Learning)等。“基于自动化反馈”这一点是代码生成上进行RRTF与自然语言上进行RRHF最大的不同:人类是自然语言的直接消费者,因此需要参与反馈过程才能更好地对齐模型与用户期望;而人类是代码的间接消费者,代码(特别是高级编程语言写的代码)的直接消费者是计算机中的其他软件(如编译器、解释器、操作系统等),而这部分反馈可以/应该一定程度上自动化或半自动化,从而可以降低对人类反馈的依赖和因此带来的效率瓶颈。
RRTF框架的概览如图1所示。总体而言,RRTF 包括以下三个步骤:采样、排序和训练。
图1:RRTF 框架概览
排序损失函数定义为:
其中,r代表排序过程中赋予正负样本的不同分数。
最终的损失函数由排序损失和监督性微调的损失函数共同组成:
我们进行了一系列的实验来评估 PanGu-Coder2 的性能,并与业界的其他具有代码生成能力的模型进行了对比。我们选取了以下三个基准测试集进行评估:
表1为PanGu-Coder2与现有的代码大模型在HumanEval-Python上的性能比较:
表1:业界知名模型在HumanEval上的结果,以生成200次的pass@1/10/100为指标衡量。对于PanGu-Coder2/WizardCoder/StartCoder,推理参数为:temperature=0.2/1.2/1.2, top_p=0.95;对于其他模型,指标取自原始论文
从表1可以看出:在所有被测百亿模型中,PanGu-Coder排名第一;在所有模型中,PanGu-Coder2 排名第二。与 PaLM-Coder 和 LaMDA 等千亿级大模型相比,PanGu-Coder2 虽然规模只有百亿,但性能却更好。值得注意的是,PanGu-Coder2 的表现接近或优于 OpenAI 的 GPT-3.5(不同报告中给出的结果有所差异),但与据称万亿规模的GPT-4 仍有差距。
表2展示了各代码生成模型在三个基准测试集上采用贪婪解码的单次生成通过率及其比较结果。可以看出,在所有测试集上,PanGu-Coder2 都取得了最好的成绩。值得注意的是,与基础模型StarCoder,以及在StarCoder上采用指令微调的WizardCoder 相比,采用RRTF方法的PanGu-Coder2在HumanEval、CoderEval 和 LeetCode 上均效果更佳。
表2:各代码生成模型在HumanEval、CoderEval、LeetCode上的Pass@1对比
为了进一步检验PanGu-Coder2的泛化能力,我们在其他编程语言和其他代码强相关任务上对PanGu-Coder2进行了评估。我们选取了以下两个公开的基准测试集:
表3展示了PanGu-Coder2最新版本代码生成测试集HumanEval-X上的结果以及与业界其他的对比:
表3:各多语言代码生成模型在HumanEval-X上的Pass@1对比
表4展示了PanGu-Coder2在多任务测试集HumanEvalPack上的结果以及与业界其他模型的对比(其他模型的数据主要来自OctoPack论文):
表4:各支持多任务的模型在HumanEvalPack-Python上的效果对比
综合以上实验结果,可以得出以下结论:
在本文中,我们介绍了PanGu-Coder2背后的创新性训练框架RRTF,并通过充分的实验证明了其在激发大模型代码生成潜力方面的效果。RRTF背后的核心动机和思想是基于自动化反馈的强化学习,即在语言模型的自回归优化目标之外,引入代码特有的自动反馈信号,即通过解释器、编译器、执行器、单元测试等代码处理工具链依次对所生成代码进行检查,其结果通过相对排序后作为目标函数的一部分,从而在训练和优化过程中引导模型生成有更大概率能顺利编译运行并通过测试的代码。作为一种与模型无关的训练方法,RRTF可无缝迁移到其他具有一定编程能力的预训练模型上,或同一模型的不同规模上。
PanGu-Coder2百亿级模型即将上线到华为云CodeArts Snap智能开发助手中,将带来三倍的代码生成准确率提高以及对所有主流编程语言的逐步支持,从而全面提升Snap用户的开发效率和代码质量。在JetBrains或VSCode插件市场上提前下载安装CodeArts Snap,关注CodeArts Snap即将到来的重大更新吧!
文章来自 PaaS技术创新Lab:PaaS技术创新Lab隶属于华为云,致力于综合利用人工智能和软件分析技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!
华为将于2023年9月20-22日,在上海世博展览馆和上海世博中心举办第八届华为全联接大会(HUAWEICONNECT 2023)。本次大会以“加速行业智能化”为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从商业、产业、生态等方面探讨如何加速行业智能化。
我们诚邀您莅临现场,分享智能化的机遇和挑战,共商智能化的关键举措,体验智能化技术的创新和应用。您可以:
感谢您一如既往的支持和信赖,我们热忱期待与您在上海见面。
大会官网:https://www.huawei.com/cn/events/huaweiconnect
欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。