高效底座模型LLaMA

news2024/12/22 17:11:46

论文标题:LLaMA: Open and Efficient Foundation Language Models

论文链接:https://arxiv.org/abs/2302.13971

论文来源:Meta AI

一、概述

大型语言模型(Large Languages Models,LLMs)通过大规模文本数据的训练,展示了其根据文本指令或少量样本完成新任务的能力。这种少数示例的性质首次在规模足够大的模型中出现,导致了一系列聚焦于进一步扩大这些模型的工作。这些努力都是基于一个假设:模型参数越多,性能越好。然而,Hoffmann等人(2022)的近期研究显示,在给定的计算预算下,最佳的性能并非由最大的模型实现,而是由训练数据更多的较小模型实现。

Hoffmann等人(2022)的目标是确定如何最好地根据特定的训练计算预算来调整数据集和模型大小。然而,这个目标忽略了推理预算,这在大规模使用语言模型时变得至关重要。在这种背景下,目标性能水平下的首选模型并不是训练速度最快的,而是推理速度最快的,尽管训练大模型以达到一定的性能水平可能更加容易,但更长时间训练的小模型最终在推理时成本会更低。例如,尽管Hoffmann等人(2022)推荐在200B个token上训练一个10B的模型,我们发现7B模型的性能即使在1T个token之后仍在提高。

本文研究的主要目标是通过使用比通常更多的数据来训练一系列在各种推理预算下达到最佳可能性能的语言模型。这一系列模型称为LLaMA,参数范围从7B到65B,与现有最佳LLMs的性能相媲美。例如,LLaMA-13B在大多数基准测试中都优于GPT-3,尽管其大小只有GPT-3的十分之一。作者们认为这个模型将有助于民主化访问和研究LLMs,因为它可以在单个GPU上运行。对于最大规模的模型,LLaMA的65B参数模型也可以与最佳的LLMs(如Chinchilla或PaLM-540B)相媲美。

不同于Chinchilla、PaLM或GPT-3,LLaMA只使用公开可用的数据,使他们的工作与开源兼容,而大多数现有的模型依赖于非公开或未记录的数据(例如“Books – 2TB”或“Social media conversations”)。存在一些例外,如OPT、GPT-NeoX、BLOOM和GLM,但没有一个能与PaLM-62B或Chinchilla竞争。

二、方法

LLaMA使用完全开源的数据进行预训练,并且融合了已有LLMs的一些训练技巧,同时为了高效运算也对模型架构和运算过程做了一些改动。

  1. 预训练数据

LLaMA的预训练数据来自各个开源语料,数据组成如下:

0110b8119455a8bf584ef5034dc4d003.png
数据组成

这些数据中既包括网络语料也包括一些代码、书籍等开源数据,这既使得模型能够具备一些多领域的知识和代码理解能力,也可能使得模型会生成一些偏见、毒性和错误信息等有害内容。

LLaMA使用BPE(byte-pair encoding)算法来对数据进行token化,并且将所有的数字分割成单独的数字,并在无法识别的UTF-8字符时回退到byte级别进行分解。这样的处理方式能够帮助模型更好地理解和处理各种类型的字符和数字。最终从这些数据中得到了1.4T个token,对于大多数数据,每个token在训练时只使用一次,除了Wikipedia和Books这两部分执行大约2个epoch。

  1. 架构

LLaMA整合了一些已有的研究来对Transformer架构进行改进,主要包括: 

「Pre-normalization[GPT3]」:为了提高训练稳定性,LLaMA归一化了每个Transformer子层的输入,而不是归一化输出。他们使用RMSNorm归一化函数。 

「SwiGLU激活函数 [PaLM]」:他们将ReLU非线性函数替换为SwiGLU激活函数。他们使用的维度是,而不是PaLM中的。 

「Rotary Embeddings[GPTNeo] :他们移除了绝对位置嵌入,而是在网络的每一层添加Rotary Embeddings(RoPE)。

以上的改进均有助于提升模型的性能和训练稳定性。所有模型的超参数细节如下:

e3ff005a73e6b5f2b5b60e992842f481.png
超参数设置
  1. 优化器

LLaMA使用的是AdamW优化器,设置的超参数为:。并且使用了余弦学习率调度,使得最终学习率等于最大学习率的10%。他们设置的权重衰减为0.1,梯度裁剪为1.0。同时使用2000步的warm-up,并根据模型的大小改变学习率和批处理大小(具体细节见上表)。

  1. 代码层面的高效实现

首先,LLaMA使用了一种高效的因果多头注意力运算符的实现(causal multi-head attention operator),这受到一些已有研究的启发。这种实现方式,可以在xformers库中找到,它降低了内存使用和计算量。这是通过不存储注意力权重和不计算因语言模型任务的因果性而被mask的key/query得分来实现的。 

