摘要
以往的LLM(Large Languages Models)研究都遵从一个假设,即更多的参数将导致更好的性能。但也发现,给定计算预算限制后,最佳性能的模型不是参数最大的,而是数据更多的。对于实际场景,首选的模型不是训练速度最快的,而是推理速度最快的,训练时间较长的较小的模型最终在推理时的成本会更低。故提出改进:
- 通过训练比通常模型使用的更多的token,训练一系列语言模型,在各种推理预算中实现尽可能好的性能。所得模型称为LLaMA,参数范围从7B到65B
- 模型只使用公开可用的数据训练,与开源兼容
框架
预训练数据
如上图,预训练数据集使用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)
详细模型配置如上图。
优化器
模型使用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之间的通信
上图为不同尺寸的模在使用不同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设置中进行评估。
结果如上图。除BoolQ外,LLaMA-65B在所有报告的基准上都优于Chinchilla-70B。除了BoolQ和WinoGrande外,LLaMA-65B在所有基准都超过了PaLM- 540B。LLaMA-13B在大多数基准测试上也优于GPT-3,尽管其比GPT-3小10倍。
闭卷问答
本实验在Natural Questions和TriviaQA上将LLaMA与现有的大型语言模型进行了比较。对于这两个基准测试,实验报告了闭卷设置下的精确匹配性能,即模型不能访问包含答案的文档来回答问题。
在表4中,报告了Natural Questions的性能;表5中,报告了TriviaQA的性能。在这两个基准测试中,LLaMA-65B在zero-shot和few-shot设置中都实现了最先进的性能,同时LLaMA-13B在这些基准上与GPT-3具有竞争力,尽管其比GPT-3小5-10倍。
阅读理解
本实验在RACE阅读理解基准上评估了LLaMA,该数据集收集于初高中中国学生的英语阅读理解考试。
实验结果如上图。LLaMA-65B与PaLM-540B相当,LLaMA-13B的性能比GPT-3高出几个百分点。
数学推理
本实验在MATH和GSM8k两个数学推理基准来评估LLaMA。MATH是用LaTeX编写的12K初高中数学问题的数据集,GSM8k是一套中学数学习题。
实验将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的数据集上训练。
结果如上图。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。
结果如上图。观察到LLaMA-65B在大多数领域比Chinchilla-70B和PaLM-540B落后几个百分点。估计是因为训练前的数据中使用了有限数量的书籍和学术论文,即ArXiv、Gutenberg和book3,加起来也只有177GB,而这些模型是在多达2TB的书籍上进行训练的。
训练表现
本实验在训练过程中对一些问题回答和常识基准测试上跟踪了模型的性能,如上图。观察到在大多数基准测试中,性能稳步提高,并与模型的训练复杂度相关。另外,在SIQA上,观察到很多的性能差异,这可能表明这个基准测试不可靠。在WinoGrande上,表现与训练复杂度无关,LLaMA-33B和LLaMA-65B在训练中有相似的表现。
指令微调
本实验展示对指令数据的简要微调可以提高MMLU上的性能,并提高了模型遵循指令的能力。
上图报告了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(有毒)。
结果如上图,结果与Chinchilla相当。同时观察到随着模型增大,toxic也会增大。
CrowS-Pairs
CrowS-Pairs旨在衡量模型在性别、宗教、种族/肤色、性取向、年龄、国籍、残疾、身体外观和社会经济地位这9种类别的偏见。每个例子都由一个刻板印象和一个反刻板印象组成,实验在zero-shot设置下使用两个句子的困惑度来衡量模型对刻板印象句子的偏好,分数越高,偏见越高。
如上图,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”模型对护士和患者执行共指消解的困惑度。
上图报告了在数据集中包含的三种不同代词的共指得分。观察到,LLaMA在“their/them/someone”代词上比“her/her/she”,“his/him/he”代词更好,这可能表明了性别偏见。在“her/her/she”,“his/him/he”代词的情况下,模型可能使用该职业的大多数人的性别来执行共指消解,而不是使用句子提供的证据。
TruthfulQA
TruthfulQA旨在衡量一个模型的真实性,即其识别一个主张何时是真实的能力。一般认为真实的定义是真实世界,而不是只在信仰体系或传统的背景下的主张。这个基准测试可以评估模型产生错误信息或虚假声明的风险,这些问题的风格不同,涵盖38个类别,设计具有对抗性。
上图报告了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
将相同的公式应用于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在过滤后的开发集上测试。
模型使用贪婪解码生成答案,在第一行断行、最后的句号或逗号处停止并提取一个答案,生成的答案将被小写化,并删除文章,标点符号和重复的空格。生成的答案使用标准的精确匹配指标进行评估:如果生成的答案在归一化后与答案列表中的任何一个答案匹配,则认为它是正确的。
上图分别给出了Natural Question和TriviaQA的one-shot设置下的生成示例。
MMLU
上图为57个任务的MMLU性能的详细结果。
Generations from LLaMA-65B
下列图为LLaMA-65B(没有指令微调)生成的例子。
Generations from LLaMA-I
下列图为LLaMA-I(使用了指令数据集对LLaMA-65B进行微调)生成的例子。
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.