ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
微软祭出代码大模型WaveCoder!4项代码任务2万个实例数据集,让LLM泛化能力飙升
9791点击    2024-01-08 13:57


指令调优或许是让大模型性能提升最有潜力的方法。


用高质量数据集进行指令调优,能让大模型性能快速提升。



对此,微软研究团队训练了一个CodeOcean数据集,包含了2万个指令实例的数据集,以及4个通用代码相关任务。


与此同时,研究人员微调了一个代码大模型WaveCoder。



论文地址:https://arxiv.org/abs/2312.14187


实验结果表明,Wavecoder优于其他开源模型,在以前的代码生成任务中表现出色。


指令调优,释放「代码大模型」潜力


过去的一年,GPT-4、Gemini、Llama等大模型在一系列复杂NLP任务中取得了前所未有的性能。


这些LLM利用自监督预训练的过程,以及随后的微调,展示了强大的零/少样本的能力,能够有效遵循人类指示完成不同的任务。


然而,若想训练微调这样一个大模型,其成本非常巨大。


因此,一些相对较小的LLM,特别是代码大语言模型(Code LLM),因其在广泛的代码相关任务上的卓越的性能,而引起了许多研究者的关注。


鉴于LLM可以通过预训练获得丰富的专业知识,因此在代码语料库上进行高效的预训练,对代码大模型至关重要。


包括Codex、CodeGen、StarCoder和CodeLLaMa在内的多项研究已经成功证明,预训练过程可以显著提高大模型处理代码相关问题的能力。


此外,指令调优的多项研究(FLAN、ExT5)表明,指令调优后的模型在各种任务中的表现符合人类预期。


这些研究将数千个任务纳入训练管道,以提高预训练模型对下游任务的泛化能力。


比如,InstructGPT通过整合人类标注者编写的高质量指令数据,有效地调整了用户输入,推进指令调优的进一步探索。


斯坦福的Alpaca利用ChatGPT通过Self-Instruct的方法,自己生成指令数据,进而用于指令调优的过程。


WizardLM和WizardCoder则应用了evol-instruct的方法,进一步提高了预训练模型的有效性。


这些近来的研究都体现了,指令调优在提高大模型性能方面,展现出强大的潜力。


基于这些工作,研究人员的直觉是,指令调优可以激活大模型的潜力,然后将预训练模型微调到出色的智能水平。


对此,他们总结了指令调优的主要功能:


- 泛化


指令调优最初是为了增强大模型的跨任务泛化能力而提出的,当使用不同的NLP任务指令进行微调时,指令调优可提高模型在大量未见任务中的性能。


- 对齐


预训练模型从大量token和句子层面的自监督任务中学习,已经具备了理解文本输入的能力。指令调优为这些预训练模型提供了指令级任务,让它们能够从指令中提取原始文本语义之外的更多信息。这些额外的信息是用户的意图,能增强它们与人类用户的交互能力,从而有助于对齐。


为了通过指令调优提高代码大模型的性能,目前已有许多设计好的生成指令数据的方法,主要集中在两个方面。


例如,self-instructe、vol-instruct利用teacher LLM的零/少样本的能力来生成指令数据,这为教学数据的生成提供了一种神奇的方法。


然而,这些生成方法过于依赖于teacher LLM的性能,有时会产生大量的重复数据,便会降低微调的效率。


CodeOcean:四项任务代码相关指令数据


为了解决这些问题,如图2所示,研究人员提出了一种可以充分利用源代码,并明确控制生成数据质量的方法。


由于指令调优是为了使预训练模型与指令遵循训练集保持一致,研究人员提出了一个用于指令数据生成的LLM Generator-Disciminator(大模型生成器-判别器)框架。



通过使用生成器和判别器,最新方法可以使数据生成过程,更可定制和更可控。


该方法以原始代码作为输入,选择核心数据集,通过调整原始代码的分布,可以稳定地生成更真实的指令数据,控制数据的多样性。


针对上述挑战,研究人员将指令实例分类为4个通用的代码相关任务:代码汇总、代码生成、代码翻译、代码修复。


同时,使用数据生成策略为4个代码相关的任务生成一个由20000个指令实例的数据集,称为CodeOcean。


为了验证最新的方法,研究人员将StarCoder、CodeLLaMa、DeepseekCoder作为基础模型,根据最新的数据生成策略,微调出全新的WaveCoder模型。


与此同时,研究人员在 HumanEval、MBPP、HumanEvalPack对模型进行了评估,结果表明,WaveCoder在小规模指令调优的基准上拥有出色的性能。



代码数据生成


如上所述,研究人员选择了4个具有代表性的编码任务,并从开源数据集中收集原始代码。


以下具体介绍了训练数据生成过程。


在本节中,我们将介绍我们探索的方法细节。我们首先选择4个代表性的编码任务,并从开源数据集中收集原始代码。


对于每个任务,作者使用GPT-3.5-turbo生成指令数据进行微调。生成提示如表2所示。



如下,是LLM Generator-Disciminator整体架构,也是数据生成的完整过程。



Codesearchnet是一个包含来自 GitHub 上托管的开源库的200万对(注释、代码)的数据集。它包括6种编程语言的代码和文档。我们选择 CodeSearchNet 作为我们的基础数据集,并应用基于 coreset 的选择方法KCenterGreedy来最大化原始代码的多样性。


具体来说,生成器根据输入(a)生成指令数据。随后,判别器接受输出并生成分析结果,输出(b)包括四个键,研究人员将这些信息作为指令调优的输入和输出。


分析(c)包括每条规则的详细原因和总体答案,以检查样本是否满足所有要求。



实验评估结果


代码生成任务评估

表3显示了两个基准上不同大模型的pass@1得分。从结果来看,我们有以下观察结果:


WaveCoder大大优于使用少于20k指令调优数据(InsT Data)的指令模型训练。


经过微调过程,与基础模型和开源模型的选择相比,最新模型的性能显示出实质性的改善,但它仍然落后于专有模型的指导模型训练超过70k的训练数据。



研究人员还用HumanEvalPack上最先进的Code LLM对WaveCoder进行评分,如表4。



表5列出了WaveCoder在代码汇总任务方面的结果,突出显示了以下显著的观察结果:



参考资料:


https://arxiv.org/abs/2312.14187


文章来自于微信公众号 “新智元


关键词: WaveCoder , LLM , 泛化能力
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
微调

【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。

项目地址:https://github.com/InternLM/xtuner