为了进一步提高训练效率,LLaMA通过检查点技术减少了在反向传播过程中需要重新计算的激活量。更具体地说,他们保存了那些计算成本较高的激活,例如线性层的输出。这是通过手动实现transformer层的反向函数来实现的,而不是依赖于PyTorch的自动梯度计算。为了充分利用这种优化,他们需要通过使用模型和序列并行化来减少模型的内存使用。此外,他们还尽可能地重叠了激活的计算和GPU之间网络的通信(使用all_reduce操作)。 

在训练LLaMA的65B参数的模型时,本文的代码在拥有80GB RAM的2048个A100 GPU上,每秒每个GPU可以处理大约380个tokens。这意味着在他们包含1.4T tokens的数据集上训练需要大约21天。

三、实验

  1. 主要实验结果

本文在20个不同的benchmark数据集上进行了Zero-shot和Few-shot的实验来验证模型性能,主要结果如下:

  • Common Sense Reasoning

cbe94d6f78f96975dbc52222c864086f.png
实验
  • Closed-book Question Answering

404fa4fc7434e68aea10178625bef88b.png
实验
22b3abeadfc1168f1466559f8b06bb82.png
实验
  • Reading Comprehension

ae5de8efe739cb35bcf40a761705f068.png
实验
  • Mathematical reasoning

05eaca452f522179f095a96089bb2461.png
实验
  • Code generation

9247ca8caabab30b3e06ce4d1b3bae7a.png
实验
  • Massive Multitask Language Understanding

3903f8e842d8744ab371e0e90f83eb60.png
实验
  • Evolution of performance during training

92db455940e262abe76fcaaed19250a2.png
实验
3a0632eefe963247b63c201fe2a5f62e.png
实验
  1. 指令微调

8891fa7023a9ac3d4a9bb1115275cf70.png
实验
  1. 偏见、毒性和错误信息

  • RealToxicityPrompts

1cec842dd2ece6221c42b02fb147da26.png
实验
  • CrowS-Pairs

0fbaf5c673327c1109f65cfa6ccc124c.png
实验
  • WinoGender

2fcbe232663d837950a97b392199f913.png
实验
  • TruthfulQA

e559e5b09d7354ac425f988a945149c1.png
实验

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

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

相关文章

Selenium 环境配置

如果你做过 Web 测试的工作,那么你应该明白 Web 测试中最重要的一部分工作就是自动化测试。自动化测试,顾名思义就是让浏览器自动运行,而无需手动操作。这和我们爬虫工作原理有些相似,我们爬虫也需要让浏览器运行网址来获取我们需…

HTTPS加密

目录 HTTPS加密1.加密和解密2.对称加密3.非对称加密4.中间人攻击5.证书 HTTPS加密 1.加密和解密 1.明文: 要传递的原始信息。 2.密文: 经过加密后的信息。 3.加密就是指将明文(要传输的信息)按照指定的方式进行变换,生成密文。 4.解密…

Pytest+selenium+allure+Jenkins自动化测试框架搭建及使用

一、 环境搭建 1. Python下载及安装 Python可应用于多平台包括windows, Linux 和 Mac OS X, 本文主要介绍windows环境下。你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 如未安装python, 推荐下载python 3.8.3以…

Android——事务处理(续)(十三)

1. 长按事件 1.1 知识点 &#xff08;1&#xff09;掌握长按事件的操作形式&#xff1b; &#xff08;2&#xff09;可以设置手机的桌面背景&#xff1b; 1.2 具体内容 范例&#xff1a;长按一张图片之后&#xff0c;此图片设置为手机桌面背景。 <LinearLayout xmlns:a…

LocalDateTime 和 LocalDate 与 date 有什么区别;LocalDateTime 示例,LocalDate 示例

目录 1 LocalDateTime 和 LocalDate 与 date 有什么区别2 LocalDateTime 示例&#xff1a;2 LocalDate 示例&#xff1a; 1 LocalDateTime 和 LocalDate 与 date 有什么区别 LocalDateTime、LocalDate和Date是 Java中不同的类库中用于表示日期和时间的类&#xff0c; 它们在功…

「Java核心技术大会 2023」6月重磅启动,邀你共同探讨Java生态

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初…

《机器学习公式推导与代码实现》chapter13-LightGBM

《机器学习公式推导与代码实现》学习笔记&#xff0c;记录一下自己的学习过程&#xff0c;详细的内容请大家购买作者的书籍查阅。 LightGBM 就GBDT系列算法的性能而言&#xff0c;XGBoost已经非常高效了&#xff0c;但并非没有缺陷。LightGBM就是一种针对XGBoost缺陷的改进版…

【C++11】 列表初始化 auto 范围for 新增关键字 新增容器

文章目录 1 列表初始化2 auto && 范围for3 新增关键字3.1 decltype3.2 default3.3 delete3.4 final与override 4 总结 1 列表初始化 由c语言的规则我们知道&#xff1a;一般只有数组才会支持用{}初始化&#xff0c;但是C11新语法规定我们不仅可以用{}初始化各种对象(内…

企业微信 创建应用后如何构造网页授权 获取token 获取用户信息

