A Survey of Large Language Models 快速阅读 图解版(中篇 谁家好人的综述这么长啊,屁股都坐不住了)
Survey for LLM 解读
第三章:LLMs的资源
一图概览如下
第3.1节:公开可用的模型检查点或API(Publicly Available Model Checkpoints or APIs)
数十亿参数的模型(Models with Tens of Billions of Parameters)
这类模型的参数规模通常在10B到20B之间。一些例子包括:
- LLaMA 和 LLaMA2:在最大版本中含有70B参数。
- NLLB:在最大版本中含有54.5B参数。
- Falcon:在最大版本中含有40B参数。
其他此范围内的模型包括 mT5, PanGu-α, T0, GPT-NeoX-20B, CodeGen, UL2, Flan-T5, 和 mT0。特别地,Flan-T5(11B版本)被用作研究指令调整的主要模型,CodeGen(11B版本)则专注于代码生成的能力探索。
数百亿参数的模型(Models with Hundreds of Billions of Parameters)
这一类别中,只有少数模型被公开发布。例如,OPT 和 OPT-IML, BLOOM 和 BLOOMZ 几乎具有与GPT-3(175B版本)相同的参数数量。其他模型如 GLM 和 Galactica 分别拥有130B和120B的参数。OPT(175B版本)特别强调开放共享,支持可复现的大规模研究 。
OPT && OPT-IML
BLOOM && BLOOMZ
GLM && Galactica
LLaMA模型系列(LLaMA Model Family)
由Meta AI在2023年推出,LLaMA模型系列包括四种规模(7B, 13B, 30B, 65B)。LLaMA系列自发布以来,因其在多种开放基准测试中的卓越性能而受到广泛关注,并成为目前最受欢迎的开放语言模型。此外,Stanford Alpaca 是基于LLaMA(7B版本)进行指令调整后的第一个开放指令跟随模型。
公共API的使用(Public API of LLMs)
对于大型语言模型,我们可以直接使用公共API来执行任务,无需在本地运行模型,这为用户提供了一种高效且易于接入的使用方式。
3.2 常用于预训练的语料库(Commonly Used Corpora for Pre-training)
在对比早期的预训练语言模型 (PLMs) 时,大型语言模型(LLMs)由于其庞大的参数数量,需要更多的训练数据来涵盖广泛的内容。因此,研究领域公开了越来越多的可访问的训练数据集。在本节中,我们将简要总结几种用于训练LLMs的广泛使用的语料库。根据它们的内容类型,我们将这些语料库分为六组:书籍、CommonCrawl、Reddit链接、维基百科、代码和其他。
书籍(Books)
- BookCorpus:在之前的小规模模型中常用的数据集(例如,GPT和GPT-2),包含超过11,000本书籍,涵盖广泛的主题和类型(如小说和传记)。
- Project Gutenberg:包含超过70,000本文学作品,如小说、散文、诗歌、戏剧、历史、科学、哲学等,是目前最大的开源书籍集之一。
CommonCrawl
- CommonCrawl:最大的开源网络爬虫数据库之一,包含宠物字节规模的数据量,广泛用作现有LLMs的训练数据。这个数据集非常庞大,通常在特定时期内从中提取网页子集。它基于CommonCrawl的几个过滤数据集包括:C4、CC-Stories、CC-News和RealNews。
Reddit链接(Reddit Links)
- WebText:由Reddit上高赞链接组成的著名语料库,尽管现在不再公开。
维基百科(Wikipedia)
- 维基百科是在线百科全书,包含大量高质量文章,文章多以论述性写作风格撰写。
代码(Code)
- 代码数据主要来自互联网上的开源代码库(如GitHub)和代码相关的问答平台(如StackOverflow)。
其他(Others)
- The Pile:是一个由多种来源组成的大规模、多样化的开源文本数据集,包括书籍、网站、代码、科学论文和社交媒体平台等。
这些语料库通常需要混合不同的数据源进行预训练,而不是使用单一的语料库。为了训练出适应特定应用的LLMs,也很重要的是从相关源(如维基百科和BigQuery)提取数据,以丰富预训练数据中的相应信息。
3.3 微调常用数据集 (Commonly Used Datasets for Fine-tuning)
在预训练之后,大型语言模型(LLM)通常需要进一步的微调来增强模型能力,这通常涉及指令调整和对齐调整两个主要步骤。
3.3.1 指令调整数据集 (Instruction Tuning Datasets)
指令调整,也称为监督式微调,是增强或解锁LLMs特定能力(如指令跟随)的关键方法。这些数据集根据提供的指令实例的格式分为三类。
NLP任务数据集 (NLP Task Datasets)
这些数据集围绕特定的NLP任务(如文本分类和摘要)构建,提供自然语言任务描述。例如:
- P3:包含170个英语NLP数据集和2,052个提示模板,设计用来格式化每个示例的输入和输出,用于训练目的。
- FLAN:原本包含62个基准测试,其版本2扩展了更多的指令数据集,如Muffin、NIV2、T0-SF和CoT,涵盖从对话到代码合成的各种任务。
日常聊天数据集 (Daily Chat Datasets)
从真实用户互动中构建,这些数据集反映了可能涉及开放式响应、问答或随意聊天的各种对话场景,如:
- ShareGPT:源自用户生成的内容,响应由人类注释者或LLMs精心策划。
- OpenAssistant:专注于对话场景,其中的互动特别设计来测试LLMs的会话能力。
合成数据集 (Synthetic Datasets)
这些是合成生成的数据集,场景或任务是为了测试特定的能力或响应而人工生成的:
- Self-Instruct-52K:旨在测试LLMs的指令跟随能力的合成数据集,具有控制条件和结构化提示。
3.3.2 对齐调整数据集 (Alignment Datasets)
对齐调整侧重于使模型输出与人类价值、偏好或指定标准(如安全性和有用性)对齐。该领域的重要数据集包括:
- HH-RLHF [170]:包含约169K实例,关注LLMs的有益性和无害性。每个实例是一个开放式对话,聊天模型对每个用户查询提供两种响应,更有益或更有害的响应将被选为注释。
- SHP [177]:专注于响应的选择偏好,旨在使LLM输出与人类伦理标准和偏好对齐。
- PKU-SafeRLHF [181]:强调安全和伦理的数据集,包含许多专家注释者比较不同响应以对其与期望的人类价值对齐的实例。
- Stack Exchange Preferences [178]:利用Stack Exchange社区驱动的问答内容训练模型,以识别最有帮助和信息丰富的答案。
- Sandbox Alignment Data:在受控环境中创建,LLMs在模拟场景中与虚拟代理而非真人反馈进行互动以微调其响应。
3.4 开发LLMs的可用库资源
概览
介绍了一系列开发LLMs的库,这些库提供了丰富的优化技术和并行训练策略,支持高效的分布式训练。
主要库
、- Transformers [187]:
- 是由Hugging Face开发和维护的开源Python库,用于构建使用Transformer架构的模型。它提供简单友好的API,易于使用和定制各种预训练模型。
- DeepSpeed [74]:
- 是Microsoft开发的深度学习优化库(兼容PyTorch),支持分布式训练的各种优化技术,如内存优化(ZeRO技术、梯度检查点)和流水线并行。
- Megatron-LM [75–77]:
- 由NVIDIA开发,用于训练大规模语言模型。提供丰富的分布式训练优化技术,包括模型和数据并行、混合精度训练和FlashAttention。
- JAX [188]:
- Google开发的高性能机器学习算法的Python库,允许用户在支持硬件加速(如GPU或TPU)的情况下轻松进行数组计算。
- Colossal-AI [189]:
- 由HPC-AI Tech开发,基于PyTorch实现,支持丰富的并行训练策略,并可以优化异构内存管理。
- BMTrain [191]:
- 由OpenBMB开发,用于以分布式方式训练大规模参数模型的高效库,强调代码简洁、资源低消耗和高可用性。
- FastMoE [192]:
- 是专门为MoE(即专家混合)模型训练的库,基于PyTorch开发,设计时注重效率和用户友好性。
- vLLM [193]:
- 是用于LLM推理和服务的快速、内存高效且易于使用的库。为实现快速推理,专门优化了服务吞吐量高、有效的注意力内存管理等功能。
- DeepSpeed-MII [194]:
- 是DeepSpeed [74]开发的内存高效的Python库,旨在通过优先考虑高吞吐量、低延迟和成本效益来推广LLM推理。
- DeepSpeed-Chat [196]:
- 是一个快速、经济且易于使用的系统框架,使整个RLHF(强化学习从人类反馈中学习)过程的模型训练成为可能。
分割线
第四章:预训练
一图概览如下
4.1 数据收集和准备 (Data Collection and Preparation)
4.1.1 数据来源 (Data Source)
相比于小规模语言模型,LLMs对高质量数据有更高的需求,其模型能力很大程度上依赖于预训练语料库及其预处理方式。现有的LLMs主要利用多样化的公共文本数据集作为预训练语料库。预训练语料库的来源可大致分为两类:一般数据和专门数据。一般数据包括网页、书籍和对话文本,因其量大、种类多、易获取等特点,被大多数LLMs利用。除了一般数据外,还有研究将预训练语料库扩展到更专业的数据集,如多语言数据、科学数据和代码,以赋予LLMs特定任务的解决能力。
一般文本数据 (General Text Data)
- 网页 (Webpages):由于互联网的普及,产生了各种类型的数据,使得LLMs能够获得多样的语言知识并增强其泛化能力。例如CommonCrawl等被广泛使用,但需要过滤和处理以提高数据质量。
- 对话文本 (Conversation Text):对话数据可以增强LLMs的对话能力,并潜在地提高其在问答任务中的表现。例如PushShift.io Reddit语料库等,但需要有效处理多方对话数据。
- 书籍 (Books):书籍提供了正式长文本的重要来源,有助于LLMs学习语言知识、建模长程依赖关系和生成连贯的文本。例如Books3和Bookcorpus2数据集。
专门文本数据 (Specialized Text Data)
- 多语言文本 (Multilingual Text):除了目标语言的文本外,整合多语言语料库可以增强语言理解和生成的多语言能力。例如BLOOM和PaLM。
- 科学文本 (Scientific Text):科学领域的复杂数据需要特定的分词和预处理技术来统一数据格式。例如收集arXiv论文、科学教科书和数学网页。
- 代码 (Code):训练在大量代码语料库上的LLMs可以显著提高生成程序的质量。例如从Stack Exchange和GitHub等公共软件仓库中收集的代码数据。
4.1.2 数据预处理 (Data Preprocessing)
在收集了大量文本数据后,必须对数据进行预处理,以构建预训练语料库。典型的数据预处理流程包括质量过滤、去重、隐私去除和分词。
- 质量过滤 (Quality Filtering):通过分类器或启发式方法过滤低质量数据,例如语言过滤、指标过滤、统计特征过滤和关键词过滤。
- 去重 (De-duplication):去重可以在不同粒度上进行,包括句子级、文档级和数据集级去重。
- 隐私去除 (Privacy Reduction):通过基于规则的方法检测和移除个人身份信息(PII)。
- 分词 (Tokenization):将原始文本分割成独立的词元序列,常用的方法包括字节对编码(BPE)、WordPiece分词和Unigram分词。
4.1.3 数据调度 (Data Scheduling)
数据预处理后,需要设计合适的策略来调度这些多源数据以预训练LLM。数据调度的两个关键方面是:数据源的比例(数据混合)和每个数据源的调度顺序(数据课程)。
Data Mixture
现有的LLMs通过上采样或下采样每个源的全部数据来创建特定的数据混合作为预训练数据。增加数据源的多样性对于提高LLMs的下游性能至关重要。此外,数据混合优化方法如对比实验也被用来优化数据混合策略。
Data Curriculum
数据课程涉及确定每个数据源的训练顺序,通常是基于任务难度或数据质量的逐步训练方法。此方法可以帮助模型更稳定地学习,并在早期阶段避免陷入局部最优解。
4.1.4 数据准备总结 (Summary of Data Preparation)
预训练数据的质量对LLMs的模型能力至关重要。通过比较在过滤和未过滤语料库上训练的模型性能,研究表明在清洗后的数据上进行预训练可以提高模型性能。因此,利用质量过滤、有害内容过滤和去重等预处理方法来仔细清洗预训练语料库是必要的,以提高训练过程的稳定性并避免影响模型性能。
Data collection
数据收集是指从多种来源收集大量文本数据,以便为LLMs提供多样化和广泛覆盖的训练数据。
Data cleaning
数据清洗包括质量过滤、去重和隐私信息去除等步骤,以确保预训练语料库的高质量和安全性。
Data scheduling
数据调度是指根据数据源的比例和顺序,设计适当的策略来调度多源数据进行预训练。这有助于提高训练过程的稳定性和模型性能。
4.2 架构 (Architecture)
4.2.1 典型架构 (Typical Architectures)
讨论了几种常见的LLM架构,这些架构通过不同的设计和优化方法提升模型的性能。
Encoder-decoder Architecture
Encoder-decoder架构是vanilla Transformer模型的基础,由两个堆叠的Transformer模块组成,一个作为编码器,另一个作为解码器。编码器采用多头自注意力层来编码输入序列,生成其潜在表示,而解码器对这些表示进行交叉注意,并自回归生成目标序列。典型的Encoder-decoder预训练语言模型(PLMs)如T5和BART在各种NLP任务中表现出色。
Causal Decoder Architecture
Causal decoder架构引入了单向注意力掩码,确保每个输入token只能关注过去的token及自身。输入和输出token通过解码器以相同的方式处理。典型的语言模型如GPT系列(如GPT-3)基于此架构开发,并展示了LLMs惊人的上下文学习能力。目前,Causal decoders已被广泛采用,如OPT、BLOOM和Gopher等模型。
Prefix Decoder Architecture
Prefix decoder架构修正了Causal decoders的掩码机制,使其能够对前缀token进行双向注意,而仅对生成的token进行单向注意。这样,Prefix decoders可以双向编码前缀序列并逐一自回归预测输出token。现有代表性LLMs如GLM-130B和U-PaLM基于此架构。
Mixture-of-Experts
通过Mixture-of-Experts(MoE)扩展上述三种架构中的任一种,可以为每个输入稀疏激活部分神经网络权重,如Switch Transformer和GLaM。MoE的主要优点在于其灵活性,可以在保持计算成本不变的情况下扩展模型参数。然而,训练大型MoE模型可能会因路由操作的复杂性而出现稳定性问题。
Emergent Architectures
新兴架构尚未被详细讨论或验证,但有传言称GPT-4可能基于MoE架构开发。
4.2.2 详细配置 (Detailed Configuration)
介绍了LLM的具体配置,包括层数、隐藏单元数、注意力头数等参数设置。
Normalization Methods
规范化方法在模型中起到平衡和稳定训练的作用,常用的方法包括LayerNorm和RMSNorm。
Normalization Position
规范化位置指的是规范化操作在模型中的应用位置,可能在前(Pre LayerNorm)或后(Post LayerNorm)。
Activation Functions
激活函数是神经网络中重要的非线性变换,常见的有GeLU、ReLU和SwiGLU。
Position Embeddings
位置嵌入用于表示输入序列中每个token的位置信息,常用的方法有Learned Position Embeddings、RoPE和Relative Position Embeddings。
Attention
注意力机制是Transformer架构的核心,通过计算token之间的相似度来动态调整其权重,常见的方法包括多头自注意力和交叉注意力。
4.2.3 预训练任务 (Pre-training Tasks)
列举了用于预训练LLM的典型任务,如语言模型任务、填空任务等。
Language Modeling
语言模型任务通过预测下一个词来训练模型,增强模型对语言结构的理解。
Denoising Autoencoding
去噪自编码任务通过让模型从损坏的输入中恢复原始输入,提高模型的鲁棒性。
Mixture-of-Denoisers
混合去噪器任务结合多种去噪策略,提高模型在多种噪声条件下的性能。
4.2.4 长上下文建模 (Long Context Modeling)
探讨了如何通过改进模型结构和训练方法来增强LLM对长上下文的建模能力。
Scaling Position Embeddings
通过扩展位置嵌入的范围来增强模型处理长上下文的能力。
Adapting Context Window
通过调整上下文窗口大小,使模型能够处理更长的文本序列。
4.2.5 解码策略 (Decoding Strategy)
讨论了不同的解码策略及其在生成文本时的效果。
Background
提供了解码策略的背景信息及其在文本生成中的应用。
Improvement for Greedy Search
对贪婪搜索策略进行改进,以提高文本生成的连贯性和准确性。
Improvement for Random Sampling
对随机采样策略进行改进,以增加生成文本的多样性。
Practical Settings
介绍了几种代表性LLM的解码设置和实际应用中的最佳实践
4.2.6 总结与讨论 (Summary and Discussion)
对不同架构和训练策略进行了总结,并讨论了其在实际应用中的优缺点
Architecture Choice
讨论了不同架构选择对LLM能力的影响,以及因果解码器架构在零样本和少样本学习中的优势。
4.3 模型训练 (Model Training)
4.3.1 优化设置 (Optimization Setting)
介绍了用于优化LLM训练的设置和方法,如学习率调度、梯度裁剪等。
批量训练 (Batch Training)
对于语言模型预训练,现有研究通常将批量大小设置为较大的数量(例如2048个示例或400万个标记)以提高训练的稳定性和吞吐量。对于如GPT-3和PaLM等大型语言模型,它们引入了一种在训练过程中动态增加批量大小的新策略,最终达到百万规模。具体而言,GPT-3的批量大小逐渐从32K增加到3.2M标记。实验证明,批量大小的动态调度可以有效地稳定LLMs的训练过程 。
学习率 (Learning Rate)
现有的LLMs通常采用类似的学习率调度策略,在预训练期间使用预热和衰减策略。具体而言,在初始的0.1%到0.5%的训练步骤中,采用线性预热调度以逐步增加学习率到最大值,该最大值范围大约从5×10-5到1×10-4(例如,GPT-3的学习率为6×10^-5)。然后,在随后的步骤中采用余弦衰减策略,逐步将学习率减少到其最大值的约10%,直到训练损失收敛 。
优化器 (Optimizer)
Adam优化器【328】和AdamW优化器【329】被广泛用于训练LLMs(例如,GPT-3),它们基于对低阶矩的自适应估计进行一阶梯度优化。通常,其超参数设置如下:β1=0.9,β2=0.95,ϵ=10-8。同时,Adafactor优化器【330】也被用于训练LLMs(例如,PaLM和T5),这是Adam优化器的一种变体,专为在训练过程中节省GPU内存而设计。Adafactor优化器的超参数设置为:β1=0.9,β2=1.0-k-0.8,其中k表示训练步骤数 。
稳定训练 (Stabilizing the Training)
为了缓解训练中的问题,PaLM和OPT使用了一种简单策略,即从发生问题之前的早期检查点重新开始训练,并跳过可能导致问题的数据。此外,GLM发现嵌入层的异常梯度通常会导致峰值问题,并提出通过缩小嵌入层梯度来缓解它 。
4.3.2 可扩展训练技术 (Scalable Training Techniques)
探讨了如何通过并行训练、分布式训练和混合精度训练等技术来扩展LLM的训练规模。
3D并行 (3D Parallelism)
3D并行实际上是三种常用的并行训练技术的组合,即数据并行、流水线并行和张量并行。数据并行是提高训练吞吐量的基本方法之一,它复制模型参数和优化器状态到多个GPU,然后将整个训练语料库分配到这些GPU中。每个GPU只需要处理分配给它的数据,并执行前向和后向传播以获得梯度。不同GPU计算的梯度将进一步聚合以获得整个批量的梯度,从而更新所有GPU中的模型 。
ZeRO
ZeRO是另一种广泛使用的技术,用于处理大规模模型的训练,通过优化内存使用来支持更大规模的模型训练 。
混合精度训练 (Mixed Precision Training)
混合精度训练也是一种常用技术,通过在训练过程中使用较低精度(例如16位浮点数)来减少内存占用和提高计算效率 。
整体训练建议 (Overall Training Suggestion)
结合上述技术,提出了一些关于如何有效利用这些技术进行大规模模型训练的一般建议 。
更多推荐
所有评论(0)