破解密码 LLM(代码LLM如何从 RNN 发展到 Transformer)

舒巴姆·阿加瓦尔

一、说明

        近年来,随着 Transformer 的引入,语言模型发生了显着的演变,它彻底改变了我们执行日常任务的方式,例如编写电子邮件、创建文档、搜索网络甚至编码方式。随着研究人员在代码智能任务中应用大型语言模型,神经代码智能的新领域已经出现。该领域旨在通过解决代码摘要、生成和翻译等任务来提高编程效率并最大限度地减少软件行业中的人为错误。

        随着 Code Llama 的最新版本(Meta AI 用于代码生成和理解的最先进模型),本文回顾了代码大型语言模型 (LLM) 从 RNN 到 Transformer 的演变。

图 1:大型代码语言模型的时间表。图片由作者提供。

二、代码2Vec,2018

        这是语言模型理解代码的首次尝试之一。Code2Vec旨在将代码片段表示为嵌入。这些嵌入从代码中捕获语义和结构信息,使其可用于各种软件工程任务,例如代码分类、检索和理解。

        模型尝试通过对命名良好的标记和 AST(抽象语法树)路径进行编码,并应用神经注意力来聚合成固定长度的向量表示,从而从代码片段中预测方法名称。

        图 2:Code2Vec 模型架构:程序首先分解为包含 token 和 AST 路径的上下文袋,然后通过全连接层和注意力层生成代码向量。图像灵感来自 Uri Alon 等人的原始论文。来自Code2Vec的 al

训练集: 14M Java 程序示例
模型架构:RNN + 前馈网络
新颖性

  • 基于路径的注意力模型- 作者提出了一种新颖的神经网络架构,该架构使用代码片段的抽象语法树(AST)中的语法路径作为输入特征。该模型学习为每条路径分配不同的注意力权重,并将它们聚合成单个代码向量。然后,代码向量可用于预测片段的标签分布,或测量片段之间的相似性和类比。

您可以在这里使用模型

三、代码BERT,2020

CodeBERT由微软研究团队开发,通过在基于 Transformer 的BERT 模型上引入多模态数据预训练、结合自然语言和编程语言 (NL + PL),代表了代码大型语言模型 (LLM) 领域的重大进步。该模型在包含双峰数据点对和单峰数据点的多样化数据集上进行训练,用于掩码语言建模 (MLM)和替换令牌检测 (RTD)任务。CodeBERT 在多个领域展示了卓越的性能,尤其是在自然语言代码搜索和代码到文档生成方面表现出色。

图 3:使用替换令牌检测 (RTD) 任务的 CodeBERT 模型预训练。自然语言生成和代码生成器用不同的标记替换标记,并且训练 CodeBERT 模型以将每个标记分类为替换的或原始的。图片来自 Feng 等人。等人,代码BERT

训练数据集:
Codesearch Net 数据集- 2.1M 双峰数据点 (NL + PL)、6.4M 单峰数据点(6 种语言 — Python、Java、Javascript、PHP、Ruby、Go) 参数大小:125M 模型架构
 RoBERTa
- base
Novelty :

  • 双模态训练:CodeBERT 引入了一种创新的训练方法,其中包含自然语言和编程语言标记。这种双模态训练技术通过考虑人类可读的描述和编程语言元素之间复杂的相互作用,增强了模型理解和生成代码的能力。
  • 代码的替换标记检测 (RTD) 任务:CodeBERT 预训练使用替换标记检测 (RTD) 代替下一句预测 (NSP),表现出卓越的性能。

四、Codex,2021 年

Codex是第一个成功地从文档字符串或自然语言提示生成高精度代码的 Code LLM 之一,也是广泛使用的Github Copilot的前身。Codex 由 OpenAI 团队开发,使用GPT3架构和分词器,并在大量 Github 代码上进行预训练。这个大型语言模型有 12B 个参数,是 2021 年最先进的模型,它在人类评估数据集上表现出最佳性能,一次性解决了 28.8% 的问题。

在独立的 python 函数(而不是包括配置、类实现等的整个代码)上进一步微调模型,显示出显着的改进,并且能够解决37.7% 的人类评估数据集问题。

