【论文精读】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.mzph.cn/news/704414.shtml

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

相关文章

Huggingface学习笔记

课程地址:【HuggingFace简明教程,BERT中文模型实战示例.NLP预训练模型,Transformers类库,datasets类库快速入门.】 什么是huggingface? huggingface是一个开源社区,提供了先进的NLP模型、数据集以及工具。 主要模型: 安装环境&…

【Java程序设计】【C00284】基于Springboot的校园疫情防控管理系统(有论文)

基于Springboot的校园疫情防控管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园疫情防控系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块:在系统首页可以查…

LeetCode 1038.从二叉搜索树到更大和树

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下, 二叉搜索树 满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左…

Spring Cloud与Docker集成:微服务容器化解决方案详解

推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手,可以免费领取GPT3.5无限卡 Spring Cloud 和 Docker 是两个不同的技术,但它们可以一起工作以构建、部署和管理微服务架构。下面是它们各自的简介以及它们如何协同工作的原理解析。 Sp…

蜘蛛蜂优化算法SWO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。VRPTW&#x…

043 多态

示例 public class A {public void say(){System.out.println("I am A");} } public class B extends A {Overridepublic void say(){System.out.println("I am B");} } public class Test {public static void main(String[] args) {A a new B(); // …

【Spring Boot 源码学习】深入 BootstrapContext 及其默认实现

《Spring Boot 源码学习系列》 深入 BootstrapContext 及其默认实现 一、引言二、往期内容三、主要内容3.1 BootstrapContext3.1.1 源码初识3.1.2 get 方法3.1.3 getOrElse 方法3.1.4 getOrElseSupply 方法3.1.5 getOrElseThrow 方法3.1.6 isRegistered 方法 3.2 ConfigurableB…

构建企业多维模型,助力财务战略规划

财务规划与分析是一个企业需要广泛实践、改革优化的领域。战略规划对于财务管理来说,对企业的未来发展具有长期且不可逆的影响。一般企业在做重要战略决策时面临的主要挑战是对于可能结果复杂性的预测,其干涉因素很多,规划范围也十分广泛&…

【Unity】如何从现有项目中抽取好用的资源

【背景】 在做Unity项目的过程中引入各种各样的Package,有的Package很大,但是觉得非常有用的可能只是几个Prefab或者Material等。如果直接拷贝想要的Prefab和Material,又需要自己确认所有有依赖关系的资源。 如果能将所有日常经受项目中自己…

cgroup底层技术研究一、cgroup简介与cgroup命令行工具

本文参考以下文章: 58 | cgroup技术:内部创业公司应该独立核算成本 特此致谢! 一、cgroup简介 1. cgroup是什么 cgroup(Control Group)是Linux内核提供的一种机制,用于对进程或进程组进行资源限制、优先…

python[6]

类和对象 面向对象编程–说白就是让对象干活 创建类:class 类名: 创建类对象 对象名 类名() 构造方法 1、构造方法的名称是__init__ 2、构造方法的作用? 构建类对象的时候会自动运行 构建类对象的传参会传递给构造…

react+canvas实现刮刮乐效果

话不多说,直接看代码吧 import { useEffect } from react; import styles from ./index.less;export default function Canvas() {function init() {let gj document.querySelector(.gj);let jp document.querySelector(#jp) as HTMLElement;let canvas documen…

mac flutter 配置

下载Flutter Sdk 直接访问官网无法下载,需要访问中国镜像下载 Flutter SDK 归档列表 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter Start building Flutter Android apps on macOS - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 下载后解压…

Java+SpringBoot+Vue+MySQL:美食推荐系统的技术革新

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

基于STM32的蓝牙遥控小车:手机APP控制小车运动

这里写目录标题 一、智能双轮小车蓝牙APP控制前后左右调速运动功能描述原理图设计PCB设计源码设计 二、更多功能小车网友推荐后开发... 一、智能双轮小车蓝牙APP控制前后左右调速运动 功能描述 1、小车可以前后左右运动 2、可以调节小车的速度 3、使用两个电机驱动两个轮子&a…

Go语言必知必会100问题-06 生产者端接口

生产者端接口 Go语言必知必会100问题-05 接口污染中介绍了程序中使用接口是有价值的。在编码的时候,接口应该放在哪里呢?这是Go开发人员经常有误解的一个问题,本文将深入分析该问题。 在深入探讨问题之前,先对提及的术语做一个定…

MySQL(2/3)

select和别名的使用 主要是用以查询数据 语法:select 字段 from 库名 -- *代表全部字段 select * from student; -- 可以查询多个字段,并使用as起别名,as可以省略 select id as bbb ,name as hhh from student; -- 可以使用函数concat(a,b…

新版Java面试专题视频教程——虚拟机篇②

新版Java面试专题视频教程——虚拟机篇② 3 垃圾收回3.1 简述Java垃圾回收机制?(GC是什么?为什么要GC)3.2 对象什么时候可以被垃圾器回收3.2.1 引用计数法3.2.2 可达性分析算法 3.3 JVM 垃圾回收算法有哪些?——4种3.3…

Python实现DAS单点登录

❇️ 流程 进入登录页面 (DAS验证的登录页面) 获取验证码图像,百度OCR识别 登录 🏞️ 环境 Windows 11 Python 3.12 PyCharm 2023 🧵 准备工作 安装必要依赖库 bs4 Jupyter 推荐安装 Jupyter(Anaco…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型,而是一类模型,这一类模型用来判断变量之间是否具有相关性。一般来说,分析两个变量之间是否具有相关性,我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…