LLaMA1 - 论文精读学习笔记

LLaMA: Open and Efficient Foundation Language Models标签:Basic Architectures of LLMs
论文链接:LLaMA: Open and Efficient Foundation Language Models
官方项目/代码:meta-llamallama代码
Cook
Published: 2024.09.10 | Last Updated: 2024.09.12

You are what you eat.
And I'm cooking what I eat!
:)

More food...🍜

目录

提前说明:本系列博文主要是对参考博文的解读与重述(对重点信息进行标记、或者整段摘录加深自己的记忆和理解、融合多个博文的精髓、统合不同的代表性的案例),仅做学习记录笔记使用。与君共享,希望一同进步。

 

文章标题:开放和高效的基础语言模型

优势:开源

 

全文概述

LLaMA 是 Meta AI (2023年2月)发布的包含 7B、13B、33B 和 65B 四种参数规模的基础语言模型集合(大模型),具体地,LLaMA-13B(仅以 1/10 规模的参数)在大多数基准上的表现优于GPT-3(175B),而LLaMA-65B可以和最好的模型Chinchilla-70B1和PaLM-540B2不相上下。在LLaMA发布之后,很多开源模型都是基于LLaMA的,比如斯坦福大学的羊驼模型。

作者在 1012 级别的词元上训练,证明了仅使用公开数据集也可以训练出来 SOTA 级别的模型。

本文介绍了LLaMA系列模型,通过在大量公开数据上训练,展示了在不使用专有数据集的情况下也能达到与顶级大模型相媲美的性能。文章详细讨论了训练方法、数据来源、模型架构优化和训练效率提升措施。

LLaMA的重点是比通常情况下使用更多的语料,来训练一系列可在各种推理预算下实现可能的最佳性能的语言模型。

LLaMA提供了不可多得的大模型开发思路,为很多国产化大模型打开了一片新的天地,论文和代码值得仔细研读。

作者引入了LLaMA系列模型,包含从7B到65B参数规模的模型。在万亿级tokens上训练,证明了仅使用公开数据集就可能训练得到SOTA的模型。

LLaMA是使用公开数据集训练的一系列大语言模型,其在多项NLP任务中超越GPT-3和PALM。模型训练采用byte级别的BPE分词SwiGLU激活函数RoPE位置编码。尽管在某些专业领域表现稍逊,但可通过指令微调提升性能。LLaMA提供不同规模的模型供不同需求的开发者使用。

背景

随着ChatGPT的爆火,大语言模型逐渐成为了研究热点,然而过去的大部分工作中的大语言模型LLM都是闭源的,仅提供API有偿调用,本文介绍了最近MetaAI开源的大语言模型LLaMA

大语言模型(Large Languages Models, LLMs)在大规模文本语料库上训练后,已经展现出能够根据文本指示(textual instructions)少量样本执行新任务的能力

这些少样本特性第一次出现在模型达到足够规模后,导致后来一系列工作着重于进一步扩大模型规模。LLM通常在参数量提升到一定程度后出现一些奇特的特性,如Few-shot甚至Zero-shot的In-context learning能力。过去的研究认为模型参数越多,最终的效果也越好。然而近期的工作表明,在给定计算预算下,最好的性能并不是由最大的模型实现的,而是由在更多数据上训练的较小模型实现的,即当计算预算一定的情况下,小一些的模型在更多的训练数据上训练会得到比大参数模型(更少的数据)更好的效果

Hoffmann等人提出的规模定律(scaling laws)的目标是在给定训练计算预算下,最佳的数据集规模和模型大小是什么。然而它的目标忽略了推理成本,当成规模部署大模型时会是一个重要问题。因此,更好的模型不是训练有多快,而是推理有多快,训练一个较小的模型更久最终在推理时会更经济。例如,虽然Hoffmann等人建议在200B个标记上训练一个10B模型,但作者发现即使在训练1T个标记之后,7B模型的性能仍在持续提高。