图 4:用于 Codex GPT 模型的仅解码器 Transformer 架构。图像灵感来自 Vaswani 等人的原始Transformer 论文。等人。

训练数据集:来自 54M Github 存储库的 159GB python 文件。
参数大小: 12B (Codex-12B)
模型架构: GPT3
新颖性:

  • 第一个成功的模型,在自然语言提示下的代码编写能力方面表现出色。这会在大型 Github 存储库上训练 GPT-3 模型。
  • 该模型的作者还创建了一个新的数据集“ HumanEval ”来对代码生成任务的模型进行基准测试。该数据集包含 164 个带有单元测试的手写编程问题。

在这里尝试 OpenAI Playground 的 Codex 模型Code-T5,2021

Code-T5是基于 T5 架构的编码器-解码器模型,与 CodeBERT(仅编码器)和 Codex(仅解码器)模型不同。它引入了独特的标识符感知去噪预训练任务,帮助模型区分和恢复代码中的标识符,增强其对结构的理解。

Code-T5 通过多任务学习,在代码缺陷检测、克隆检测、代码翻译和细化等各种任务中表现出色,需要更少的数据来更快地进行微调。但是,它使用 CodeBleu 分数进行评估,而不是针对 HumanEval 数据集进行基准测试。

图 5:展示 CodeT5 如何在各种代码理解和生成任务中表现出色的插图。图片取自 Wang 等人的 Paper,CodeT5

训练数据集:Codesearch Net 数据集(与 CodeBERT 相同)
参数大小:220M
模型架构:T5(编码器-解码器架构)
新颖性:

  • 编码器-解码器模型l:第一个支持代码理解和代码生成任务的编码器-解码器代码 LLM 之一。
  • 提出了一种新颖的预训练目标标识符感知去噪,它可以学习标记类型信息和代码结构。这种方法训练模型区分标识符(变量名称、函数名称)和 PL 关键字(如 if、while 等),并在它们被屏蔽时恢复它们。
  • 微调阶段的多任务学习:同时微调各种与代码相关的任务,如代码缺陷检测、克隆检测、代码翻译、细化等。

五、PLBart,2021

PLBART(程序和语言 BART)模型利用 BART 模型架构来自动化一系列软件工程任务,包括 PLUG(程序和语言理解和生成)下的代码汇总、生成和翻译。

它引入了一种去噪序列到序列建模方法,以增强程序和语言理解,战略性地结合了 BERT 和 GPT 模型的优势。这是通过将双向编码器与自回归解码器相结合来实现的,从而可以更全面地掌握上下文和通用的生成过程。该模型采用令牌屏蔽、令牌删除和令牌填充三种去噪策略来有效地训练和微调其能力。

图 6:可视化 BART 模型(也在 PLBART 中使用)架构的图示,该架构具有双向编码器和自回归解码器。图片来自 Lewis 等人的原始BART 论文。等人。

训练数据集:从 Github、Stackoverflow 收集的 2M 个 Java 和 Python 函数及其自然语言描述(代码)。
参数大小:140M(6 个编码器层 + 6 个解码器层 + 编码器和解码器上的附加规范层)
模型架构:BART
新颖性

  • 去噪自动编码器方法:采用去噪自动编码器方法,通过有效利用编码器和解码器的双向和自回归特性,结合 BERT 和 GPT 模型的优势,增强代码理解和生成。
  • 多样化的去噪策略:提出了多种去噪策略,如token屏蔽、token删除、token填充等。这种噪声技术的多样性增强了模型从噪声数据中学习的稳健性和有效性,有助于改进代码理解和生成。

并非所有模型都使用相同的基准来评估性能。PLBART 作者不会在 HumanEval(大多数其他模型用于基准测试的数据集)上评估模型性能。

六、Code Llama,2023

Code Llama是 Meta 发布的最新 Code LLM,它在多个基准数据集中击败了所有现有的开源模型。它在HumanEval 数据集上得分为 53% ,在 MBPP 数据集上得分为 55%(只有 GPT-4 具有更好的性能)。这些收益可归因于 16K 的较长上下文长度(Llama2 的 4 倍)以及使用来自程序和自然语言的额外 500B 令牌对预训练的 Llama 2 进行训练。

