论文概述
学习这个RRTF之前,可以先学习一下RLHF。
顺带一提:eosphoros-ai组织「DB-GPT开发者」最新有个新项目Awesome-Text2SQL:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2SQL, and more.,收集了Text2SQL+LLM领域的相关简介、综述、经典Text2SQL方法、基础大模型、微调方法、数据集、实践项目等等,欢迎围观尝试。
基本信息
- 英文标题:PanGu-Coder2: Boosting Large Language Models for Code with Ranking Feedback
- 中文标题:PanGu-Coder2:通过排名反馈提升代码的大型语言模型
- 发表时间:2023年7月
- 作者单位:华为云、中科院、北大
- 论文链接:https://arxiv.org/pdf/2307.14936v1.pdf
- 代码链接:无(框架和模型都没有开源)
-
- 可以参考一下RRHF代码:https://github.com/GanjinZero/RRHF
摘要
- 代码大模型Code LLM正在蓬勃发展
- 之前已经有各种方法提高代码生成的性能
-
- 监督学习SFT(supervised fine-tuning)
- 指令微调(instruction tuning)
- 强化学习(reinforcement learning)
- 本文提出了新的框架RRTF:Rank Responses to align Test&Teacher Feedback
- 基于这个框架,提出了盘古代码大模型PanGu-Coder2
补充:GPT-4是67%, Code Llama也是62.2%, GPT3.5是 48.1%。详情可以参考Code Llama论文学习
-
- 在HumanEval基准测试上实现了62.20% pass@1
- CoderEval和LeetCode基准的广泛评估,表明PanGu-Coder2始终优于所有以前的Code LLM。
结果
对比模型
- CodeGen-mono 16B
- CodeGeeX 13B
- StarCoder 15B
- CodeT5+ 16
- WizardCoder 15B:PanGu-Coder2发布前最先进的模型。(之前介绍过同系列的WizarLM论文学习)
数据集
- HumanEval
- CodeEval
-
- 包括来自43个开源Python项目的230个函数和测试。
- LeetCode:300个问题
-
- 79个easy问题
- 150个medium问题
- 71个hard问题
prompt
和原模型论文的prompt一致
数据
- 开源里面第一,比当时的WizardCoder-57.3%高
- 闭源里面,比GPT3.5低。
- PanGu-Coder2 61.64%。
- 三个数据集HumanEval、CodeEval、LeetCode上对比(贪婪解码greedy decoding. )
题外话:2023年8月29日,WizardCoder 34B已经超过GPT-4了,73.2%无敌!
-
- PanGu-Coder2 62.20%。
结论
- 引入了一个新的框架RRTF,并提出了一个新的代码LLM,即PanGu-Coder2。
-
- 首先,我们采用Evol-Instruct技术获得了大量高质量的自然语言指令和代码解数据对。
- 然后,我们通过使用来自测试用例和启发式偏好的反馈对候选代码解决方案进行排序来训练基本模型。
- 通过对HumanEval、CodeEval和LeetCode基准的综合评估,PanGu-Coder2在15B参数级代码llm中达到了最先进的性能,超越了现有的所有代码llm。
核心方法——RRTF
RRTF借鉴的方法
- instruct tuning 指令微调(SFT)
- Evol-instruct (WizardLM提出的方法,参考之前的链接)
- RL (强化学习方法)
-
- RL应用的文献论文中写的是「Zheng Yuan, Hongyi Yuan, Chuanqi Tan, Wei Wang, Songfang Huang, and Fei Huang. Rrhf: Rank responses to align language models with human feedback without tears. arXiv preprint arXiv:2304.05302, 2023.」但是实际上这个arxiv链接以及作者对应的都是「RRHF: Rank Responses to Align Language Models with Human Feedback without tears」,应该是笔误。
-
RRTF类似的方法
- RLHF :(reinforcement learning from human feedback)
- RRHF :(RRHF: Rank Responses to Align Language Models with Human Feedback without tears) https://github.com/GanjinZero/RRHF
- RLTF:(Rltf: Reinforcement learning from unit test feedback)GitHub - Zyq-scut/RLTF
- RAFT:(RAFT: Reward rAnked FineTuning for Generative Foundation Model Alignment)RAFT — LMFlow documentation
- RRTF代码实现:有个issue讨论,目前还没有实现代码。
RRTF框架
论文中说的是simple but powerful framework RRTF,确实看起来简单明了,效果显著可惜没有代码。
框架主要分成3个部分:
- sampling 采样
- ranking 排序
- training 训练
核心思想:利用了单元测试+人类偏好联合作为反馈(test signals and human preferences jointly as feedback)(RLHF只是利用人类偏好)
sampling 采样
- 采样阶段:response是通过Evol-instruct生成的prompt进行采样的。
-
- Evol-instruct主要是WizardLM论文中的思想。
-
-
- 把prompt变得更深
- 把prompt变得更广
-
ranking 排序
- 在排序阶段,根据单元测试和启发式偏好对来自不同来源的响应进行排序
-
- code训练错误的数据主要有4类:(分数由低到高)
-
-
- 编译错误compiled error
- 运行错误runtime error
- 只通过部分用例pass partial tests
- 全部通过用例pass all
-
如果教师模型和学生模型都处于同一个情况,比如都是编译错误,那么也会让教师模型的排名比学生模型高
如果教师模型分数比学生模型分数低,那么就过滤掉这个数据
training 训练
RLHF中是使用二元组「pormpt,chosen/rejected」训练,分数是通过奖励模型RM给出。
- 在训练阶段,使用三元组「pormpt,chosen/rejected,scores」来训练Code LLM。
- 每一个prompt都对应着一个response 对「y_tea,y_stu」
-
- y_tea就是教师模型对应的response
- y_stu就是学生模型对应的response
teacher 模型是什么?student 模型是什么?(有点类似蒸馏学习中的教师-学生模型,让学生模型不断向教师模型靠近)
teacher模型论文没说是啥?估计是GPT-4。student 模型就是基础StarCoder 15B
- 损失函数=sft损失+排序rank损失
参考
1.huggingface博客讲解RLHF: Illustrating Reinforcement Learning from Human Feedback (RLHF)
2.RRHF代码实现:RRHF: Rank Responses to Align Language Models with Human Feedback without tears
3.RLTF代码实现:RLTF: Reinforcement learning from unit test feedback
4.RAFT代码实现:RAFT: Reward rAnked FineTuning for Generative Foundation Model Alignment
5.Text2SQL+LLM教程汇总项目:https://github.com/eosphoros-ai/Awesome-Text2SQL
6.Text2SQL+LLM模型微调实践项目:GitHub - eosphoros-ai/DB-GPT-Hub: A repository that contains models, datasets, and fine-tuning techniques for DB-GPT, with the purpose of enhancing model performance, especially in Text-to-SQL.