本篇工作的重点是训练一系列语言模型,使用比通常更多的token数来进行训练,在不同的推理预算下实现最佳性能。最后得到的模型称为LLaMA,参数范围从7B到65B,与现有最佳的大语言模型相比具有竞争力的性能。例如,LLaMA-13B在大多数基准测试中优于GPT-3,尽管体积小了10倍。在更大的规模上,LLaMA-65B参数模型也可以与最好的大型语言模型(如Chinchilla或PaLM-540B)相媲美。比较与Chinchilla、PaLM或GPT-3不同的是,LLaMA仅使用公开可用的数据,而大多数现有模型依赖于非公开可用或未记录的数据,LLaMA使得这篇工作的效果理论上更易于复现且更开源。更容易复现

全文要点

文章给出了一系列大语言模型LLaMA 7B, 13B, 33B, 65B和LLaMA-I,开发者可以在不同的预算的条件下选择合适的模型进行使用。文章仅依赖公开数据集进行训练,且针对特定领域可以通过指令微调来增强模型。

主要贡献

 

方法

作者的训练方法类似GPT和PaLM,并受到Chinchilla的规模定律启发。在大量文本数据上使用标准的优化器训练大型的Transformer。作者强调更多的训练数据更加重要

 

架构

LLaMA基于Transformer架构(具体是Encoder 还是 Decoder 结构不好说),同时采用了后续的一些改进。下面是这篇工作主要引入的改进以及灵感来源(在方括号中):

Pre-normalization[GPT3] 为了提升训练稳定性,对每个Transformer子层(sub-layer)的输入也进行归一化,而不是对输出进行归一化。同时使用RMSNorm归一化方法

SwiGLU激活函数[PaLM] 替换ReLU激活函数SwiGLU函数以提升性能。使用 234d 的维度而不是PaLM中的 4d

旋转嵌入[GPTNeo] 没有使用绝对位置嵌入,而是在网络的每一层添加旋转位置嵌入(Rotary Positional Embedding, RoPE)

 

数据集

预训练数据

预训练数据集由不同数据源组成,数据来源和比重如Table 1 所示。

image-20240912101400595

限制只使用公开可用且与开源兼容的数据。得到以下数据混合以及它们在训练集中所占的百分比:

Tokenizer

Tokenizer使用SentencePiece包实现的字节对编码算法(Byte-Pair Encoding BPE)对数据进行分词。将数字的每一位单独分开,避免出现数字不一致的问题,可以更好地理解和处理数值,极大地提高了数学能力。同时在遇到罕见词时使用byte编码分解未知的UTF-8 字符,做到未知词覆盖。

总体来说,整个训练数据集包含大约1.4T的标记。对于大部分训练数据,每个标记在训练过程中只使用一次,除了维基百科和图书领域对其进行了大约两个epoch的训练。

Table 2 给出了超参数的详细信息。

image-20240912104215318

4个不同规模模型的超参数细节

优化器

高效实现

作者做了一些优化来提升训练速度

  1. 首先,使用了一个因果多头注意力的高效实现来减少运行时的内存占用,该实现由可通过xformers获取,受到了Self-attention does not need O(n2) memory的启发。并采用了Flash Attention,基于语言建模任务的自回归性质,通过未存储注意力权重和未计算key/query得分来实现高效地反向传播。

  2. 同时为了进一步提升训练效率,通过检查点减少在反向传播时重复计算的激活值数量。具体地,存储了消耗较大的激活函数的计算结果,比如线性层的输出。这通过手动为Transformer实现反向传播函数(backward函数),而不是依赖于PyTorch的autograd。为了充分利用该优化,需要使用模型和序列并行技术(博文1)来减少模型内存的占用。此外,还尽可能地重叠激活计算和GPU之间的网络通信(通过all_reduce操作)。

当训练一个65B参数的模型,在2048个80G显存的A100上的处理速度约为380个标记/秒/GPU。这意味着使用包含1.4T个标记的数据集进行训练大约需要21天的时间。

 

代码

由于模型较大,目前的设备暂时没有办法支持进一步的实验,但是其模型代码已经开源,所以可以先通过代码了解一下模型结构上的一些细节,今天就针对github上放出的代码,了解一下模型的细节。

此外,该模型其实就是transformer做了一点细节上的改进,真正更有价值的工作应该在数据和训练方面。通过阅读代码,可以对transformer的基础构造进行复习,并且了解大模型如何在多卡上分布推理

项目环境依赖

此项目给出的环境依赖只有4个:

模型细节

由于该模型就是用的transformer的decoder,所以在结构上它与GPT是非常类似的,只是有一些细节需要注意一下。

代码解读

推理

简单看一下官方example中给出的推理样例prompt:

生成结果为:

 

主要结果

涉及了零样本(Zero-shot)和少样本(Few-shot)任务,一共报告了20个基准:

在自由生成任务和多项选择任务上评估LLaMA。

常识推理 考虑了8个标准的常识推理基准。

image-20240912111539670

Table 3 所示,LLaMA-65B在绝大多数基准上超越了Chinchilla-70B。而LLaMA-13B也在大多数基准上超越了GPT-3,尽管前者比后者小了10倍以上。

闭卷问答 将LLaMA与现有的LLM在两个闭卷问题回答基准中进行比较:自然问题(Natural Questions)和TriviaQA。

Table 4 中,作者报告了在自然问题上的性能,而在Table 5 中,报告了在TriviaQA上的性能。

image-20240912111622500image-20240912111656659

在这两个基准测试中,LLaMA-65B在零样本和少样本设置下取得了SOTA的性能。更重要的是,尽管LLaMA-13B的规模较小,但在这些基准测试中也具有竞争力。

阅读理解

image-20240912111718449

Table 6 所示,在基准测试中,LLaMA-65B与PaLM-540B相媲美,而LLaMA-13B的性能也比GPT-3高出几个百分点。

数学推理

image-20240912111738090

Table 7 中,与PaLM和Minerva进行了比较。Minerva是一系列在ArXiv和数学网页中提取的38.5B标记上微调的PaLM模型,而PaLM和LLaMA都没有在数学数据上进行微调。在GSM8k上,可以看到LLaMA-65B的性能由于Minverva-62B。

代码生成 还在HumanEval和MBPP基准测试上评估根据自然语言描述编写代码的能力。模型需要生成一个符合描述并满足测试用例的Python程序。

image-20240912111810319

Table 8 所示,对于类似的规模上,LLaMA在性能上优于其他通用模型,如LaMDA和PaLM。LLaMA在HumanEval和MBPP上的13B参数以上的性能也超过了LaMDA 137B。LLaMA-65B也优于PaLM-62B。

在包含代码的数据上进行微调可以提高模型的代码性能,同时还能提高模型的逻辑推理能力。

 

大规模多任务语言理解

image-20240912111836002

Table 9 中的结果所示,在这个基准测试中,LLaMA-65B在平均值和大多数领域上都落后于Chinchilla-70B和PaLM-540B几个百分点。一个可能的解释是,LLaMA在预训练数据中使用的书籍和学术论文数量有限,即ArXiv、Gutenberg和Books3,总计只有177GB,而这些模型是在多达2TB的书籍上进行训练的。

 

训练期间的性能评估

image-20240912111933828

image-20240912111913750

在训练过程中,作者追踪了模型在一些问答和常识基准测试中的性能(Figure 2 )。在大多数基准测试中,性能稳步提高,并与模型的训练困惑度相关(见Figure 1 )。但有两个例外,即SIQA和WinoGrande。特别是在SIQA上,可以观察到性能存在很大的变化,可能是该基准测试不太可靠。在WinoGrande上,性能与训练困惑度的相关性不太明显:LLaMA-33B和LLaMA-65B在训练过程中的性能相似。

 

指令微调

在本节中,作者展示了简单的微调指令数据可以迅速改善MMLU的性能。作者观察到少量样本的微调就可以提高在MMLU上的性能,并进一步提高模型遵循指令的能力。

image-20240912111856555

Table 10 中,可以看到指令模型LLaMA-I在MMLU上的结果,并与现有中等规模的指令微调模型进行了比较,包括OPT-IML和Flan-PaLM系列。尽管这里使用的指令微调方法相对简单,但在MMLU上达到了68.9%的性能。虽然LLaMA-I(65B)在MMLU上的表现优于现有的中等规模指令微调模型,但仍然远远落后于最先进的水平,即GPT code-davinci-002在MMLU上的77.4。

 

偏见/毒性/错误

LLM被证明会重现并强化存在与训练数据中的偏见,并生成毒性或冒犯性内容。由于训练数据集包含了大量来自网络的数据,作者认为确定模型生成此类内容的可能性是至关重要的。