该模型最适合代码生成和填充任务,并且可以在基于 IDE 的软件开发过程中充当最佳副驾驶。Code Llama模型家族有3种模型-

  1. 代码骆驼
  2. 代码 Llama Python
  3. 代码 Llama-指导

每款都有 3 种尺寸 - 7B、13B 和 34B

图 7:以预训练的 Llama-2 模型作为输入的代码 Llama 训练和微调管道。图片来自 Rozière 等人的原始Code Llama 论文。等人。

训练数据集:500B 代币 + 用于公共代码上的 Code llama Python 的额外 100B 代币
模型架构:Llama 2
参数大小:有 3 种大小可供选择 - 7B、13B 和 34B。
新颖性

  • 提出了一个处理长序列的微调步骤,称为“长上下文微调”,它将上下文长度增加到 16,384(Llama 2 上下文长度的 4 倍,即 4096)
  • 指令微调和自指令:执行指令微调的少数模型之一,在微调过程中使用显式指令或提示。作者提出了一种新颖的执行反馈方法来构建自指令数据集,而不是创建昂贵的人类反馈数据。

七、结论

        Open AI 创始人之一安德烈·卡拉帕蒂 (Andrej Karapathy) 最近称变形金刚是人工智能中最好的想法。他补充说,变压器就像一台通用的可微分计算机,它同时具有表现力、可优化性和高效性(X post)。从过去 3-4 年带来的转变来看,Transformer 模型具有巨大的潜力,可以进一步改变我们作为软件工程师的编码方式,而我认为这只是一个开始。

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

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

相关文章

[每周一更]-(第70期):常用的GIT操作命令

1、增删文件 # 添加当前目录的所有文件到暂存区 $ git add .# 添加指定文件到暂存区 $ git add <file1> <file2> ...# 添加指定目录到暂存区&#xff0c;包括其子目录 $ git add <dir># 删除工作区文件&#xff0c;并且将这次删除放入暂存区 $ git rm [file…

Redis中的List类型

