论文笔记:Code Llama: Open Foundation Models for Code

导语

Code Llama是开源模型Llama 2在代码领域的一个专有模型,作者通过在代码数据集上进行进一步训练得到了了适用于该领域的专有模型,并在测试基准中超过了同等参数规模的其他公开模型。

  • 链接:https://arxiv.org/abs/2308.12950
  • 机构:Meta AI

1 引言

LLMs在自然语言处理方面已达到高水平,在代码领域能够执行多种任务(例如程序合成、代码完成、调试和生成文档)。本文介绍了Code Llama,这是一系列基于Llama 2的代码生成和填充的LLMs,并以自定义宽松许可发布。

Code Llama的训练和微调过程如下:

  • 从基础模型进行代码训练:与其他只在代码上训练的LLMs不同,Code Llama基于通用文本和代码数据的Llama 2预训练模型进行微调。
  • 填充功能:Code Llama的7B和13B模型采用自回归和因果填充预测的多任务目标,使得模型能够在完整上下文中填充缺失的文本。
  • 长输入上下文:Code Llama通过修改RoPE位置嵌入的参数,将最大上下文长度从4,096个标记扩展到100,000个标记。
  • 指令微调:Code Llama - Instruct变体通过混合专有指令数据和机器生成的自指令数据集进行了进一步微调,以提高安全性和实用性。

image.png

Code Llama的不同变体:提供了三种主要变体,每种变体有三种大小(7B、13B和34B参数):

  • Code Llama:基础代码生成模型。
  • Code Llama - Python:专为Python定制的版本。
  • Code Llama - Instruct:结合了人类指令和自生成代码合成数据的版本。

本文对模型在主要的代码生成基准测试(如HumanEval、MBPP、APPS以及多语言版本的HumanEval,即MultiPL-E)上进行了全面评估。Code Llama在这些测试中表现优异,建立了开源LLMs的新标准。

image.png

2 Code Llama: Specializing Llama 2 for code

2.1 Code Llama模型家族

  • Code Llama:基础模型,专注于代码生成。有三种规模:7B、13B和34B参数。7B和13B模型使用填充目标训练,适合在IDE中完成文件中间的代码。34B模型未使用填充目标。所有Code Llama模型均以Llama 2模型权重初始化,并在以代码为主的500Btoken数据集上训练,然后针对长上下文进行微调。
  • Code Llama - Python:专为Python代码生成定制,也有7B、13B和34B三种规模。从Llama 2模型初始化,使用Code Llama数据集中的500B token和额外的以Python为主的100B token数据集进行训练。所有Code Llama - Python模型都未使用填充训练,随后针对长上下文进行微调。
  • Code Llama - Instruct:基于Code Llama,增加了约5B token的训练以更好地遵循人类指令。具体细节见2.5节。

2.2 数据集

Code Llama在初始阶段使用500B token进行训练,起点为Llama 2。训练主要基于公开可用的近似去重代码数据集,同时包括8%的与代码相关的自然语言数据集。数据通过字节对编码(BPE)进行标记化,使用与Llama和Llama 2相同的Tokenizer。实验表明,从自然语言数据集中采样的批次可以提高模型在MBPP上的性能。

2.3 填充

代码填充是指在给定周围上下文的情况下预测程序缺失部分的任务。应用包括在代码IDE中完成光标位置的代码、类型推断和生成代码文档(如docstrings)。7B和13B通用模型采用填充目标进行训练。训练文档在字符级别被分割为前缀、中间部分和后缀,分割位置从文档长度的均匀分布中独立采样。Llama 2的Tokenizer增加了四个特殊标记,用于标记填充跨度的开始和结束。填充训练对下游生成任务的影响和填充模型在填充基准测试中的性能在第3.2节报告。

2.4 长上下文微调(Long context Fine-tuning)

有效处理长序列是基于Transformer的语言模型研究的主要课题。Code Llama提出了一个专门的长上下文微调(LCFT)阶段,模型处理的序列长度从4,096个token增加到16,384个token。这种策略类似于最近提出的基于位置插值的微调,我们证实了修改Llama 2基础模型中使用的旋转位置嵌入的旋转频率的重要性。实验证实,Code Llama模型不仅在微调期间使用的增加序列长度内有效,而且显示出对极长序列(高达100,000个token)的稳定行为(第3.3节报告)。

