A Survey of Large Language Models
题目:大语言模型综述
作者:Wayne Xin Zhao, Kun Zhou, Junyi Li et al.
来源:arXiv
单位:中国人民大学高瓴人工智能学院、中国人民大学信息学院
关键词:Large Language Models; Emergent Abilities; Adaptation Tuning; Utilization; Alignment; Capacity Evaluation
资源库:https://github.com/RUCAIBox/LLMSurvey
参考书目:《大语言模型》
文章目录
- A Survey of Large Language Models
- 摘要
- 1 引言
- 2 概述
- 2.1 LLMs的背景
- 2.1.1 LLMs扩展法则的形式化
- KM扩展法则
- Chinchilla扩展法则
- 2.1.2 扩展法则的讨论
- 可预测的扩展
- 任务层面的可预测性
- 2.1.3 LLMs的涌现能力
- 上下文学习
- 指令遵循
- 逐步推理
- 2.1.4 涌现能力与扩展法则的关系
- 2.1.5 LLMs的关键技术
- 扩展
- ==训练==
- 激发能力
- 对齐调整
- 工具操作
- 2.2 GPT系列模型的技术发展
- 2.2.1 早期探索
- GPT-1
- GPT-2
- 2.2.2 能力飞跃
- GPT-3
- 2.2.3 能力增强
- 代码数据训练
- 人类对齐
- 2.2.4 语言模型的里程碑
- ChatGPT
- GPT-4
- GPT-4V,GPT-4 Turbo and beyond
- 3 LLMS资源
- 3.1 公开可用的模型检查点或API
- 3.1.1 拥有数百亿个参数的模型
- 3.1.2 拥有数千亿个参数的模型
- 3.1.3 LLaMA模型系列
- 3.1.4 LLMs的公共API
- 3.2 常用的预训练语料库
- 3.2.1 书籍
- 3.2.2 CommonCrawl
- 3.2.3 Reddit链接
- 3.2.4 维基百科
- 3.2.5 代码
- 3.2.6 其他
- 3.3 常用的微调数据集
- 3.3.1 指令调整数据集
- NLP任务数据集
- 日常聊天数据集
- 合成数据集
- 3.3.2 对齐数据集
- 3.4 库资源
摘要
【引出语言智能的重要性】Ever since the Turing Test was proposed in the 1950s, humans have explored the mastering of language intelligence by machine. Language is essentially a complex, intricate system of human expressions governed by grammatical rules. It poses a significant challenge to develop capable artificial intelligence (AI) algorithms for comprehending and grasping a language. 【介绍语言模型的大致历程】As a major approach, language modeling has been widely studied for language understanding and generation in the past two decades, evolving from statistical language models to neural language models. 【由PLM引出LLM】Recently, pre-trained language models (PLMs) have been proposed by pretraining Transformer models over large-scale corpora, showing strong capabilities in solving various natural language processing (NLP) tasks. Since the researchers have found that model scaling can lead to an improved model capacity, they further investigate the scaling effect by increasing the parameter scale to an even larger size. Interestingly, when the parameter scale exceeds a certain level, these enlarged language models not only achieve a significant performance improvement, but also exhibit some special abilities (e.g., incontext learning) that are not present in small-scale language models (e.g., BERT). To discriminate the language models in different parameter scales, the research community has coined the term large language models (LLM) for the PLMs of significant size (e.g., containing tens or hundreds of billions of parameters). 【介绍LLM技术发展对领域的重要性】Recently, the research on LLMs has been largely advanced by both academia and industry, and a remarkable progress is the launch of ChatGPT (a powerful AI chatbot developed based on LLMs), which has attracted widespread attention from society. The technical evolution of LLMs has been making an important impact on the entire AI community, which would revolutionize the way how we develop and use AI algorithms. 【点题,概括本文主要工作】Considering this rapid technical progress, in this survey, we review the recent advances of LLMs by introducing the background, key findings, and mainstream techniques. In particular, we focus on four major aspects of LLMs, namely pre-training, adaptation tuning, utilization, and capacity evaluation. Furthermore, we also summarize the available resources for developing LLMs and discuss the remaining issues for future directions. This survey provides an up-to-date review of the literature on LLMs, which can be a useful resource for both researchers and engineers.
1 引言
【第一次看到有题记的文章】
“The limits of my language mean the limits of my world.” —Ludwig Wittgenstein
【通过阐述人类语言能力终其一生都在不断发展、机器难以理解人类语言的客观事实,从而说明让机器理解和运用人类语言十分具有挑战。】
【介绍语言模型LM并对其进行分类】
语言模型旨在对词序列的生成可能性进行建模,从而预测未来(或缺失)标记的概率。
-
统计语言模型(SLM):基本思想是基于马尔可夫假设建立单词预测模型,例如,基于最近的上下文预测下一个单词。
-
神经语言模型(NLM):通过神经网络来表征单词序列的概率。
-
预训练语言模型(PLM):首先预训练PLM网络(而不是学习固定的单词表示),然后根据特定的下游任务微调PLM网络来捕获上下文感知的单词表示。
-
大语言模型(LLM):研究人员发现,扩展PLM(例如,扩展模型大小或数据大小)通常会提高下游任务的模型容量(即遵循比例定律[30])。虽然缩放的主要是模型规模(具有相似的架构和预训练任务),但这些大规模PLM显示出与较小PLM不同的行为,并在解决一系列复杂任务时显示出令人惊讶的能力(称为涌现能力emergent abilities[31])。
【对上述四类语言模型做总结。阐述语言模型逐渐从一个解决特定任务的单任务solver,逐步发展成为通用任务solver。】
【阐述LLM和PLM之间的三个主要区别】
- LLMs表现出的涌现能力是语言模型在复杂任务中表现的关键,使人工智能算法前所未有地强大和有效。
- LLMs将彻底改变人类开发和使用人工智能算法的方式。与小型PLM不同,访问LLM的主要方法是通过提示界面(如GPT-4 API)。人类必须理解LLM如何工作,并以LLM可以遵循的方式格式化他们的任务。
- LLMs的开发不再明确区分学术和工业。LLMs的训练需要在大规模数据处理和分布式并行训练方面的丰富实践经验。为了开发有效的LLM,研究人员必须解决复杂的工程问题,与工程师一起工作或者成为工程师。
【阐述LLM对AI社区产生的重大影响,例如信息检索IR领域的New Bing、GPT-4辅助解决CV领域任务、微软的Copilot实现办公自动化等。】
【LLM仍有许多值得探索的问题】
- 涌现能力为什么出现在LLM而不是PLM中。缺乏对促成LLM卓越能力的关键因素的深入、详细的调查。研究LLM何时以及如何获得这种能力是很重要的[47]。
- 由于对计算资源的巨大需求,LLM主要是由工业界训练的,许多细节(如数据收集和清理)并不向公众透露。学术界很难训练有效的LLM,并且难以对用于训练LLM的各种策略的效果进行消融研究。
- 将LLM与人类价值观或偏好结合起来是一项挑战。尽管LLM功能强大,但LLM也可能产生有毒、虚假或有害的内容。它需要有效和高效的控制方法来消除使用LLM的潜在风险[46]。
【介绍本文主要工作】
- 预训练(如何预训练有能力的LLM)
- 调整(如何有效地调整预训练的LLM以更好地使用)
- 利用(如何使用LLM解决各种下游任务)
- 能力评估(如何评估LLM的能力和现有的经验发现)
【文章组织架构安排】
-
第2节介绍了LLM的背景和GPT系列模型的演变
-
第3节总结了提出的LLM的可用资源。
-
第4、5、6和7节分别从预训练、调整、利用和能力评估四个方面回顾和总结了最近的进展。
-
第8节讨论了提示设计的实践指南
-
第9节回顾了LLM在几个代表性领域的应用。
-
第10节总结了调查的主要结果,并讨论了未来工作的剩余问题。
2 概述
2.1 LLMs的背景
通常,大型语言模型(LLM)是指包含数千亿(或更多)参数的变压器语言模型4,这些模型是在海量文本数据上训练的[32],如GPT-3 [55],PaLM [56],Galactica [35]和LLaMA [57]。LLM表现出很强的理解自然语言和解决复杂任务的能力(通过文本生成)。为了快速了解LLMs的工作原理,本部分介绍了LLMs的基本背景,包括标度律、涌现能力和关键技术。
2.1.1 LLMs扩展法则的形式化
目前,LLM主要建立在Transformer架构上[22],其中多头注意力层堆叠在非常深的神经网络中。广泛的研究表明,扩展可以大大提高LLM的模型能力[26,55,56]。因此,建立一种定量的方法来描述扩展效果是很有用的。
KM扩展法则
【Nc、Dc、Cc以及αN、αD、αC都是常数,公式表明随着N、D、C的增大,损失L(N)、L(D)、L©会变小。】
Kaplan等人[30]首先提出对NLM的模型性能与三个主要因素的幂律关系进行建模,即模型大小(N)、数据集大小(D)和训练计算量©。给定算力预算c,他们根据经验提出了三个基本的扩展法则公式:
其中,L(·)表示以nat为单位的交叉熵损失。Nc、Dc和Cc是实验性的常数数值,分别对应于非嵌入参数数量、训练数据数量和实际的算力开销。OpenAI的后续研究[58]表明,语言建模损失可以分解为两部分,即不可约损失(真实数据分布的熵)和可约损失(真实分布和模型分布之间KL散度的估计)。这三个定律是通过在某些假设(例如,一个因素的分析不应受到其他两个因素的阻碍)下,用不同的数据大小(22M至23B令牌)、模型大小(768M至1.5B非嵌入参数)和训练计算来拟合模型性能而得出的。
Chinchilla扩展法则
Hoffmann等人[34]他们通过改变更大范围的模型大小(70M至16B)和数据大小(5B至500B令牌)进行了严格的实验,并拟合了类似的扩展法则,但系数不同,如下所示[34]:
随着算例预算的增加,KM扩展法则倾向于在模型大小上分配比数据大小更大的预算,而Chinchilla扩展法则认为这两个大小应该以相等的比例增加,即等式(3)中的a和b具有相似的值。
2.1.2 扩展法则的讨论
可预测的扩展
扩展法则可用于指导LLM的训练
- 对于大模型,严格检验各种训练技巧或变体是不可行的,如果从小模型中获得的经验也可以应用于大型模型,那将是非常有帮助的。
- 随着规模的扩展,即使模型的损失趋于平稳,表示质量或语义内容仍然可以有效地提高[58]。为了进一步探索扩展效应,一个潜在的问题是用于训练LLM的可用数据量实际上是有限的。随着模型规模的不断增加,LLM的公共文本数据将很快“耗尽”[60]。因此,研究扩展法则如何应用于数据受限的情况[61]将是有意义的。
任务层面的可预测性
语言模型损失可以被认为是整体模型能力的一般度量,然而,语言模型损失的直接减少并不总是表明下游任务中模型性能的改善。特别是,一些任务会出现逆扩展现象[62]。总体而言,探索和描述任务层面的扩展法则更加困难,因为它可能还依赖于任务相关的信息(如任务指标、任务难度等)。此外,有些重要能力(例如上下文学习能力 [23])根据扩展法则是不可预测的,只有当模型大小超过一定规模时才会出现。
2.1.3 LLMs的涌现能力
LLM的涌现能力被正式定义为“在小模型中不存在但在大模型中出现的能力”[31],这是LLM区别于先前PLM的最显著特征之一。
上下文学习
上下文学习能力在GPT-3的论文中 [23] 被正式提出。具体方式为,在提示中为语言模型提供自然语言指令和多个任务示例(Demonstration),无需显式的训练或梯度更新,仅输入文本的单词序列就能为测试样本生成预期的输出。
指令遵循
指令遵循能力是指大语言模型能够按照自然语言指令来执行对应的任务 [28, 66, 67]。为了获得这一能力,通常需要使用自然语言描述的多任务示例数据集进行微调,称为指令微调(Instruction Tuning)或监督微调(Supervised Fine-tuning)。通过指令微调,大语言模型可以在没有使用显式示例的情况下按照任务指令完成新任务,有效提升了模型的泛化能力。
逐步推理
大语言模型则可以利用思维链 (Chain-of-Thought, CoT)提示策略 [33] 来加强推理性能。具体来说,大语言模型 可以在提示中引入任务相关的中间推理步骤来加强复杂任务的求解,从而获得更 为可靠的答案。
2.1.4 涌现能力与扩展法则的关系
扩展法则和涌现能力提供了理解大模型优于小模型的两个视角:持续改进与急剧的性能飞跃。
一个流行的推测是,涌现能力可能部分归因于特殊任务的评估设置(例如,不连续的评估指标)[70,71]:当评估指标相应地改变时,应急能力曲线的锐度将消失。然而对于大多数任务,我们的评价标准都是模型完成了或没有完成。很少会在两个都没有完成的情况下判断模型哪次完成的更好些。
此外,作者通过人类常有“顿悟”的现象来类比大模型中出现的涌现能力。
2.1.5 LLMs的关键技术
介绍(可能)导致LLMs成功的几个重要技术。
扩展
由于计算预算通常是有限的,因此可以进一步利用扩展法则来进行更高效的计算资源分配。例如,在相同的计算预算下,通过增加数据规模,Chinchilla(具有更多训练词元)的表现优于其对应模型Gopher(具有更大的模型大小)[34]。
训练
由于庞大的模型规模,成功训练一个有能力的LLM是非常有挑战性的。学习线性最小二乘模型的网络参数需要分布式训练算法,其中经常联合使用各种并行策略。为了支持分布式训练,已经发布了几个优化框架来促进并行算法的实现和部署,例如DeepSpeed [74]和Megatron-LM[75–77]。此外,优化技巧对于训练稳定性和模型性能也很重要,例如,重启以克服训练损失峰值[56]和混合精度训练[78]。最近,GPT-4 [46]建议提出特殊的基础设施和优化方法,用小得多的模型可靠地预测大模型的性能。
激发能力
可以设计合适的任务说明或具体的情境学习策略来激发LLM解决未见任务的能力。例如,通过包含中间推理步骤(思维链)、指令微调等。
对齐调整
有必要使LLMs与人类价值观保持一致,例如,乐于助人、诚实和无害。为此,InstructGPT [66]设计了一种有效的利用了带有人类反馈的强化学习技术的调整方法,使LLM能够遵循预期的指令,产生符合人类价值观的、无害的响应。
工具操作
LLM被训练为大规模纯文本语料库上的文本生成器,从而在不能以文本形式最佳表达的任务(例如,数值计算)上表现不佳。此外,他们的能力也仅限于训练前的数据,例如,无法获取最新信息。为了解决这些问题,最近提出的技术是采用外部工具来弥补LLM的不足[80,81]。例如,LLM可以利用计算器进行精确计算[80],并使用搜索引擎检索未知信息[81]。
2.2 GPT系列模型的技术发展
GPT模型的基本原理是通过语言建模将世界知识压缩到只有解码器的转换器模型中,这样它可以恢复(或记忆)世界知识的语义,并充当通用任务求解器。
2.2.1 早期探索
GPT-1
2017年,谷歌推出了Transformer模型[22]
2018年,OpenAI团队发布了第一个GPT-1 [122],并创造了缩写术语GPT作为模型名称,代表生成性预训练。
GPT-2
遵循GPT-1的类似架构,GPT-2 [26]将参数规模增加到1.5B,使用大型网页数据集WebText对其进行训练。GPT-2没有采用显式的微调,并将求解一个任务的过程就归结为一个生成求解文本的单词预测问题。
OpenAI 团队在 GPT-2 的论文中还尝试解释无监督预训练在下游任务中取得良好效果的原因:“由于特定任务的有监督学习目标与无监督学习目标(语言建模) 在本质上是相同的(预测下一个词元),主要区别就在于它们只是在全部训练数据的子集上进行优化,因此对于特定下游任务而言,优化无监督的全局学习目标本质上也是在优化有监督的任务学习目标” [26]。对这一说法的通俗理解是,语言模型将每个(自然语言处理)任务都视为基于世界文本子集的下一个词预测问题。 因此,如果无监督语言建模经过训练后具有足够的能力复原全部世界文本,那么本质上它就能够解决各种任务。
2.2.2 能力飞跃
产能飞跃。尽管GPT-2旨在成为一个“无监督的多任务学习者”,但与监督微调的最先进方法相比,它的整体性能较差。因为它有一个相对较小的模型大小,所以它在下游任务中得到了广泛的微调,尤其是对话任务[124,125]。GPT-3以GPT-2为基础,通过扩展(几乎相同的)生成式预培训架构实现了关键的能力飞跃。
GPT-3
2020年,GPT-3 [55]发布,将模型参数扩展至更大的尺寸175B。在GPT-3的论文中,它正式引入了上下文学习(ICL)17的概念,这种概念以few-或zero-shot的方式利用了LLM。ICL可以教(或指导)LLM理解自然语言文本形式的任务。
2.2.3 能力增强
OpenAI探索了两种改进GPT-3模型的主要方法,即代码数据的训练和与人类偏好的对齐。并将改进后的模型命名为GPT-3.5
代码数据训练
原始GPT-3模型(在纯文本上预先训练)的主要限制在于缺乏对复杂任务的推理能力,例如,代码补全和解决数学问题。
- 2021年7月,OpenAI发布Codex [105],这是一个在GitHub代码的大型语料库上微调的GPT模型。它证明了Codex可以解决非常困难的编程问题,并且在解决数学问题时也导致了显著的性能提高[126]。
- GPT-3.5模型是基于基于代码的GPT模型(即code-davinci-002)开发的,这表明对代码数据的训练对于提高GPT模型的模型能力,尤其是推理能力是非常有用的实践。此外,还有一种推测认为,对代码数据的训练可以极大地提高LLMs的思维链提示能力[47],但这仍然值得进一步研究和更彻底的验证。
人类对齐
- 2017年(或更早),OpenAI发布了一篇题为“Learning from Human Preferences”,描述了一项应用强化学习(RL)从人类标注的偏好数据中学习的工作[79] (类似于图12中InstructGPT的比对算法中的奖励训练步骤)。
- 2017年7月,最近策略优化(PPO) [128]的论文发表,它现在已经成为从人类偏好中学习的基础RL算法[66]。
- 2020年1月晚些时候,GPT-2使用上述RL算法[79,128]进行了微调,该算法利用人类的偏好来提高GPT-2在NLP任务上的能力。
- 2022年1月,OpenAI推出InstructGPT [66],以改进GPT-3模型与人类对齐的能力,正式建立了基于人类反馈的三阶段强化学习(RLHF)算法。
- OpenAI在一篇技术文章[130]中描述了他们的对齐研究方法,该文章总结了三个有前途的方向:
- 使用人类反馈训练AI系统
- 协助人类评估
- 进行对齐研究
2.2.4 语言模型的里程碑
ChatGPT
2022年11月,OpenAI发布了基于GPT模型(GPT-3.5和GPT-4)的对话模型ChatGPT。正如官方博客文章介绍的[131],ChatGPT的训练方式与InstructGPT类似(在原帖中称为“InstructGPT的同胞模型”),同时专门针对对话进行了优化。
GPT-4
-
2023年3月,GPT-4 [46]发布,它将文本输入扩展到了多模态信号。
-
由于六个月的迭代对齐(在RLHF训练中有额外的安全奖励信号),GPT-4对恶意或挑衅性查询的响应更加安全。
-
GPT-4是在完善的深度学习基础设施上开发的,具有改进的优化方法。他们引入了一种称为可预测扩展的新机制,这种机制可以在模型训练期间使用少量算力来准确预测最终性能。
GPT-4V,GPT-4 Turbo and beyond
2023年9月,GPT-4V发布,其重点是GPT-4视觉能力的安全部署。在GPT-4V的系统说明(system card)[133]中,广泛讨论了与视觉增强输入相关的风险评估和缓解。
2023年11月,GPT-4 Turbo发布,它具有改进的模型容量(比GPT4更强大)、扩展的知识源(截至2023年4月)、更长的上下文窗口(高达128K)、优化的模型性能(更便宜的价格)和其他有用的功能更新(函数调用、可重复的输出等)。这些极大加强了以 GPT 模型所形成的大模型应用生态系统。
3 LLMS资源
在这一节中,我们简要总结了用于开发LLMs的公开可用资源,包括模型检查点(或API)、语料库和库。
3.1 公开可用的模型检查点或API
3.1.1 拥有数百亿个参数的模型
10B到20B:
- FlanT5 (11B版本)可以作为研究指令调优的首要模型,因为它从三个方面[69]探索指令调优:增加任务数量,缩放模型大小,以及使用思维链提示数据进行微调。
- CodeGen (11B版本)作为一个为生成代码而设计的自回归语言模型,可以被认为是探索代码生成能力的一个很好的候选。它还介绍了一个新的基准MTPB [86],专门用于多回合程序综合,由115个专家生成的问题组成。要解决这些问题,需要LLM掌握足够的编程知识(如数学、数组运算和算法)。
- CodeGen2 [97]已经发布,以探索模型架构、学习算法和数据分布的选择对模型的影响。
- 作为另一个专门研究编码能力的LLM,StarCoder [98]也取得了优异的成绩。至于多语言任务,mT0 (13B版本)可能是一个很好的候选模型,它已经在带有多语言提示的多语言任务上进行了微调。
- PanGu-α [84]在基于深度学习框架MindSpore [136]开发的零镜头或少镜头设置下的中文下游任务中显示出良好的性能。注意,盘古-α [84]持有多个版本的模型(最多200B个参数),而最大的公开版本有13B个参数。
更多参数模型:
- LLaMA (65B版本)[57]包含的参数大约是其他模型的五倍,在与指令跟随相关的任务中表现出优异的性能。
- LLaMA2 [99] (包含最大版本的70B参数)在人类反馈强化学习(RLHF)方面进行了更多的探索,并开发了一个名为LLaMA-chat的面向聊天的版本,该版本在一系列有用性和安全性基准上普遍优于现有的开源模型。由于其开放性和有效性,LLaMA吸引了研究界的极大关注,许多研究[137–140]致力于微调或持续预训练其不同的模型版本,以实现新的模型或工具。
- Falcon 隼[135] (包含最大版本的40B参数) 作为另一个开源LLM,也在开放基准上取得了非常优异的性能。它的特点是更仔细的数据清洗过程,以准备预训练数据(与公共共享数据集RefinedWeb [141])。
通常,这种规模的预训练模型需要数百甚至数千个GPU或TPU。例如,GPT-NeoX-20B使用12个超微服务器,每个服务器配备8个NVIDIA A100-sxm 4-40GB GPU,而LLaMA使用2048个A100-80G GPU,如其原始出版物中所述。
3.1.2 拥有数千亿个参数的模型
对于这个类别的模型,只有少数模型公开发布。例如,OPT [90]、OPT-IML [95]、BLOOM [78]和BLOOMZ [94]具有与GPT-3 (175B版本)几乎相同数量的参数,而GLM [93]和Galactica [35]分别具有130B和120B参数。
这种规模的模型通常需要数千个GPU或TPU来训练。例如,OPT (175B版本)使用992个A100-80GB GPU,而GLM (130B版本)使用96个英伟达DGX-A100 (8x40G) GPU节点的集群。
3.1.3 LLaMA模型系列
LLaMA模型系列[57]由Meta AI于2023年2月推出,由四种尺寸(7B、13B、30B和65B)组成。大量研究人员通过指令调整或连续预训练扩展了LLaMA模型。特别是,由于计算成本相对较低,指令调优LLaMA已经成为开发定制或专用模型的主要方法。
3.1.4 LLMs的公共API
API不是直接使用模型副本,而是为普通用户提供了一种更方便的方式来使用LLM,而不需要在本地运行模型。
-
GPT-3系列API:
- ada
- babbage 对应GPT-3 (1B)
- curie 对应GPT-3 (6.7B)
- davinci (GPT-3系列中最强大的版本,对应GPT-3 (175B))
- text-ada-001
- text-babbage-001
- text-curie-001。
-
Codex [105]相关的API:
- code-cushman-001(Codex(12B)[105]的强大多语言版本)
- code-davinci-002。
-
GPT-3.5系列API:
- code-davinci-002
- text-davinci-002
- text-davinci-003
- GPT-3.5-turbo。
-
GPT-4系列API:
- GPT-4
- GPT-4-32k
- GPT-4-1106-preview(即GPT-4 Turbo)
- GPT-4-vision-preview(即GPT-4 Turbo with vision,一种多模态模型)。
3.2 常用的预训练语料库
根据内容类型,语料库分为六类:书籍、CommonCrawl、Reddit链接、维基百科、代码和其他。
3.2.1 书籍
-
BookCorpus[153]是以前的小规模模型(如GPT [122]和GPT-2 [26])中常用的数据集,由超过11, 000本涵盖广泛主题和体裁(如小说和传记)的图书组成。
-
Project Gutenberg[154],由超过70, 000本文学书籍组成,包括小说、散文、诗歌、戏剧、历史、科学、哲学和公共领域中的其他类型的作品。它是目前最大的开源图书收藏之一,用于训练MT-NLG[113]和LLaMA[57]。
-
Books1 [55]和Books2 [55],它们比BookCorpus大很多,用于训练GPT-3 [55],但至今没有公开发布。
3.2.2 CommonCrawl
-
CommonCrawl [163]是最大的开源web数据库之一,包含一个拍字节(1P=1000T)规模数据量,已被广泛用作现有LLM的训练数据。
-
基于CommonCrawl,现有工作中常用的过滤数据集有四个:
- Colossal Clean Crawled Corpus (C4) [82] (以下是其变体)
- en (806G)
- en.noclean (6T)
- realnewslike (36G)
- webtextlike (17G)
- multilingual (38T)
- CCStories [155],其中的内容以类似故事的方式制作。
- CC-News [27],新闻语料库。
- RealNews [156],新闻语料库。
- Colossal Clean Crawled Corpus (C4) [82] (以下是其变体)
3.2.3 Reddit链接
Reddit是一个社交媒体平台,用户可以提交链接和文本帖子,其他人可以通过“向上投票”或“向下投票”进行投票。高投票率的帖子通常被认为是有用的,可以用来创建高质量的数据集。
- WebText [26]是一个著名的语料库,由来自Reddit的高投票链接组成,但它不是公开可用的。
- OpenWebText [157] (WebText的开源替代物)。
- PushShift.io [158],这是一个实时更新的数据集,由Reddit自创建之日起的历史数据组成。Pushshift不仅提供月度数据转储,还提供有用的实用工具来支持用户对整个数据集进行搜索、汇总和初步调查。这使得用户很容易收集和处理Reddit数据。
3.2.4 维基百科
维基百科[159]是一个在线百科全书,维基百科有多种语言版本,因此可以在多语言环境中使用。
3.2.5 代码
- 现有的工作主要是从互联网上抓取开源的授权代码。两个主要来源是开源许可下的公共代码库(例如GitHub)和与代码相关的问答平台(例如StackOverflow)。-
- Google已经公开发布了BigQuery数据集[160],其中包括大量各种编程语言的开源许可代码片段,作为代表性的代码数据集。
3.2.6 其他
- Pile [161]是一个大规模、多样化和开源的文本数据集,由来自多个来源的超过800GB的数据组成,包括书籍、网站、代码、科学论文和社交媒体平台。它由22个不同的高质量子集构成。
- ROOTS [162]由各种更小的数据集(总共1.61 TB的文本)组成,覆盖了59种不同的语言(包含自然语言和编程语言),这些语言已经被用于训练BLOOM [78]。
3.3 常用的微调数据集
在预训练之后,需要进一步微调LLM以增强模型容量,这通常涉及两个主要步骤,即指令调优(监督微调)和对齐调优。在本节中,我们主要讨论两种调优方法的相关可用数据集,更多算法细节可在第5节中找到。
3.3.1 指令调整数据集
在预训练之后,指令调整(也称为监督微调)是增强或解锁LLM的特定能力(例如,指令跟随)的重要方法。根据格式化指令实例的构造方法将其分为三种主要类型,即NLP任务数据集、日常聊天数据集和合成数据集。
NLP任务数据集
这种数据集是基于收集的NLP任务数据集(例如,文本分类和摘要)用相应的自然语言任务描述来格式化的。在这一类别中,P3 [182]和FLAN [67,183]是两个广泛用于指令调整的数据集。
日常聊天数据集
这种数据集是基于真实用户对话构建的,其中查询由人类提出,响应主要由人类标注器或LLM生成(例如,ChatGPT,GPT-4)。对话类型包括开放式生成、问题回答、头脑风暴和聊天。在这个类别中,ShareGPT [148]、OpenAssistant [173]和Dolly [172]是LLM微调的三个常用数据集。
合成数据集
这种类型的数据集通常由指令LLM根据预定义的指导规则或方法构建。在这一类别中,Self-Instruct52K [143]、Alpaca[142]和Baize[175]是LLM的三个常用合成数据集。
3.3.2 对齐数据集
除了指令调整之外,构建高质量的数据集以将LLM与人类价值观和偏好(例如,乐于助人、诚实和无害)相匹配也很重要。在本节中,我们介绍几个广泛用于比对调整的数据集,包括HH-RLHF [170],SHP [177],PKU-SafeRLHF [181],Stack Exchange Preferences[178]和Sandbox Alignment Data[179]。
-
HH-RLHF [170]包含大约169K个实例,可以分为两个部分,分别关注LLM的有益性和无害性。每个实例都是众包工作者和聊天模型之间关于寻求帮助、建议或完成任务的开放式对话。聊天模型为每个用户查询提供两个响应,更有用或更有害的响应将被选为注释。
-
SHP [177]关注的是回应的有用性。它包括385,000个人类对18个不同主题领域的问题/指令的集体偏好,涵盖从烹饪到法律咨询的主题。每个实例都是一个Reddit帖子,包含一个问题或说明以及一对顶级评论,其中一个被Reddit用户认为更可取,另一个被认为不太有用。与HH-RLHF [170]不同,SHP的数据包括自然发生的和人类书写的反应。
-
PKU-SafeRLHF [181]包含超过330,000例专家比较数据,集中在有益和无害方面。数据集中的每个实例包括一个问题和两个回答,伴随着每个回答的安全标签和两个回答之间根据有益和无害的两个偏好注释。一项应对措施的无害性表明其在所有14个伤害类别中的分类为风险中性,而一项应对措施的有用性则根据其解决问题的有效性进行评估。
-
Stack Exchange Preferences [178]关注答案的有用性。它包含来自Stack Overflow的大约1000万个问题和答案。每个实例由一个问题和两个以上相应的答案组成。每一个答案都标注了一个基于投票计算的分数和一个表示它是否被选中的标签。
-
Sandbox Alignment Data[179]是一个比对数据集,包含来自LLM而非人类的反馈。它来自一个名为沙箱的虚拟交互环境,模型在沙箱中模拟与其他模型的社交互动,并根据其他模型的反馈修改响应。该数据集包含169K个实例,每个实例由一个社会查询、几个响应和来自其他模型的相应评级组成。
3.4 库资源
在这一部分,我们简要介绍了一系列可用于开发LLM的库。
-
Transformers [187]是一个使用Transformer架构构建模型的开源Python库,由Hugging Face开发和维护。
-
DeepSpeed [74]是微软开发的深度学习优化库(兼容PyTorch),它为分布式训练提供了各种优化技术的支持,如内存优化(ZeRO技术、梯度检查点)和流水线并行。
-
Megatron-LM[75–77]是NVIDIA开发的深度学习库,用于训练LLMs。它还为分布式训练提供了丰富的优化技术,包括模型和数据并行、混合精度训练和FlashAttention。这些优化技术可以极大地提高训练效率和速度,实现跨GPU的高效分布式训练。
-
JAX [188]是由谷歌开发的高性能机器学习算法的Python库,允许用户通过硬件加速(例如,GPU或TPU)轻松地在阵列上执行计算。它支持在各种设备上进行高效计算,还支持多种特色功能,如自动微分和实时编译。
-
Colossal-AI[189]是由HPC-AI Tech开发的深度学习库,用于训练大规模人工智能模型。它是基于PyTorch实现的,支持大量并行训练策略。此外,它还可以使用PatrickStar [190]提出的方法优化异构内存管理。
-
BMTrain [191]是OpenBMB开发的高效库,用于以分布式方式训练具有大规模参数的模型,强调代码简单性、低资源和高可用性。BMTrain已经将几种常见的LLM(例如Flan-T5 [69]和GLM [93])整合到其模型中心,开发人员可以直接使用这些模型。
-
FastMoE [192]是MoE(即混合专家)模型的专门培训库。它是基于PyTorch开发的,在其设计中优先考虑效率和用户友好性。FastMoE简化了将Transformer模型转换为MoE模型的过程,并在训练期间支持数据并行和模型并行。
-
vLLM [193]是一个快速、内存高效且易于使用的库,用于LLM推理和服务。为了实现快速推理,它特别优化了高服务吞吐量、使用PagedAttention [193]的有效注意力内存管理、连续批处理和优化的CUDA内核。此外,vLLM还支持各种解码算法、张量并行和流输出。为了便于与其他系统集成,vLLM对HuggingFace模型的使用很友好,并且还提供了OpenAI兼容的API服务器。
-
DeepSpeed-MII [194]也是一个由DeepSpeed [74]开发的高效内存Python库。它旨在通过优先考虑高吞吐量、低延迟和成本效益来民主化LLMs推理。DeepSpeed-MII通过利用四项基本技术实现了加速的文本生成推理:分块KV缓存、连续批处理、动态SplitFuse和高性能CUDA内核。它目前支持三种流行模型架构的13,000多种模型,如LLaMA [57]、Mistral [195]和OPT [90]。
-
DeepSpeed-Chat [196]是一个快速、经济且易于使用的系统框架,能够在模型训练期间集成完整的RLHF流程。它具有三个主要功能
(1)它简化了ChatGPT类模型的训练和推理过程,使得能够使用简单的脚本来实现多个训练或推理步骤;
(2)它复制了InstructGPT [66]的训练模式,并为三个训练步骤(即SFT、奖励模型微调和RLHF)提供了完整的流水线;
(3)它将Deepspeed的训练引擎和推理引擎集成到一个统一的混合引擎(Deepspeed HE)中,用于RLHF训练,可以实现训练和推理模式之间的无缝切换,并利用Deepspeed推理的各种优化。
除了上述库资源,现有的深度学习框架(例如PyTorch [197],TensorFlow [198],MXNet [199],PaddlePaddle [200],MindSpore [136]和OneFlow [201])也提供了对并行算法的支持,这些算法通常用于训练大规模模型。