论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code
中文名称: Code Llama:开放基础代码模型
链接: https://arxiv.org/abs/2308.12950
代码: https://github.com/facebookresearch/codellama
作者: Baptiste Rozière, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Romain Sauvestre, Tal Remez, Jérémy Rapin, Artyom Kozhevnikov, Ivan Evtimov, Joanna Bitton, Manish Bhatt, Cristian Canton Ferrer, Aaron Grattafiori, Wenhan Xiong, Alexandre Défossez, Jade Copet, Faisal Azhar, Hugo Touvron, Louis Martin, Nicolas Usunier, Thomas Scialom, Gabriel Synnaeve
机构: Meta AI
日期: 2023-08-24
引用次数: 319

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 个问题 - 测试 - 解决方案三元组。

  1. 通过提示生成 62,000 个访谈式编程问题 Llama 2 70B。详见附录中图 -9。
  2. 通过删除完全重复的问题来消除重复问题集,从而产生约 52,000 个问题。
  3. 对于每个问题:
    • 通过提示 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 相关工作

相关工作中列出了其它主流的代码生成工具,也可以看一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序云开发教程——墨刀原型工具入门(文件设置+编辑组件)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

C++STL之vector

vector 1. vector介绍 vector文档vector其实就是一个顺序表,它表示可变大小数组的序列容器。像数组一样,可以使用下标[] 来访问vector的元素,和数组一样高效;甚至,它的大小是可以动态改变的,其大小由容器自…

广和通5G智能模组SC171支持Android、Linux和Windows系统,拓宽智能物联网应用

世界移动通信大会2024期间,广和通宣布:5G智能模组SC171除支持Android操作系统外,还兼容Linux和Windows系统,帮助更多智能终端客户快速迭代产品,拓宽智能化应用覆盖范围。 广和通SC171系列基于高通QCM6490物联网解决方案…

Redis安全加固策略:服务账号管理 开启redis密码认证 开启防护模式

Redis安全加固策略:服务账号管理 & 开启redis密码认证 & 开启防护模式 1.1 服务账号管理1.1.1 检测方法1.1.2 加固参考配置操作 1.2 开启redis密码认证1.2.1 检测方法1.2.2 加固参考配置操作 1.3 开启防护模式1.3.1 检测方法1.3.2 加固参考配置操作 &#x…

图神经网络实战——基于DeepWalk创建节点表示

图神经网络实战——基于DeepWalk创建节点表示 0. 前言1. Word2Vec1.1 CBOW 与 skip-gram1.2 构建 skip-gram 模型1.3 skip-gram 模型1.4 实现 Word2Vec 模型 2. DeepWalk 和随机行走3. 实现 DeepWalk小结系列链接 0. 前言 DeepWalk 是机器学习 (machine learning, ML) 技术在图…

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …

寻址错题本

指令寻址 顺序寻址 通过程序计数器PC自动加1,形成下一条指令的指令地址。 跳跃寻址 通过转移类指令实现跳转到指定的代码段或者子程序。 数据寻址 直接寻址 形式地址A就是操作数的地址EA,执行阶段访问一次存储器。 所以当我们需要取得实际的值(操作数)的时候: 第一步:…

项目实战 MySQL读写分离【构建主从结构数据库(查从库)(增删改主库)】【ShardingJDBC实现读写分离】

项目实战 MySQL读写分离 1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.3 从库配置 2. 读写分离案例2.2 ShardingJDBC介绍 转自-黑马 在前面基础功能实现的过程中,我们后台管理系统及移动端的用户,在进行数据访问时,都是直接操作数据库…

MYSQL---日志

1.日志的概述 日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化;也就是说用来记录MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因&#xff0…

自定义类型(结构体、枚举、联合体)内存大小的计算方法

内存对齐 为什么会存在内存对齐? 大部分参考资料是这么说的: 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。性能原…

LeetCode---386周赛

题目列表 3046. 分割数组 3047. 求交集区域内的最大正方形面积 3048. 标记所有下标的最早秒数 I 3049. 标记所有下标的最早秒数 II 一、分割数组 这题简单的思维题,要想将数组分为两个数组,且分出的两个数组中数字不会重复,很显然一个数…

Apache Flink连载(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-2

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

BUGKU 网站被黑

打开环境,什么都没发现,使用蚁剑扫描一下,发现shell.php,打开 使用BP抓包,进行爆破 得到密码:hack 进去得到flag

Vins-Moon配准运行

Vins-Moon运行 源码地址电脑配置环境配置编译适配Kitti数据集运行结果Euroc数据集kitti数据集 evo评估(KITTI数据)输出轨迹(tum格式)结果 源码地址 源码链接:https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git 电脑配置 Ubuntu 18.…

2024年不容错过的行业峰会盛宴,引领未来商业潮流!

随着全球经济的不断演变和科技的日新月异,行业峰会成为了企业领袖、创新者和投资者们洞察未来趋势、交流前沿思想的重要平台。 2024年,一系列引人瞩目的行业峰会即将拉开帷幕,它们将汇聚全球精英,共同探讨各行业的未来发展之路。…

ssm637教材管理系统

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1研究背…

day02-JavaScript-Vue

文章目录 1 JavaScript1.1 介绍 1.2 引入方式1.3 基础语法1.3.1 书写语法1.3.2 变量1.3.3 数据类型和运算符 1.4 函数1.4.1 第一种定义格式1.4.2 第二种定义格式 1.5 JavaScript对象1.5.1 基本对象1.5.1.1 Array对象语法格式特点属性和方法 1.5.1.2 String对象语法格式属性和方…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 ,因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

[GYCTF2020]EasyThinking --不会编程的崽

看标题就知道,这大概率是关于thinkphp的题目。先尝试错误目录使其报错查看版本号 thinkphp v6.0.0,在网上搜索一下,这个版本有一个任意文件上传漏洞。参考以下文章。 https://blog.csdn.net/god_zzZ/article/details/104275241 先注册一个账…

【python】遵守 robots.txt 规则的数据爬虫程序

程序1 编写一个遵守 robots.txt 规则的数据爬虫程序涉及到多个步骤,包括请求网页、解析 robots.txt 文件、扫描网页内容、存储数据以及处理异常。由于编程语言众多,且每种语言编写爬虫程序的方式可能有所不同,以下将使用 Python 语言举例&am…