2.5 指令微调

基于Code Llama的指令微调模型(Code Llama - Instruct)旨在适当回答问题。它们在三种不同类型的数据上进行训练。

  1. 专有数据集:使用为Llama 2收集的指令调整数据集,包含有助于提高安全性和有用性的数据。
  2. Self-instruct:自指令数据集包含大约14,000个问题-测试-解决方案三元组,由Llama 2生成的编程问题和Code Llama生成的单元测试和解决方案组成。
  3. 数据混合:为防止模型在一般编码和语言理解能力上退化,Code Llama - Instruct还使用了来自代码数据集的小比例数据(6%)和自然语言数据集(2%)进行训练。

2.6 训练细节

  • 使用AdamW优化器,批大小为4M个token,表示为4,096个token的序列。对于Python微调,初始学习率设为1e-4。Code Llama - Instruct的训练使用524,288个token的批大小,总共训练约5B个token。
  • 长上下文微调阶段使用2e-5的学习率,序列长度为16,384,重置RoPE频率的基本值为θ = 10^6。7B和13B模型的批大小设为2M个token,34B模型为1M个token。根据不同配置调整梯度步数。

3 结果

3.1 代码生成

3.1.1 Python代码生成

实验结果如下图,可以看到模型参数的增加对于专门用于编码的模型很重要,规模更大的模型在各项指标上表现更优。

image.png

3.1.2 多语言评估

Code Llama和Code Llama Python的性能相当,细节见附录B的表11。

image.png

3.2 填充评估

模型在代码填充基准测试中达到同规模模型中的最佳性能。

image.png

image.png

3.3 长上下文评估

  • 复杂性和关键检索:测试了Code Llama处理长序列的能力,包括困惑度、关键检索准确性和在代码完成任务中的性能。
  • 长序列的性能影响:LCFT对短序列的标准代码合成基准测试有轻微负面影响,但对于真实应用中的长序列处理潜力更重要。

image.png

3.4 消融研究

3.4.1 微调Llama 2 vs. 从头开始训练代码

作者比较了从Llama 2微调的7B模型与从头开始训练的同等模型。从头开始训练的模型在相同训练token数下性能较差。

3.4.2 指令微调:普遍帮助性 vs. 编码能力
  • Self-instruct数据的价值:使用自生成的单元测试进行的Self-instruct训练提高了模型在如HumanEval和MBPP等基准测试上的性能。
  • 非自然模型:对Code Llama - Python 34B进行了非自然指令的微调,以用作比较。尽管没有发布此模型,但其在HumanEval和MBPP上的改进表明了使用高质量编码数据的潜在优势。

image.png

3.4.3 Pass@k评估

研究了采样温度对Pass@k性能的影响:报告了在不同温度下的Pass@1、10和100的性能。随着温度的升高,Pass@1分数变差,而Pass@10和Pass@100则改善。

image.png

4 负责任的人工智能与安全

大型语言模型可能产生错误信息、有害或冒犯性内容,以及复制或放大训练数据中的偏见。Code Llama - Instruct通过微调Llama 2的输出,包括安全响应的对抗性提示和代码特定风险的提示,提高了安全性。

安全性评估包括以下几个方面:

  • 真实性:使用TruthfulQA基准测试模型对事实和常识的处理能力。
  • 有毒性:使用ToxiGen基准测试模型生成有关各种人群的有毒和仇恨言论的能力。
  • 偏见:使用BOLD基准测试模型输出中基于人口属性的情感差异。

image.png

Code Llama - Instruct在真实性和有毒性方面相比未微调的Code Llama有显著提升。在BOLD测试中,Code Llama - Instruct倾向于对许多人口群体表现出更多的积极情感。

image.png

