【论文精读】LLaMA1

news2024/12/23 8:23:27

摘要

       以往的LLM(Large Languages Models)研究都遵从一个假设,即更多的参数将导致更好的性能。但也发现,给定计算预算限制后,最佳性能的模型不是参数最大的,而是数据更多的。对于实际场景,首选的模型不是训练速度最快的,而是推理速度最快的,训练时间较长的较小的模型最终在推理时的成本会更低。故提出改进:

  • 通过训练比通常模型使用的更多的token,训练一系列语言模型,在各种推理预算中实现尽可能好的性能。所得模型称为LLaMA,参数范围从7B到65B
  • 模型只使用公开可用的数据训练,与开源兼容

框架

预训练数据

image
       如上图,预训练数据集使用CommonCrawl、C4、Github、Wikipedia、Books、ArXiv、StackExchange各自不同比例的混合,具体:

       CommonCrawl[67%]:使用CCNet pipeline预处理了从2017年到2020年的五个CommonCrawl数据。该过程在行级别对数据进行去重;用fastText线性分类器进行语言识别,删除非英语页面;用n-gram语言模型过滤低质量内容;此外,训练了一个线性模型,对维基百科中参考文献页与随机抽样页进行分类,并丢弃非参考文献页。

       C4[15%]:实验发现使用不同的预处理CommonCrawl数据集可以提高性能,故将C4数据集包含进预训练数据中。预处理阶段进行了数据去重和语言识别过滤,与CCNet的主要区别是质量过滤方法,其依赖于启发式方法,如是否存在标点符号或网页中的单词和句子的数量大小。

       Github[4.5%]:使用谷歌BigQuery上可用的公共GitHub数据集。只保留了在Apache、BSD和MIT许可下分发的项目;根据行长或字母数字字符的比例,使用启发式方法过滤低质量的文件;使用正则表达式删除样板文件,如headers等;最后,在文件级别对数据集进行精确匹配去重。

       Wikipedia[4.5%]:使用2022年6月至8月期间的维基百科数据,包括20种使用拉丁语或西里尔文字的语言:bg、ca、cs、da、de、es、fr、hr、hu,nl、pl、pt、ro、ru、sl、sr、sv、uk。处理这些数据时删除了超链接、注释和其他格式化的样板文件。

       Books[4.5%]:使用了两个图书语料库:古登堡项目,其中包含公共领域的书籍;以及ThePile的Books3部分。并删除了内容重复超过90%的图书。

       ArXiv[2.5%]:使用了arXiv的Latex文件,每个文件都删除了first section之前的所有内容,以及参考书目;删除了来自.tex文件中的注释,以及由用户编写的内联扩展的定义和宏。

       StackExchange[2.0%]:使用了StackExchange数据,包含从计算机科学到化学的各种主要领域的高质量问答网站。其中保留了来自28个最大的网站的数据,并从文本中删除了HTML标签,并按分数(从最高到最低)对答案进行了排序。

       Tokenizer:本文使用字节对编码(BPE)算法对数据进行tokenize,使用Sentence-Piece的实现。处理过程中,将所有数字字符串拆分为单个数字,并在bytes级别分解未知的UTF-8字符。

       总体而言,整个预训练数据集在tokenize后包含大约1.4T的token,除了Wikipedia和Books使用了大约两个epoch,其余token只使用一次。

模型架构

       模型基于原始transformer架构,但做出一些改动:

  • 为了提高训练稳定性,模型对每个transformer子层的输入进行归一化,而不是对输出归一化。归一化函数使用RMSNorm
  • 为了提高性能,用SwiGLU激活函数取代了ReLU,维度变为 2 3 4 d \frac 234d 324d
  • 将绝对位置嵌入替换为旋转位置嵌入(RoPE)
    image

       详细模型配置如上图。

优化器

       模型使用AdamW优化器进行训练,超参数 β 1 = 0.9 β_1 = 0.9 β1=0.9 β 2 = 0.95 β_2 = 0.95 β2=0.95、权重衰减为0.1、梯度裁剪为1.0;使用余弦学习率表调度学习率,这样最终的学习率等于最大学习率的10%;使用2000个warmup step,并根据模型的大小而改变学习率和batch size大小(如上图)。

高效实现

       本文对模型做了一些优化来提高训练速度。具体有:

  • 使用xformer库的因果多头注意力来减少内存使用和模型运行时间,并使用FlashAttention的backward。其通过不存储注意力权重和不计算由于语言建模任务的因果性质而被掩盖的key/query分数来实现
  • 通过手动实现transformer层的反向函数,在计算过程中保存线性层的输出等计算成本很高的激活量,减少了在反向传播期间重新计算的激活量
  • 通过利用模型和序列的并行性来减少模型的内存使用
  • 使用all_reduce重叠了激活的计算和gpu之间的通信
    image

       上图为不同尺寸的模在使用不同tokens后的训练loss下降情况。