为了了解LLaMA-65B的潜在危害,在不同的基准测试上进行了评估,这些测试衡量了有害内容的生成和偏见的检测。虽然选择了一些用于指示这些模型存在问题的标准基准测试,但这些评估并不足以完全理解与这些模型相关的风险。

RealToxicityPrompts

语言模型可以生成有毒内容,例如侮辱、仇恨言论或威胁。

RealToxicityPrompts基准视为其模型毒性的指标。RealToxicityPrompts由大约10万个模型必须完成的提示组成;然后通过向PerspectiveAPI发出请求来自动评估毒性评分。

RealToxicityPrompts包含约10万个提示,模型必须补全这些提示;然后通过向PerspectiveAPI进行请求来自动评估毒性得分。

image-20240912112005227

对于这10万个提示中的每一个,使用模型贪婪地生成,并测量它们的毒性得分。每个提示的得分范围从0(非毒性)到1(毒性)。在Table 11 中,报告了在RealToxicityPrompts的Basic和Respectful类别上的平均得分。可以观察到,毒性随模型规模增加而增加,尤其是对于Respectful的提示。但毒性与模型大小之间的关系可能仅适用于模型系列内部。

CrowS-Pairs

在CrowSPairs数据集上评估了模型的偏见,该数据集可以衡量9个类别的偏见:性别、宗教、种族/肤色等。使用零样本设置中两个句子的困惑度来衡量模型对偏见句子的偏好。因此,得分较高表示偏见较高。在Table 12 中与GPT-3和OPT-175B进行了比较。在平均水平上,LLaMA与这两个模型相比稍微有些优势。作者认为这些偏见可能来自于CommonCrawl,尽管经过了多次过滤步骤。

image-20240912112020655

WinoGender

image-20240912112039772

进一步研究了在性别上的偏见。还测试了WinoGender基准,这是一个共指消解数据集,通过确定模型的共指消解性能是否受到代词性别的影响来评估偏见。

每个句子都有三个指代:一个职业,一个参与者和一个代词,其中代词要么指代职业,要么指代参与者。目标是揭示模型是否捕捉到与职业相关的社会偏见。

Table 13 中,看到了模型数据集中包含的三个不同代词的共指分数。模型在their/them/someone代词的共指消解上要比her/her/shehis/him/he代词表现显著更好,这很可能表明存在性别偏见。

TruthfulQA

TruthfulQA旨在衡量模型的真实性,即其识别声明是否真实的能力。该基准测试可以评估模型生成错误信息或虚假声明的风险。问题以多样的风格编写,涵盖了38个类别,并且被设计为对抗性的。

image-20240912112057294

Table 14 中,可以看到模型在衡量真实模型和真实且信息丰富的问题上的表现。与GPT-3相比,虽然LLaMA在这两个类别中得分更高,但正确答案的比率仍然较低,表明LLaMA很可能会产生不正确的答案。

 

补充

相关工作

语言模型 语言模型是对单词、标记或字符序列的概率分布表示。这个任务通常被称为下一个标记预测,并且长期以来一直被认为是自然语言处理中的核心问题。由于图灵提出通过“模仿游戏”来使用语言来衡量机器智能,因此语言建模已被提出作为衡量人工智能进展的基准。

架构 传统上,语言模型基于n-gram计数统计,并提出了各种平滑技术来改善对罕见事件的估计。在过去的二十年中,神经网络已成功应用于语言建模任务,从前馈模型、循环神经网络到LSTM。近来,基于自注意力机制的Transformer网络取得了重要的改进,特别是在捕捉长距离依赖性方面。

规模 语言模型的扩充有着悠久的历史。无论是模型还是数据集的规模。Brants等人展示了在2万亿标记上训练的语言模型的优势,结果是有3000亿个n-gram,对机器翻译的质量有所提升。Heafield等人后来展示了如何将Kneser-Ney平滑技术扩展到Web规模的数据上。这使得能够在来自CommonCrawl的9750亿标记上训练一个5-gram模型,产生了具有5000亿个n-gram的模型。