目录 List类型的命令 lpush lpushx rpush lrange lpop rpop lindex linsert llen lrem ltrim lset 阻塞命令 阻塞命令的使用场景 1.针对一个非空的列表进行操作 2.针对一个空的列表进行操作 3.针对多个key进行操作. 内部编码 lisi类型的应用场景 存储(班级…

SpringSecurity全家桶 (一) —— 简介

1. 概述 Spring Security 是一个框架&#xff0c;提供针对常见攻击的身份验证、授权和保护。 它为保护命令式和响应式应用程序提供了一流的支持&#xff0c;是保护基于 Spring 的应用程序的事实标准。 2. 了解 shiro&#xff1a; 在之前SSM框架盛行的时代&#xff0c;项目的…

C++入门讲解第一篇

大家好&#xff0c;我是Dark Fire&#xff0c;终于进入了C的学习&#xff0c;我知道面对我的将是什么&#xff0c;就算变成秃头佬&#xff0c;也要把C学好&#xff0c;今天是C入门第一篇&#xff0c;我会尽全力将知识以清晰易懂的方式表达出&#xff0c;希望我们一起加油&#…

奇元大模型通过备案 360自研两大模型均获批

11月4日&#xff0c;三六零(601360.SH&#xff0c;下称“360”)大模型“奇元大模型”通过备案落地。今年9月&#xff0c;“360智脑大模型”已获批面向公众开放。360公司也成为国内首家两个大模型均通过备案的科技企业。 从大模型定位和应用角度来看&#xff0c;奇元大模型具备…

Vert.x学习笔记-Vert.x的基本处理单元Verticle

Verticle介绍 Verticle是Vert.x的基本处理单元&#xff0c;Vert.x应用程序中存在着处理各种事件的处理单元&#xff0c;比如负责HTTP API响应请求的处理单元、负责数据库存取的处理单元、负责向第三方发送请求的处理单元。Verticle就是对这些功能单元的封装&#xff0c;Vertic…

UI设计感蓝色商务数据后台网站模板源码

蓝色商务数据后台网站模板是一款适合网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20852点html

自动驾驶行业观察之2023上海车展-----智驾供应链(3)

智驾解决方案商发展 华为&#xff1a;五项重磅技术更新&#xff0c;重点发布华为ADS 2.0和鸿蒙OS 3.0 1&#xff09;产品方案&#xff1a;五大解决方案都有了全面的升级&#xff0c;分别推出了ADS 2.0、鸿蒙OS 3.0、iDVP智能汽车数字平台、智能车云服务和华为车载光最新 产品…

spring boot导入导出excel,集成EasyExcel

一、安装依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>二、新建导出工具类 package com.example.springbootclickhouse.utils;import javax.s…

R语言657中单色colors颜色索引表---全平台可用

R语言657中单色colors颜色索引表—全平台可用

【云服务器】对比传统服务器,为什么说云服务器更具优势?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️其他领域】 文章目录 前言云服务器云服务器的优势成本可扩展性可靠性和安全性 总结 前言 2006年搜索引擎大会上&#xff0c;“云服务器”的概念孕育而生&#xff0c;时至今日云服务器与传统服务器的…

VBA根据Excel内容快速创建PPT

示例需求&#xff1a;根据Excel中选中的单元格内容&#xff08;3列&#xff09;如下图所示&#xff0c;在已打卡的PowerPoint文件中创建页面。 新增PPT Slide页面使用第二个模板页面&#xff0c;其中包含两个文本占位符&#xff0c;和一个图片占位符。将Excel选中区域中前两列写…

【3D图像分割】基于Pytorch的VNet 3D图像分割5(改写数据流篇)

在这篇文章&#xff1a;【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2&#xff08;基础数据流篇&#xff09; 的最后&#xff0c;我们提到了&#xff1a; 在采用vent模型进行3d数据的分割训练任务中&#xff0c;输入大小是16*96*96&#xff0c;这个的裁剪是放到Dataset类…

Linux文件权限详解

Linux是一款功能强大的操作系统&#xff0c;其文件权限系统是确保文件和系统安全的关键组成部分。正确理解和配置文件权限对于维护系统安全至关重要。初次接触Linux时&#xff0c;在公司服务器上处理文件夹或文件时常常碰到Permission denied的提示。为了解决问题&#xff0c;我…

【蓝桥杯 第十四届省赛Java B组】真题训练(A - C)正在更新

目录 A、阶乘求和 - BigInteger B、幸运数字 - 字符串 进制转换 暴力大法 C、数组分割 - A、阶乘求和 - BigInteger 思路&#xff1a; 当时比赛时&#xff0c;拿计算器算的&#xff0c;然后辛辛苦苦也没对 看到这个数肯定很大&#xff0c;而且只求后9位&#xff0c;阶乘越…

DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)

文章目录 任务要求原始代码CPP文件代码着色器文件代码 效果展示 任务要求 本篇文章是中国农业大学虚拟现实课程的一次作业内容&#xff0c;需要对五个茶壶模型使用不同的光照进行着色和渲染&#xff0c;然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的&#xf…

【ElasticSearch系列-05】SpringBoot整合elasticSearch

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

你了解SonarQube 吗

你了解SonarQube 吗 文章目录 你了解SonarQube 吗一、介绍二、idea代码检测工具SonarLint安装方法使用方法 三、常见的Sonar解决方法Unused "private" fields should be removedSections of code should not be "commented out"Useless imports should be …

使用 C# 在Word中插入图表

Word中的图表功能将数据可视化地呈现在文档中。这为展示数据和进行数据分析提供了一种方便且易于使用的工具&#xff0c;使作者能够以直观的方式传达信息。要通过C#代码来实现在Word中绘制图表&#xff0c;可以借助 Spire.Doc for .NET 控件&#xff0c;具体操作参考下文。 目录…

国内某发动机制造工厂RFID智能制造应用解决方案

一、工厂布局和装备 国内某发动机制造工厂的装配车间布局合理&#xff0c;设备先进&#xff0c;在这个5万平方米的生产区域内&#xff0c;各个工位之间流程紧密&#xff0c;工厂采用了柔性设备&#xff0c;占比达到了67%&#xff0c;数控化率超过90%&#xff0c;自动化率达到了…