实验

       实验在zero-shot和few-shot任务下的20个基准的结果:

  • Zero-shot:实验提供任务的文本描述和一个测试示例,模型要么使用生成答案,要么对提供的答案进行排名
  • Few-shot:实验提供一些任务的示例(1到64之间)和一个测试示例,模型将此文本作为输入,并生成答案或对不同选项进行排序

对比实验

常识推理

       本实验使用了8个标准的常识推理基准: BoolQ、PIQA、SIQA,HellaSwag、WinoGrande、ARC easy and challenge和OpoenBookQA。这些数据集包括完形填空和Winograd风格的任务,以及多项选择题回答。在zero-shot设置中进行评估。
image
       结果如上图。除BoolQ外,LLaMA-65B在所有报告的基准上都优于Chinchilla-70B。除了BoolQ和WinoGrande外,LLaMA-65B在所有基准都超过了PaLM- 540B。LLaMA-13B在大多数基准测试上也优于GPT-3,尽管其比GPT-3小10倍。

闭卷问答

       本实验在Natural Questions和TriviaQA上将LLaMA与现有的大型语言模型进行了比较。对于这两个基准测试,实验报告了闭卷设置下的精确匹配性能,即模型不能访问包含答案的文档来回答问题。
image
image
       在表4中,报告了Natural Questions的性能;表5中,报告了TriviaQA的性能。在这两个基准测试中,LLaMA-65B在zero-shot和few-shot设置中都实现了最先进的性能,同时LLaMA-13B在这些基准上与GPT-3具有竞争力,尽管其比GPT-3小5-10倍。

阅读理解

       本实验在RACE阅读理解基准上评估了LLaMA,该数据集收集于初高中中国学生的英语阅读理解考试。
image
       实验结果如上图。LLaMA-65B与PaLM-540B相当,LLaMA-13B的性能比GPT-3高出几个百分点。

数学推理

       本实验在MATH和GSM8k两个数学推理基准来评估LLaMA。MATH是用LaTeX编写的12K初高中数学问题的数据集,GSM8k是一套中学数学习题。
image
       实验将LLaMA与PaLM和Minerva进行了比较。Minerva是一系列PaLM模型,其使用ArXiv和数学网页中提取的38.5Btoken微调,而PaLM和LLaMA都没有基于数学数据微调。

       结果如上图。比较了有无maj1@k的结果,maj1@k表示为每个问题生成k个样本并进行多数投票评估。在GSM8k上,观察到LLaMA- 65B的性能优于Minerva-62B,尽管它还没有对数学数据进行微调。

代码生成

       本实验评估了LLaMA在HumanEval和MBPP两个基准上从自然语言描述中编写代码的能力。对于这两个任务,模型接收对程序描述的几句话,以及一些输入输出示例,在HumanEval中,还接收一个函数签名。提示符会被格式化为带有文本描述和示例代码的文档字符串。该模型需要生成一个符合问题描述并满足测试用例的Python程序。

       实验将LLaMA与未使用代码进行微调的PaLM和LaMDA比较pass@分数。PaLM和LLaMA在包含相似数量的代码token的数据集上训练。
image
       结果如上图。pass@1结果是通过temperature为0.1的采样得到,pass@80和pass@100在temperature为0.8时获得。在同等数量参数下,LLaMA的性能优于LaMDA和PaLM。具有13B参数和其余更多参数型号的LLaMA,在HumanEval和MBPP上都优于LaMDA-137B,LLaMA-65B的性能优于PaLM-62B。

       通过对代码token进行微调,可以提高模型在该实验上的性能。例如,PaLM-Coder将PaLM在pass@1的分数从26.2%提高到36%。

多任务语言理解

       大规模多任务语言理解基准(MMLU)由多项选择题组成,涵盖了人文、STEM和社会科学等各种知识领域。本实验使用基准测试提供的示例,在5-shot设置中评估LLaMA。
image
       结果如上图。观察到LLaMA-65B在大多数领域比Chinchilla-70B和PaLM-540B落后几个百分点。估计是因为训练前的数据中使用了有限数量的书籍和学术论文,即ArXiv、Gutenberg和book3,加起来也只有177GB,而这些模型是在多达2TB的书籍上进行训练的。

训练表现

