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

news2024/11/17 14:53:45
英文名称: 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 相关工作

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React的fiber原理

在读完这篇文章之后,大家可以回到文章开头再捋一下以下几个关键词,将React的 Fiber架构原理彻底搞清楚。 关键词: requestIdleCallback、IdleDeadlineFiber:React的一个执行单元 在Fiber 出现之前,React存在什么问题…

bxCAN总线Loopback功能实现(STM32F4xx)

目录 概述 1 认识bxCAN Loopback 1.1 环回模式 1.2 环回模式特点 2 使用STM32CubeMX 生成工程 2.1 参数配置 2.2 生成工程代码 2.4 了解can.c 3 认识Hal库中的bxCAN 3.1 认识3个重要数据结构 3.2 函数组 3.2.1 初始化函数组 3.2.2 控制函数组 3.2.3 中断管理函数…

【风格迁移】pix2pixHD:高分辨率图像生成

pix2pixHD:高分辨率图像生成 提出背景问题1: 如何提高生成图像的照片级真实感和分辨率?问题2: 如何利用实例级别的对象语义信息进一步提高图像质量?问题3: 如何实现图像合成的多模态性,允许交互式对象编辑? pix2pixHD …

【STK】手把手教你利用STK进行仿真-STK软件基础01 STK的对象组织模式

STK系统采用面向对象和分级组织结构的管理模式对仿真对象进行管理,这种组织二行管理模式非常符合人类的认知习惯,易于理解。STK最基本的对象为场景(Scenario),在场景中可以面向对象和分级组织模式对各场景中的仿真对象…

[c++] c++ 中的顺序(构造,析构,初始化列表,继承)

对象构造的时候,对象成员变量的初始化顺序是什么样的 ? 派生类构造的时候,先构造基类还是先构造派生类 ? 构造函数中的初始化列表,初始化的顺序是列表的顺序吗 ? 析构的时候,析构的顺序是什么…

华为数通方向HCIP-DataCom H12-821题库(多选题:41-60)

第41题 BGP OPEN消息中携带如下哪些信息? A、路由属性 B、BGP Router ID C、Hold time D、本地自治系统(AS)号 【参考答案】BCD 【答案解析】 B. BGP Router ID:OPEN消息中包含发送方BGP路由器的Router ID,用于唯一标识BGP路由器。C.Hold time:OPEN消息中包含发送方BGP路由…

区块链媒体发布推广10个热门案例解析-华媒舍

区块链技术的发展已经引起了媒体的广泛关注,越来越多的区块链媒体纷纷发布推广相关的热门案例。本文将介绍10个成功的区块链媒体推广案例,并分享它们的成功秘诀,帮助读者更好地了解区块链媒体推广的方法与技巧。 随着区块链技术的成熟和应用场…

vue2本地开发环境正常,生产环境下this.$router.push({ name: ‘login‘ })不跳转

如果在Vue.js 2中在本地开发环境下正常运行,但在生产环境下使用​​this.$router.push({ name: login })​​不起作用,可能有几个原因需要检查和解决: 路由配置问题: 确保你的路由配置正确,特别是确保在生产环境中,路由的配置和本地开发环境一致。检查是否正确设置了name…

课程表系列(BFS)

广度优先搜索 文章目录 广度优先搜索207. 课程表210. 课程表 II思路 630. 课程表 III1462. 课程表 IV547. 省份数量 207. 课程表 207. 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程…

多元函数积分思路合集

[曲线积分笔记]第一类曲线积分 [微积分笔记]第二类曲线/面积分总结 积分方法意义/提示平面第二型曲线积分化为定积分 ∮ L → ∫ a b \oint_L \to \int_a^b ∮L​→∫ab​平面第二型曲线积分格林公式 ∮ L → ∬ D \oint_L \to \iint_D ∮L​→∬D​化为对平面区域的二重积分空…

百度搜索引擎SEO优化方法

随着互联网的不断发展,搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国,百度作为最大的搜索引擎,其影响力不可忽视。了解并掌握百度SEO关键词优化方法,对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3(Generative Pre-trained Transformer 3)作为人工智能领域的一项重大突破,开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器,为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

JS:原型与原型链(附带图解与代码)

一、原型 写在前面: 任何对象都有原型。 函数也是对象,所以函数也有原型。 1.什么是原型 在 JavaScript 中,对象有一个特殊的隐藏属性 [[Prototype]],它要么为 null,要么就是对另一个对象的引用,该对象…

MATLAB基于隐马尔可夫模型-高斯混合模型-期望最大化的MR图像分割

隐马尔可夫模型是一种统计模型,它描述了马尔可夫过程,隐马尔可夫过程中包含隐变量,语音识别和词性自动标注等一些领域常常使用隐马尔可夫模型方法来处理。马尔可夫过程是一类随机过程,马尔可夫链是它的原始模型,马尔可…

《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记1

传统的3D场景理解方法依赖于带标签的3D数据集,用于训练一个模型以进行单一任务的监督学习。我们提出了OpenScene,一种替代方法,其中模型在CLIP特征空间中预测与文本和图像像素共同嵌入的3D场景点的密集特征。这种零样本方法实现了与任务无关的训练和开放词汇查询。例如,为了…

03-JNI 类型和数据结构

上一篇: 02-设计概述 本章讨论 JNI 如何将 Java 类型映射为本地 C 类型。 3.1 原始类型 下表描述了 Java 原始类型及其与机器相关的本地等价类型。 为方便起见,定义如下: #define JNI_FALSE 0 #define JNI_TRUE 1 jsize 整数类型用于描述…

《Spring Security 简易速速上手小册》第8章 常见问题与解决方案(2024 最新版)

文章目录 8.1 异常处理和日志记录8.1.1 基础知识详解8.1.2 重点案例:统一异常处理案例 Demo拓展 8.1.3 拓展案例 1:日志记录策略案例 Demo拓展 8.1.4 拓展案例 2:日志聚合案例 Demo拓展 8.2 多租户安全性问题8.2.1 基础知识详解8.2.2 重点案例…

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD(创建、读取、更新和删除)操作的一个接口。在与 Redis 集成时,尽管 Redis 是一个键值存储系统,并没有像关系型…

STM32使用FlyMcu串口下载程序与STLink Utility下载程序

文章目录 前言软件链接一、FlyMcu串口下载程序原理优化手动修改跳线帽选项字节其他功能 二、STLink Utility下载程序下载程序选项字节固件更新 前言 本文主要讲解使用FlyMcu配合USART串口为STM32下载程序、使用STLink Utility配合STLink为STM32下载程序,以及这两个…

javascript中对包含关系判断介绍

本文将为您详细讲解 JavaScript 中对包含关系的判断,包括数组、字符串等,并提供相应的代码例子。 1. 数组包含关系判断 在 JavaScript 中,数组包含关系判断通常使用 Array.prototype.includes() 方法。这个方法返回一个布尔值,表示…