作者还进行了红队测试,通过25名Meta员工进行了3次红队练习,包括负责任的AI、恶意软件开发和攻击性安全工程等领域的专家。专家对可能用于恶意目的的代码请求进行了评估。专家对通过LLMs生成恶意代码的最终风险提出了疑问。作者发现,过于安全的LLMs可能会过度拒绝有效请求。红队测试发现了一些有限的错误拒绝证据。指令微调集合优先考虑安全性,较长的微调倾向于降低编码性能。Code Llama - Instruct模型在安全性方面优于ChatGPT。

5 相关工作

6 讨论

本文发布了一系列专门针对代码的Llama 2模型,称为Code Llama,包括三个主要变体,每个变体有三种规模(7B、13B和34B参数):Code Llama、Code Llama - Python、Code Llama - Instruct。考虑到实际应用,作者训练了我们的7B和13B模型以支持填充,并训练所有模型以处理大型上下文。本文测试了它们在推理中处理高达100K token的稳定性(图4a)。长上下文微调和填充对标准基准左向右代码生成基准测试(表10)来说是有成本的,这些基准测试都基于短序列(即函数级别)。尽管如此,30B模型在标准Python完成基准测试中是公开模型中的最佳,并且提出的其他模型与参数数量相似的模型相比也具有竞争力。在多语言基准测试中,即使是最小的模型(Code Llama 7B)也超过了其他所有公开模型。

Code Llama - Instruct模型经过训练,为Code Llama提供零样本指令能力。在这一进一步的微调中,不仅专注于提供更直接的帮助(图5c),也寻求提供更安全的使用和部署模型(第4节)。遵循指令和过度安全可能会在评估中失去一些分数(例如,在表2中的34B模型的HumanEval上),如图14所示。LLMs需要进一步的工作来理解其指令中的上下文和细微差别。

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

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

相关文章

[cg] Games 202 - NPR 非真实感渲染

NPR特性(基于真实感渲染) 真实感--》翻译成非真实感的过程 NPR风格 需要转换为渲染中的操作 1.描边 B-->普通边界(不是下面几种的) C-->折痕 M-->材质边界 S-->需要在物体外面一圈上,并且是多个面共享…

win11部署自己的privateGpt(2024-0304)

什么是privateGpt? privategpt开源项目地址 https://github.com/imartinez/privateGPT/tree/main 官方文档 https://docs.privategpt.dev/overview/welcome/welcome PrivateGPT是一个可投入生产的人工智能项目,利用大型语言模型(LLMs)的…

流行 NFT 的必备指南

​作者:stellafootprint.network 编译:mingfootprint.network 来源:Footprint Analytics Blog 随着爱好者们对 NFT 的兴趣不断高涨,Footprint Analytics 发布了一系列文章,重点介绍各种热门 NFT 系列。这些文章深入…

GBU808-ASEMI整流桥GBU808参数、封装、尺寸

编辑:ll GBU808-ASEMI整流桥GBU808参数、封装、尺寸 型号:GBU808 品牌:ASEMI 封装:GBU-4 最大重复峰值反向电压:800V 最大正向平均整流电流(Vdss):8A 功率(Pd):中小功率 芯片个数&#…

【网站项目】075学生信息管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

xss.haozi.me:0x0B

<svg><script>(1)</script>

WebSocket 详解教程

概述 WebSocket 是什么&#xff1f; WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么需要 WebSocket &#xff1f; 了解计算机网络协议的人&#xff0c;应该都知道&#x…

基于云的虚拟桌面基础架构 (VDI)的优势有哪些?

OpenText™ Exceed TurboX™ &#xff08;ETX&#xff09; 长期以来一直是虚拟化在 Linux 主机上运行的图形要求苛刻的软件的黄金标准。ETX 最新版本&#xff08;12.5&#xff09;增加了许多Microsoft Windows功能&#xff0c;包括Windows服务器&#xff0c;使ETX成为任何Windo…

HCIA-Datacom题库(自己整理分类的)_33_DHCP协议多选【7道题】

1.使用动态主机配置协议DHCP分配IP地址有哪些优点? 可以实现IP地址重复利用 工作量大且不好管理 配置信息发生变化(如DNS),只需要管理员在DHCP服务器上修改,方便统一管理 避免IP地址冲突 2.网络中部署了一台DHCP服务器,但是管理员发现部分主机并没有正确获取到该DHCP服务…