image
       本实验在训练过程中对一些问题回答和常识基准测试上跟踪了模型的性能,如上图。观察到在大多数基准测试中,性能稳步提高,并与模型的训练复杂度相关。另外,在SIQA上,观察到很多的性能差异,这可能表明这个基准测试不可靠。在WinoGrande上,表现与训练复杂度无关,LLaMA-33B和LLaMA-65B在训练中有相似的表现。

指令微调

       本实验展示对指令数据的简要微调可以提高MMLU上的性能,并提高了模型遵循指令的能力。
image
       上图报告了LLaMA-I在MMLU上的结果,并与现有的中等尺寸的指令微调模型进行了比较。虽然这里使用的指令微调方法很简单,但LLaMA在MMLU上达到了68.9%。LLaMA-I(65B)在MMLU现有的中等尺寸的指令精细模型上表现更好,但仍远非最先进的,在MMLU上的GPT code-davinci-002为77.4。

Bias, Toxicity and Misinformation

RealToxicityPrompts

       语言模型可以产生toxic语言,例如,侮辱、仇恨言论或威胁。最近的几项工作将RealToxicityPrompts作为模型toxic的指标,RealToxicityPrompts包含大约100k个模型必须完成的提示;然后,通过向PerspectiveAPI发出请求来自动评估toxic评分。

       对于每一个100k的Prompts,采用贪婪解码生成答案,并测量它们的toxic评分。每个提示的分数范围从0(无毒)到1(有毒)。
image
       结果如上图,结果与Chinchilla相当。同时观察到随着模型增大,toxic也会增大。

CrowS-Pairs

       CrowS-Pairs旨在衡量模型在性别、宗教、种族/肤色、性取向、年龄、国籍、残疾、身体外观和社会经济地位这9种类别的偏见。每个例子都由一个刻板印象和一个反刻板印象组成,实验在zero-shot设置下使用两个句子的困惑度来衡量模型对刻板印象句子的偏好,分数越高,偏见越高。
image
       如上图,LLaMA的平均性能略优于GPT-3和OPT,LLaMA在宗教类别(与OPT-175B相比增加10%)较差,其次是年龄和性别。估计这些偏差来自于CommonCrawl。

WinoGender

       为了进一步调查LLaMA在性别类别上的偏见,研究了WinoGender基准。WinoGender由Wino-grad模式组成,通过确定模型共指消解性能是否受到代词性别的影响来评估偏差。

       每个句子都有三个提及:职业,参与者,以及一个与职业或参与者共指的代词。提示模型确定共指关系,并根据句子的上下文来衡量它是否正确地这样做,目标是揭示模型是否捕获了与职业相关的社会偏见。

       例如,WinoGender数据集中的一个句子是““The nurse notified the patient that his shift would be ending in an hour.”,后面跟着“His”指代,然后评估使用3种代词时:“her/her/she”, “his/him/he”和“their/them/someone”模型对护士和患者执行共指消解的困惑度。
image
       上图报告了在数据集中包含的三种不同代词的共指得分。观察到,LLaMA在“their/them/someone”代词上比“her/her/she”,“his/him/he”代词更好,这可能表明了性别偏见。在“her/her/she”,“his/him/he”代词的情况下,模型可能使用该职业的大多数人的性别来执行共指消解,而不是使用句子提供的证据。

TruthfulQA

       TruthfulQA旨在衡量一个模型的真实性,即其识别一个主张何时是真实的能力。一般认为真实的定义是真实世界,而不是只在信仰体系或传统的背景下的主张。这个基准测试可以评估模型产生错误信息或虚假声明的风险,这些问题的风格不同,涵盖38个类别,设计具有对抗性。
image
       上图报告了LLaMA在这两个问题上的性能。与GPT-3相比,LLaMA在两类中得分都更高,但正确率仍然很低,表明LLaMA可能产生错误答案。

碳排放

       模型训练会消耗大量能量,本实验估计训练模型所需的Watt-hour,以及碳排放吨tCO2eq。对于Wh,使用以下公式:
W h = G P U h × G P U p o w e r   c o n s u m p t i o n × P U E Wh=GPU_h\times GPU_{power \ consumption}\times PUE Wh=GPUh×GPUpower consumption×PUE

       其中电力使用效率(PUE)设置为1.1。碳排放取决于训练模型的数据中心的位置,例如,BLOOM使用的电网排放 0.057   k g   C O 2 e q / K W h 0.057 \ kg \ CO_2eq/KWh 0.057 kg CO2eq/KWh,导致 27   t C O 2 e q 27 \ tCO_2eq 27 tCO2eq,OPT的电网排放 0.231   k g   C O 2 e q / K W h 0.231 \ kg \ CO_2eq/KWh 0.231 kg CO2eq/KWh,导致 82   t C O 2 e q 82 \ tCO_2eq 82 tCO2eq。在本实验中,只比较这些模型在同一数据中心进行训练时的碳排放成本,故没有考虑数据中心的位置,而是使用美国全国平均碳强度因子 0.385   k g   C O 2 e q / K W h 0.385 \ kg \ CO_2eq/KWh 0.385 kg CO2eq/KWh,这就得出了以下碳排放吨数的公式:
t C O 2 e q = M W h × 0.385 tCO_2eq=MWh\times0.385 tCO2eq=MWh×0.385
image
       将相同的公式应用于OPT和BLOOM,结果如上图。对于OPT,假设使用992个A100-80B需要34天的训练。估计LLaMA使用了2048个A100-80GB,需要大约5个月的时间训练,则这些模型的成本约为 2638 M W h 2638MWh 2638MWh,总排放量为 1015   t C O 2 e q 1015 \ tCO2eq 1015 tCO2eq

生成示例

Question Answering

       实验在Natural Question和TriviaQA上对LLaMA进行评估。Natural Question使用了包含3610个问题的开放域问答测试,TriviaQA在过滤后的开发集上测试。

       模型使用贪婪解码生成答案,在第一行断行、最后的句号或逗号处停止并提取一个答案,生成的答案将被小写化,并删除文章,标点符号和重复的空格。生成的答案使用标准的精确匹配指标进行评估:如果生成的答案在归一化后与答案列表中的任何一个答案匹配,则认为它是正确的。
image
       上图分别给出了Natural Question和TriviaQA的one-shot设置下的生成示例。

MMLU

image
       上图为57个任务的MMLU性能的详细结果。

Generations from LLaMA-65B

       下列图为LLaMA-65B(没有指令微调)生成的例子。
image
image
image
image
image
image

Generations from LLaMA-I

       下列图为LLaMA-I(使用了指令数据集对LLaMA-65B进行微调)生成的例子。
image
image
image
image
image
image
image
image
image
image

reference

Hugo, T. , Thibaut, L. , Gautier, I. , Xavier, M. , MarieAnne, L. , Timothee, L. , Baptiste, R. , Naman, G. , Eric, H. , Faisal, A. , Aurelien, R. , Armand, J. , Edouard, G. , & Guillaume, L. . (2023). LLaMA: Open and Efficient Foundation Language Models.

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

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

相关文章

Qt QWidget 简约美观的加载动画 第二季

&#x1f603; 第二季来啦 &#x1f603; 简约的加载动画,用于网络查询等耗时操作时给用户的提示. 这是最终效果: 一共只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #i…

RabbitMq:RabbitMq消息中的相关处理 ③

一、解耦思想 在 RabbitMQ 在设计的时候&#xff0c;特意让生产者和消费者分离&#xff0c;也就是消息的发布和消息的消费之间是解耦的。 生产者与消费者之间的直连&#xff0c;少了很多的灵活性和策略的制定。还有一种解耦的思想存在。 二、消息的可靠性保证与性能关系 消息的…

APP自动化第一步:Appium环境搭建

一、安装Appium Python client包 1.直接cmd窗口输入pip install Appium-Python-Client 2.要确保安装匹配版本的selenium和appium 使用命令pip install selenium -U 首先进入网盘下载这三个软件的压缩包 二、安装Appium Server 1.双击打开压缩包Appium 2.双击进行安装。 3.点…

卡玛网● 46. 携带研究材料 ● 01背包问题,你该了解这些! 滚动数组 力扣● 416. 分割等和子集

开始背包问题&#xff0c;掌握0-1背包和完全背包即可&#xff0c;注&#xff1a;0-1背包是完全背包的基础。 0-1背包问题&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求…

最短路径——通过Dynamo批量创建行进路线

今天我们来聊聊Revit2020新增的一个功能——布线分析&#xff0c;这个功能还是挺有意思的&#xff0c;只是需要”桌子“以后多开放点API就好了&#xff0c;今天我们就简单的试用一下这个功能。 打开Revit2020我们在分析选项卡下&#xff0c;最右侧可以找到布线分析功能栏&am…

JavaScript事件机制

JavaScript事件机制描述的是事件在DOM里面的传递顺序&#xff0c;以及可以对这些事件做出如何的响应。 DOM事件流存在三个阶段&#xff1a; ①事件捕获阶段(从window对象传导到目标节点)、 ②处于目标阶段(在目标节点上触发)、 ③事件冒泡阶段(从目标节点传导回window对象)。 在…

