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

news2024/11/27 16:33:30
舒巴姆·阿加瓦尔

一、说明

        近年来,随着 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 模型具有巨大的潜力,可以进一步改变我们作为软件工程师的编码方式,而我认为这只是一个开始。

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

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

相关文章

4K Video Downloader Pro v4.28.0(视频下载器)

4K Video Downloader Pro是一款专业的视频下载软件,支持从YouTube、Vimeo、Facebook、Instagram、TikTok等主流视频网站下载高质量的4K、HD和普通视频。它的操作流程简单,只需复制视频链接并粘贴到软件中即可开始下载。此外,该软件还提供了多…

校园招聘系统

校园管理系统 公共模块学生端游客端企业联系人端校内管理员端超级管理员端企业端 公共模块 登录 用户可以通过验证码、账号密码进行登录。 个人中心 学生端 学生主要为查看招聘信息以及投递等。 首页 简历详情投递 双选会公司详情 公告通知 学生端主要为这些等等&#xf…

线扫相机-TEK(埃科)相机平场矫正详细步骤

采集卡模式: 现场要求 (1) 采集卡连续采集相机图像,并正常显示。 (2) 光源控制在正常工作亮度,使画面亮度不要过低也不要饱和。 (3) 调整相机使画面偏离成像位置,形成虚焦。 (4) 相机拍摄物面使用白纸,调节曝光时间使整…

【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)

文章目录 前言一、Counter1.1 子组件1.2 接口1.3 属性1.4 事件 1.5 示例代码二、Flex弹性布局到底是什么意思? 2.1 权限列表2.2 子组件2.3 接口参数 2.4 示例代码示例代码1示例代码2 总结 前言 Counter容器组件:计数器组件,提供相应的增加或…

基础课21——知识库管理

1.知识库的概念、特点与功能 智能客服中的知识库是一个以知识为基础的系统,可以明确地表达与实际问题相对应的知识,并构成相对独立的程序行为主体,有利于有效、准确地解决实际问题。它储存着机器人对所有信息的认知概念和理解,这…

【排序算法】 快速排序(快排)!图解+实现详解!

🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️快速排序的概念☁️快速排序的由来☁️快速排序的思想☁️快速排序的实…

网络运维Day02

文章目录 实验环境Linux系统简介Linux发行版RHEL与CentOS国产操作系统 安装CentOS7.9步骤一:虚拟硬件步骤二:为虚拟机安装操作系统为root设置密码首次初始化虚拟机 登录操作系统系统偏好设置 快照LINUX目录结构常见目录及其作用 LINUX磁盘表示方法LINUX中…

Linux常用命令——chage命令

在线Linux命令查询工具 chage 修改帐号和密码的有效期限 补充说明 chage命令是用来修改帐号和密码的有效期限。 语法 chage [选项] 用户名选项 -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M:密码保持有效的最大天数。 -w&…

毅速丨3D打印在压铸模上大有所为

压铸模是压铸件成型不可缺少的工具。它的作用是将液态的金属或合金浇入到预先准备好的型腔中,并在压力的作用下凝固、成形。3D打印技术在压铸模上的使用,尤其是随形水路的应用,将大幅度提升制造效率。 在传统的压铸模制造中,水路的…

树结构及其算法-二叉排序树

目录 树结构及其算法-二叉排序树 C代码 树结构及其算法-二叉排序树 事实上,二叉树是一种很好的排序应用模式,因为在建立二叉树的同时,数据已经经过初步的比较,并按照二叉树的建立规则来存放数据,规则如下&#xff1…

Linux shell编程学习笔记21:用select in循环语句打造菜单

一、select in循环语句的功能 Linux shell脚本编程提供了select in语句,这是 Shell 独有的一种循环语句,非常适合终端(Terminal)这样的交互场景,它可以根据用户的设置显示出带编号的菜单,用户通过输入不同…

Draft-P802.11be-D3.2协议学习__$9-Frame-Format__$9.3.1.22-Trigger-frame-format

Draft-P802.11be-D3.2协议学习__$9-Frame-Format__$9.3.1.22-Trigger-frame-format 9.3.1.22.1 Genreal9.3.1.22.2 Common Info field9.3.1.22.3 Special User Info field9.3.1.22.4 HE variant User Info field9.3.1.22.5 EHT variant User Info field9.3.1.22.6 Basic Trigge…

关于JADX和JEB的小问题

关于JADX和JEB的小问题 很久没水过技术文啦,最近也刚好遇到点小问题,特此记录 第一个问题 在处理app加密逻辑的时候一直拿不到正确的密文,反复看了反编译出来的代码(如下图) public static string n(String str, Stri…

提升之做事方法

前言:在工作中,做事需要有一套方法,同样的一件事,不同的人去做,就能看到能力的差别,会产生不同的结果。那如何在工作中,提升自己做事的能力? 目录 闭环思维 做事方法论 事前规划 …

网络运维Day03

文章目录 基本命令使用查看文本文件内容-cat命令分页查看文本文件-less命令查看CPU信息-lscpu命令查看系统内核版本-uname命令查看机修改主机名-hostname命令查看IP地址-ifconfig命令创建目录-mkdir命令创建空文件-touch命令查看文件前几行-head命令查看文件后几行-tail命令快速…

2024年CleanMyMac更新了哪些内容?

CleanMyMac作为一款专业的苹果电脑清理软件,它不仅仅能单纯的卸载不用、少用的应用,同时还支持:1、清理应用程序的数据文件,将应用重置回初始状态,减少空间占用;2、自动检查应用更新,保持应用的…

Hyper-V 安装windows10 虚拟机,且能调试窗口大小、与主机之间复制文件

1. 搜索栏--打开‘启动或关闭windows功能’-- 勾选 ‘ Hyper-V ’ 然后点击确定; 2. 搜索栏--打开‘ Hyper-V 快速创建’ ---本地安装源---更改安装源(选择 对应的 windows.iso 镜像)---创建镜像--启动虚拟机--(到达)P…

优化|随机零阶优化算法分析

原文:Random Gradient-Free Minimization of Convex Functions. Found Comput Math 17, 527–566 (2017). https://doi.org/10.1007/s10208-015-9296-2 原文作者:Yurii Nesterov, Vladimir Spokoiny 论文解读者:陈宇文 本次知识分享活动挑选…

【中国知名企业高管团队】系列58:创维SKYWORTH

昨天华研荟介绍了位于深圳的彩电三巨头之一——康佳KONKA,今天介绍创维SKYWORTH。两家公司都是以做电视起家的,但是发展历程和现在的业务差别非常大,当然,过程中发生的故事也是波澜起伏。 一、关于创维 创维集团有限公司&#x…

JAVA面经整理(10)

一)MyBatis有什么优缺点? Mybatis是⼀种典型的半自动化的ORM 框架,所谓的半自动,因为还需要⼿动的写 SQL 语句在XML文件里面,再由框架根据SQL以及传入数据来进行组装成要执行的SQL,所谓的ORM框架,就是对象关…