Kafka面经

1.Kafka如何保证消息不丢失 生产者&#xff1a; 1.Producer 默认是异步发送消息&#xff0c;这种情况下要确保消息发送成功&#xff0c;有两个方法 a. 把异步发送改成同步发送&#xff0c;这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结…

UNIapp实现局域网内在线升级

首先是UNIapp 生成apk 用Hbuilder 进行打包 可以从网站https://www.yunedit.com/reg?gotocert 使用自有证书&#xff0c;目测比直接使用云证书要快一些。 发布apk 网站 用IIS发布即可 注意事项中记录如下内容 第一、需要在 iis 的MiMe 中添加apk 的格式&#xff0c;否则无法…

STM32(15)USART编程

使用USART实现STM32与电脑之间的通信 中介&#xff1a;USB转TTL模块 闭合总开关&#xff0c;外部时钟才会传输到分频器 c8t6手册里面写了&#xff0c;usart最大支持4.5MHz&#xff0c;所以选10 重映射时记得开启AFIO的时钟

Android logcat系统

一 .logcat命令介绍 android log系统: logcat介绍 : logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息. 二.C/Clogcat访问接口 Android系统中的C/C日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别&#xff1a; /…

opencart3 添加速卖通商品脚本

非爬虫&#xff0c;只能把速卖通商品信息拿下来解析插入到自己的项目里。 刚接触opencart3没多久&#xff0c;有一些新项目需要添加商品&#xff0c;每次手动从速卖通复制信息又很慢&#xff0c;就自己写了一个脚本。 思路&#xff1a;速卖通商品详情页有一段数据包含了几乎所…

Vue-02

开发者工具 安装插件&#xff0c;用于调试 Vue 应用。 https://chrome.zzzmh.cn/index 搜索 Vue &#xff0c;下载 Vue.js Devtools &#xff0c;此插件可以帮助更新信息&#xff0c;而不通过控制台更新&#xff0c;更方便调试。 注&#xff1a;安装插件后&#xff0c;记得在插…

Hello World!第一个labview程序

软件版本&#xff1a; labview myrio 2021英文版 因为没有找到中文版的&#xff0c;据说是myrio没有中文版本 实验内容&#xff1a; 文本显示&#xff0c;程序界面输入任意文本&#xff0c;然后运行程序 在前面板显示出输入的文本 以下为具体步骤&#xff1a; 第一步&…

no declaration can be found for element ‘rabbit:connection-factory‘

spring-mvc 配置 rabbitmq 出现问题。 我的解决方案如下&#xff1a; 1 找到配置文件 spring-rabbitmq.xml 我的配置文件叫&#xff1a;spring-rabbitmq.xml&#xff0c;你们按照自己的查找。 2 定位如下URI 接着 Ctrl鼠标左键 3 确定spring-rabbit-x.x.xsd 按照步骤2 &…

拿到年终奖马上离职,厚道吗?

拿到年终奖马上离职&#xff0c;厚道吗&#xff1f; 大家好&#xff0c;我是銘&#xff0c;全栈开发程序员。 今天在知乎上看到一个问题&#xff1a;拿到年终奖后马上辞职&#xff0c;厚道吗&#xff1f; image-20240229232132786 我的答案是&#xff1a;厚道&#xff0c;非常厚…

day03_Vue_Element

文章目录 01.Ajax1.1 Ajax 概述1.2 同步异步1.3 原生Ajax 2. Axios2.1 Axios的基本使用2.2 Axios快速入门2.3请求方法的别名2.4 案例 3 前后台分离开发3.1 前后台分离开发介绍 04 YAPI4.1 YAPI介绍4.2 接口文档管理 05 前端工程化5.1 前端工程化介绍5.2 前端工程化入门5.2.1 环…

吴恩达机器学习全课程笔记第七篇

目录 前言 P114-P120 推荐系统 协同过滤 均值归一化 协同过滤的tensorflow实现 查找相关项目 P121-P130 基于内容的过滤 强化学习 P131-P142 状态动作值函数定义 Bellman方程 随机环境 连续状态空间应用实例 前言 这是吴恩达机器学习笔记的第七篇&#xff0c;…