第一次对接企业微信&#xff0c;上网找了各种方案。 目的是在企业微信中&#xff0c;公司发给员工一个地址&#xff0c;员工点开后打开画面&#xff0c;在这个画面上可以获取到这个员工的userid&#xff08;后续功能操作就是各自不同的功能了哈&#xff0c;就不详细说了&#…

STM32F4_触摸屏

目录 1. 触摸屏原理 2. 电阻式触摸屏检测原理 3. 电容式触摸屏检测原理 4. 硬件配置 4.1 XPT2046驱动芯片 4.2 硬件设计 5. 代码详解 5.1 main.c 5.2 AT24C02.c 5.3 AT24C02.h 5.4 C_Touch_I2C.c 5.5 C_Touch_I2C.h 5.6 Touch.c 5.7 Touch.h 5.8 FT5206.c 5.9 …

ADAudit Plus:保护企业内部IT安全的强大解决方案

随着企业数字化的推进&#xff0c;IT系统和数据安全变得比以往任何时候都更加重要。为了保护企业的机密信息和敏感数据&#xff0c;企业需要一种可靠的IT安全解决方案。在众多选项中&#xff0c;ADAudit Plus是一款备受赞誉的软件&#xff0c;为企业内部的IT安全提供了强大的支…

Python入门自学进阶-Web框架——36、Web微信类实现初步

打开页面&#xff0c;会出现一个二维码&#xff0c;要使用手机微信扫一扫&#xff0c;才能登录。它的实现原理是什么&#xff1f; 下图为打开网页版微信登录的调试工具网络信息&#xff0c;定时发送请求&#xff0c;状态待处理&#xff08;pending&#xff09; 上图的挂起是pe…

网络安全|渗透测试入门案例分析,从零基础入门到精通—登录框页面的快速渗透常用检测手段

目录 引言 1、弱口令 2、万能密码绕过 ​编辑 3、登录认证绕过 3.1.令牌刷新端的错误配置 3.2. 错误的sso配置 3.3.CMS个例的访问问题 3.4.JWT Token的错误解析 3.5.暴力修改Authentication 4、图形验证码不失效 5、短信验证码不失效 6、短信攻击 7、反射型跨站脚…

【MySQL数据库】MySQL 高级SQL 语句二

MySQL 高级 SQL 语句二 一、连接查询1.1 inner join&#xff08;内连接&#xff09;1.2 left join &#xff08;左连接&#xff09;1.3 right join(右连接) 二、CREATE VIEW ---- 视图三、 UNION - - 连集3.1 UNION3.2 UNION ALL 四、交集值&#xff08;取两个SQL语句结果的交集…

经典:商业智能BI解读,值得收藏

关注新闻的朋友们可能注意到了&#xff0c;最近这段时间关于数据要素、数字经济、数字化转型的相关行动越来越多&#xff0c;一方面是各级政府的政策规划以及大规模的发展行动&#xff0c;另一方面是则是各行各业的企业开始探寻数字经济&#xff0c;通过数字化转型进行改革&…

angular学习笔记

目录 1、认识Angular![在这里插入图片描述](https://img-blog.csdnimg.cn/17fe3ec067b64d75bf9d24a4e71403ed.png)2、路由2.1、路由懒加载2.2、路由守卫 3、模版指令4、生命周期4.1、父子生命周期 5、依赖注入6、RXJS7、自定义事件&#xff0c;自定义指令8、自定义管道9、获取d…

内网渗透(八十八)之委派攻击

委派 委派是大型网络中经常部署的应用模式,给多跳认证带来了很大的便利与此同时也带来了很大的安全隐患。利用委派,攻击者可结合其他漏洞进行组合攻击,导致攻击者可获取本地管理员权限甚至域管理员权限,还可以制作深度隐藏的后门。 委派是指将域内用户的权限委派给服务账…

【Adversarial Attack in Object Detection】物理对抗攻击和防御

目录 安全监控 **有无意义**无意义的补丁有意义的补丁 光学对抗攻击对抗灯干扰相机成像 攻击方法White-box attacksGradient-based attacks Optimization-based attacks Black-box attacksQuery-based attacksEvolution algorithm OUTLOOK 在计算机视觉中&#xff0c;根据实现…

征服Go世界,御剑江湖!学习路线与顶级资源一网打尽

引言 Go语言&#xff08;也称为Golang&#xff09;是一种开源的编程语言&#xff0c;由Google开发。它具有简洁的语法、高效的并发性能和良好的内存管理&#xff0c;因此在近年来迅速获得了广泛的关注和采用。本文将为您提供一条学习Go语言的路线图&#xff0c;并介绍一些优质…

二分查找 - 数据结构和算法教程

二分查找被定义为在排序数组中使用的一种搜索算法&#xff0c;它通过重复将搜索间隔分成两半来实现。二分查找的思想是利用数组被排序的信息&#xff0c;将时间复杂度降低到O&#xff08;log N&#xff09;。 在数据结构中应用二分查找的条件 数据结构必须排序。访问数据结构的…