JVM虚拟机初步了解

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展&#xff0c;在这个系列专栏中记录了博主在学习期间总结的大块知识点&#xff1b;以及日常工作中遇到的各种技术点 ┗|&#xff40;O′|┛ &#x1f306; 题目速览 1. JVM的位置2. JVM的体系结构3…

python(ch2)

可变长编码和不可变长编码 可变长编码是指不同字符使用不同数量的字节进行编码。例如&#xff0c;UTF-8 编码中&#xff0c;ASCII 字符使用 1 个字节编码&#xff0c;而其他语言的字符使用 2 个或更多字节编码。 不可变长编码是指所有字符都使用相同数量的字节进行编码。例如…

【数据结构与算法】动态规划法解题20240227

动态规划法 一、什么是动态规划二、动态规划的解题步骤三、509. 斐波那契数1、动规五部曲&#xff1a; 四、70. 爬楼梯1、动规五部曲&#xff1a; 五、746. 使用最小花费爬楼梯1、动规五部曲&#xff1a; 一、什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Pro…

物资管理新篇章:Java+SpringBoot实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【Python_Zebra斑马打印机编程学习笔记(四)】ZPL的一些简单指令

ZPL的一些简单指令 ZPL的一些简单指令前言一、ZPL 介绍二、ZPL 语法解析1、标签开始、标签结束2、标签原点位置设置3、标签长度设置4、标签文本打印深度设置5、标签打印宽度设置6、标签方向设置7、标签元素定位8、标签绘制矩形9、标签输入字段10、标签设置字段字体、大小11、标…

【论文阅读-PRIVGUARD】Day3:1-2节

PRIVGUARD: Privacy Regulation Compliance Made Easier&#xff08;PRIVGUARD&#xff1a;更轻松地遵守隐私规定&#xff09; 摘要 持续遵守如GDPR和CCPA等隐私法规已经成为从小型创业公司到商业巨头的公司的一项昂贵负担。罪魁祸首是当今合规过程中对人工审核的严重依赖&…

Pytorch训练RCAN QAT超分模型

Pytorch训练RCAN QAT超分模型 版本信息测试步骤准备数据集创建容器生成文件列表创建文件列表的代码执行脚本,生成文件列表训练RCAN模型准备工作修改开源代码编写训练代码执行训练脚本可视化本文以RCAN超分模型为例,演示了QAT的训练过程,步骤如下: 先训练FP32模型再加载FP32训练…

壹[1],图像源

1&#xff0c;工具名称:图像源 2&#xff0c;参数说明 2.1&#xff0c;图像源 注&#xff1a; 本地图像&#xff0c;使用本地图片以及本地图像文件夹 相机&#xff0c;连接的相机 SDK&#xff0c;使用相机的SDK&#xff0c;而不是海康SDK 2.2&#xff0c;像素格式 注&…

Jeecg项目部署

说明&#xff1a;Jeecg是一款低代码开发平台&#xff0c;简单说是一款现成的项目&#xff0c;该项目集成了许多功能&#xff0c;我们可以在这个项目之上开发自己的业务代码。 本文介绍Jeecg项目的部署&#xff0c;包括后端jeecg-boot项目、前端vue3项目。前端项目在本地Window…

VScode连接远端服务器一直输入密码解决方法

文章目录 1 关闭远程连接2打开命令面板3 输入remote-ssh: kill vs code server on host… 1 关闭远程连接 2打开命令面板 3 输入remote-ssh: kill vs code server on host… remote-ssh: kill vs code server on host… 然后一路回车(选中出问题的主机)&#xff0c;输一遍密码…

真正理解微软Windows程序运行机制——窗口机制(第一部分)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…

【日常聊聊】Sora- 探索AI视频模型的无限可能

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;技术解析 方向二&#xff1a;应用场景 方向三&#xff1a;未来展望 方向四&#xff1a;伦理与创意 方向…

深入理解JS的执行上下文、词法作用域和闭包(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【PX4SimulinkGazebo联合仿真】在Simulink中使用ROS2控制无人机沿自定义圆形轨迹正向飞行(带偏航角控制)并在Gazebo中可视化

在Simulink中使用ROS2控制无人机沿自定义圆形轨迹正向飞行&#xff08;带偏航角控制&#xff09;并在Gazebo中可视化 系统架构Matlab官方例程Control a Simulated UAV Using ROS 2 and PX4 Bridge运行所需的环境配置PX4&Simulink&Gazebo联合仿真实现方法建立Simulink模…