【论文精读】LLaMA1

摘要

       以往的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.mfbz.cn/a/412260.html

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

相关文章

2024 CKS 题库 | 13、Container安全上下文

不等更新题库 CKS 题库 13、Container安全上下文 Context Container Security Context应在特定namespace中修改Deployment。 Task 按照如下要求修改 sec-ns 命名空间里的 Deployment secdep 用ID为 30000 的用户启动容器(设置用户ID为: 30000)不允许…

机器学习-01-课程目标与职位分析

总结 本系列是机器学习课程的第01篇,主要介绍本门课程的课程目标与职位分析 教材 数据挖掘与机器学习 课程教学方法 布鲁姆教学法 认知领域(cognitive domain) 1.知道(知识)(knowledge) 是指…

逆序或者正序打印一个数的每一位数,递归实现(C语言)

从键盘上输入一个不多于5位(包括5位)的正整数,要求 (1)求出它是几位数;(2)分别输出每一位数字(3)按逆序输出各位数字 (1)求出它是几位…

产品经理学习-产品运营《社群活跃度打造》

目录: 社群运营普遍问题 社群是否需要活跃 提升活跃的方法 衡量社群的3个标准 社群运营普遍问题 在做社群运营的时候通常会进入一个相似的循环,拉群后会活跃一段时间变成广告群,不断的发商品链接、广告,一段时候后社群变成了一…

本地复制文本无法在Ubuntu终端中粘贴问题

在公司,安装Ubuntu环境后无法粘贴。 查询并自己实践后,解决方法如下: 1. sudo apt-get autoremove open-vm-tools 2. sudo apt-get install open-vm-tools-desktop 3.重启虚拟机 又可以愉快的复制粘贴了

CMU15445实验总结(Spring 2023)

CMU15445实验总结(Spring 2023) 背景 菜鸟博主是2024届毕业生,学历背景太差,导致23年秋招无果,准备奋战春招。此前有读过LevelDB源码的经历,对数据库的了解也仅限于LevelDB。奔着”有对比才能学的深“的理念,以及缓解…

ICASSP2024 | MLCA-AVSR: 基于多层交叉注意力机制的视听语音识别

视听语音识别(Audio-visual speech recognition, AVSR)是指结合音频和视频信息对语音进行识别的技术。当前,语音识别(ASR)系统在准确性在某些场景下已经达到与人类相媲美的水平。然而在复杂声学环境或远场拾音场景&…

C++:类与对象(2)

创作不易,感谢三连! 一、六大默认成员函数 C为了弥补C语言的不足,设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候,我们总是要在使用一个对象前进行初始化,这似乎已经成为了一件无法改变的…

【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录:…

【生成式AI】ChatGPT 原理解析(2/3)- 预训练 Pre-train

Hung-yi Lee 课件整理 预训练得到的模型我们叫自监督学习模型(Self-supervised Learning),也叫基石模型(foundation modle)。 文章目录 机器是怎么学习的ChatGPT里面的监督学习GPT-2GPT-3和GPT-3.5GPTChatGPT支持多语言…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 (1)原理图 (2)动态数码管如何与芯片相连 (3)“此器件” ——>锁存器74HC573 三、动态数码管显示例程 (1)例程1&#xf…

深入浅出JVM(十三)之垃圾回收算法细节

上篇文章深入浅出JVM(十二)之垃圾回收算法讨论了垃圾回收算法,为了能够更加充分的理解后续的垃圾收集器,本篇文章将深入浅出解析垃圾回收算法的相关细节,如:STW、枚举根节点如何避免长时间STW、安全点与安全…

浅谈 TCP 三次握手

文章目录 三次握手 三次握手 首先我们需要明确,三次握手的目的是什么? 是为了通信双方之间建立连接,然后传输数据。 那么建立连接的条件是什么呢? 需要确保通信的双方都确认彼此的接收和发送能力正常,满足这个条件&a…

Java+SpringBoot+Vue+MySQL构建银行客户管理新平台

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

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说,你要一部分原生代码开发,你就需要自己把 android 项目单独出去做(其实就相当于android 项目引用 Flutter的dart部分)。也就是说,在 Flutter…

4.WEB渗透测试-前置基础知识-快速搭建渗透环境(下)

先下载需要用到的两种语言java和python Python下载地址: Download Python | Python.org 点击Download Python 3.12.2下载即可 Java下载地址: https://www.oracle.com/cn/java/technologies/downloads/#license-lightbox 根据你电脑的操作系统和位数…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

学成在线_课程计划查询_前端页面无法跳转

问题描述 在进行课程计划查询的接口开发时通过了http-client测试但点开课程修改界面后点击保存并进行下一步时无法跳转到修改课程计划查询的页面。 问题原因 课程信息修改的Controller层没有实现 QAQ&#xff08;可能是老师在讲这一块的时候没有提这一点&#xff08;我也记…

System V版本的共享内存

在之前的学习中我们学习到了使用匿名和命名管道进行进程间的通信&#xff0c;下面我们再来使用一种新的方式进行进程间的通信。 我们下面要学习的是system V版本的共享内存。 首先我们要知道什么是system V 首先我们要知道我们在之前学习的管道通信的代码并不是一个专门设计…

Web JavaScript

目录 1 前言2 原生js常见用法2.1 弹窗操作2.2 for循环操作2.3 打印日志操作2.4 获取页面值操作2.5 判空操作2.6 修改页面内容操作2.7 网页版计算器制作 3 外部js常见用法4 总结 1 前言 JavaScript 是一种脚本&#xff0c;一门编程语言&#xff0c;它可以在网页上实现复杂的功能…
最新文章