论文阅读_代码生成模型_CodeLlama
1 | 英文名称: Code Llama: Open Foundation Models for Code |
1 读后感
Code Llama 是一个基于 llama2 模型进行训练得到的代码生成大模型。又针对代码填充、长上下文等特殊条件以及人类通常用法进行了优化,因此它集成了 llama2 对自然语言的理解,并针对代码生成场景进行了优化。
除了调用推理,我们一般主要利用微调模型来进行改进模型效果,因此选择一个好的基础模型作为工作基础非常重要,Code Llama 是当前代码生成模型中比较推荐的基础模型。
论文结构针对几项主要贡献进行了层层深入的讨论。在整理时,我把实现部分归纳了一下,把同一主题的内容放在一起了。
2 摘要
目标:发布 Code Llama 代码模型系列,基于 Llama 2 开发,提供了在开放模型中最先进的性能、填充能力、支持大型输入上下文,并具有 zero-shot 指令跟随能力,用于编程任务。
方法:提供多个版本以覆盖各种应用场景:基础模型(Code Llama)、Python 专业化模型(Code Llama-Python)和指令引导模型(Code Llama-Instruct),分别具有 7B、13B 和 34B 参数。
结论:这些模型在性能、填充能力、支持大型输入上下文以及 zero-shot 指令跟随能力方面表现出色。
3 引言
主要贡献
- 基于 llama2 训练:所有 Code Llama 模型都使用 Llama2 模型权重进行初始化,实验证明它优于仅在代码上训练的相同架构。
- 代码填充:生成代码时,需要考虑整个周围上下文的同时填充代码的缺失部分,因此通过多任务目标训练模型,包括自回归和因果填充预测。
- 长上下文:将最大上下文长度从 4,096 token 扩展到 100,000 个 token。
- 指令微调:在专有 Instruct 数据的混合上进行了进一步微调,以提高安全性和实用性。
4 Code Llama 实现
4.1 发布了三个版本
- Code Llama:基础模型。
- Code Llama - Python:用于 Python 版本。
- Code Llama - Instruct:引导微调版本。
4.2 训练数据
从 Llama 2 的 7B、13B 和 34B 版本开始,在初始阶段使用 500B token 训练 Code Llama。
4.3 代码填充
代码填充的目标是在给定周围上下文情况下预测程序缺失部分。
使用因果掩蔽的概念来训练填充模型。将字符级别的训练文档拆分为前缀、中间部分和后缀,拆分位置独立于文档长度上的均匀分布进行采样。
4.4 长上下文微调
提出了一个专用的长上下文微调(LCFT)阶段,模型支持 16,384 个 token 的序列,高于 Llama 2 和初始代码训练阶段使用的 4,096 个 token。对旋转位置嵌入进行优化,将基周期从 10,000 增加到 1,000,000 以进行微调。使模型支持处理更大的序列,并减少短距离注意力的倾向。
4.5 指令微调
使用三种不同类型的数据训练:
4.5.1 专有数据集
使用 Llama 2 论文中的指令调整数据集 “RLHF V5” 微调模型,通过人类反馈和人类反馈注释的强化学习的几个阶段收集,它结合了数以千计的监督微调示例,每个示例都包含用户和工具之间的多轮对话。
4.5.2 自我指导
专有数据集包含几个与代码相关的任务示例。
使用执行反馈来选择数据来训练我们的指令模型,而不是人工反馈。我们按照以下方法构建自学数据集,得到约 14,000 个问题 - 测试 - 解决方案三元组。
- 通过提示生成 62,000 个访谈式编程问题 Llama 2 70B。详见附录中图 -9。
- 通过删除完全重复的问题来消除重复问题集,从而产生约 52,000 个问题。
- 对于每个问题:
- 通过提示 Code Llama 7B 生成单元测试(图 10 中包含提示)。
- 通过提示 Code Llama 7B 生成 10 个 Python 解决方案(图 11)。
- 对十个解决方案运行单元测试。将通过测试的第一个解决方案(及其相应的问题和测试)添加到自指导数据集。
我们使用 Code Llama 7B 来生成测试和 Python 解决方案,因为作者发现,在相同的计算预算下,它比使用 34B 模型为每个问题生成更少的解决方案更有效。
4.5.3 排演
为了防止模型在一般编码和语言理解能力上倒退,Code Llama - Instruct 还使用来自代码数据集(6%)和自然语言数据集(2%)的一小部分数据进行训练。
4.6 训练方法
具体参数请见论文原文:Training details 部分。
4.7 结果
主实验结果如下,后面还有一些消融实验,用于展示文中几种优化的具体效果。
5 相关工作
相关工作中列出了其它主流的代码生成工具,也可以看一下。