在神经语言模型的背景下,Jozefowicz通过将LSTM扩展到10亿个参数,在十亿字基准测试中取得了最先进的结果。后来,通过扩展Transformer在许多自然语言处理任务上取得了改进。值得注意的模型包括BERTGPT-2MegatronLMT5。重要的突破是通过GPT-3取得的,这是一个具有1750亿个参数的模型。这导致了一系列大规模语言模型的出现,例如Jurassic-1、Megatron-Turing NLG、Gopher、Chinchilla、PaLM、OPT和GLM。Hestness等人研究了扩展对深度学习模型性能的影响,展示了模型和数据集大小与系统性能之间存在的幂律关系。Kaplan等人专门为基于Transformer的语言模型推导了幂律关系,后来由Hoffmann等人通过调整学习率调度来改进。最后,Wei等人研究了扩展规模对大型语言模型能力的影响。

结论

在LLaMA中,作者介绍了一系列开放的语言模型,并与最先进的基准模型进行了竞争。与以前的研究不同,作者展示了通过仅使用公开可用的数据进行训练,而无需使用专有数据集,可以实现最先进的性能。

本文中提出了一系列公开发布的语言模型,并实现与最先进的基础模型相竞争的结果。最值得注意的是,LLaMA-13B的性能优于GPT-3,但体积比GPT-3小10倍以上,LLaMA-65B与Chinchilla-70B和PaLM-540B竞争

 

博文5 代码部分的总结

总结一下,本文对LLaMA大模型的结构代码进行了详细的介绍,其开源出来的结构代码量并不多,但是其中很多细节值得反复推敲理解。

 

参考博文

  1. [论文笔记]LLaMA: Open and Efficient Foundation Language Models

    点评:★★★★☆ 起码对文章进行了整体的描述。还是不错的!

  2. 论文笔记:LLaMA: Open and Efficient Foundation Language Models

    点评:★★★☆☆ 感觉和博文1非常相似,补充了一些细节知识点的描述。

  3. 【读论文】LLaMA: Open and Efficient Foundation Language Models

    点评:★★★★☆ 感觉类似的博文后面的实验都是大概相仿,估计大多是对原文的翻译罢了~ 但是这篇文章有的好处是,(以自己的理解吗?猜测是的)给出了架构图。此外,具体使用的细节也给出了出处,方便后期深入学习的时候,可以回过头来再参考看看。

  4. 【LLM系列之LLaMA】LLaMA: Open and Efficient Foundation Language Models

    点评:★★★☆☆ 相比之前的文章,有些细节上的补充,但是大多数都是一样的。

  5. Meta最新模型LLaMA细节与代码详解 暂时没有展开,复现的时候再细看

 

原文目录

1 Introduction 1 2 Approach 2 2.1 Pre-training Data 2 2.2 Architecture 3 2.3 Optimizer 3 2.4 Efficient implementation 3 3 Main results 4 3.1 Common Sense Reasoning 4 3.2 Closed-book Question Answering 5 3.3 Reading Comprehension 5 3.4 Mathematical reasoning 5 3.5 Code generation 5 3.6 Massive Multitask LanguageUnderstanding 6 3.7 Evolution of performance during training 6 4 Instruction Finetuning 7 5 Bias, Toxicity and Misinformation 7 5.1 RealToxicityPrompts 8 5.2 CrowS-Pairs 9 5.3 WinoGender 9 5.4 TruthfulQA 9 6 Carbon footprint 10 7 Related work 10 8 Conclusion 11 Acknowledgements 12 References 12 A Question Answering 17 B MMLU 18 C Generations from LLaMA-65B 19 D Generations from LLaMA-I 22

 

博文免责声明

  1. 本条博文信息主要整合自网络,部分内容为自己的理解写出来的,如有断章截句导致不正确或因个人水平有限未能详尽正确描述的地方,敬请各位读者指正;

  2. 引用出处可能没有完全追溯到原始来源,如因此冒犯到原创作者,请联系本人更正/删除;

  3. 博文的发布主要用于自我学习,其次希望帮助到有共同疑惑的朋友。

欢迎随时联系讨论,一起成长进步。

1 Touvron H, Lavril T, Izacard G, et al. Llama: Open and efficient foundation language models[J]. arXiv preprint arXiv:2302.13971, 2023.