自从图灵测试在20世纪50年代提出以来,人类一直在探索机器掌握语言智能的方法。语言本质上是一个由语法规则控制的复杂、精细的人类表达系统。开发能够理解和掌握语言的能力强大的人工智能(AI)算法是一个重大挑战。作为一种主要方法,语言建模在过去二十年中已经被广泛研究,从统计语言模型发展到神经语言模型。最近,通过在大规模语料库上预训练Transformer模型,提出了预训练语言模型(PLMs),在解决各种自然语言处理(NLP)任务方面表现出强大的能力。由于研究人员发现模型扩展可以提高模型容量,他们进一步通过将参数规模增加到更大的尺寸来研究扩展效果。有趣的是,当参数规模超过一定水平时,这些扩大的语言模型不仅可以实现显著的性能提升,而且还表现出一些特殊的能力(例如上下文学习),这些能力在小规模语言模型(例如BERT)中不存在。为了区分不同参数规模的语言模型,研究界为具有显著规模(例如包含数十亿或数百亿个参数)的PLMs创造了大型语言模型(LLM)这个术语。最近,学术界和工业界对LLMs的研究取得了很大进展,其中一个显著的进展是ChatGPT的推出(一种基于LLMs开发的强大AI聊天机器人),引起了社会的广泛关注。LLMs的技术进化对整个AI社区产生了重要影响,这将革命性地改变我们开发和使用AI算法的方式。考虑到这种快速的技术进步,在本次调查中,我们通过介绍背景、关键发现和主流技术,回顾了LLMs的最新进展。特别是,我们关注LLMs的四个主要方面,即预训练、适应调整、利用和容量评估。此外,我们还总结了开发LLMs的可用资源,并讨论了未来方向的剩余问题。本次调查提供了LLMs文献的最新综述,可供研究人员和工程师使用。
索引词 - 大型语言模型;新兴能力;适应调整;使用场景;对齐;能力评估
对齐含义:在自然语言处理中,对齐(Alignment)通常指将源语言和目标语言之间的单词或短语进行匹配,以便进行翻译或其他语言处理任务。对齐可以是单向的,也可以是双向的。在双向对齐中,源语言和目标语言之间的单词或短语是相互匹配的,这有助于提高翻译的准确性和流畅性。
原论文地址:https://arxiv.org/abs/2303.18223
语言是人类表达和交流的重要能力,从儿童早期开始发展,并在一生中不断演变 [1, 2]。然而,机器无法自然地掌握理解和以人类语言形式进行交流的能力,除非配备强大的人工智能(AI)算法。实现这一目标,使机器能够像人类一样阅读、写作和交流,一直是一个长期的研究挑战 [3]。
从技术上讲,语言建模(LM)是推进机器语言智能的主要方法之一。通常,LM旨在对单词序列的生成可能性进行建模,以便预测未来(或缺失)标记的概率。LM的研究在文献中受到广泛关注,可以分为四个主要的发展阶段:
在现有文献中,PLM已经得到广泛讨论和调查[36-39],而LLM很少以系统的方式进行审查。为了激发我们的调查,我们首先强调LLM和PLM之间的三个主要区别。首先,LLM显示出一些令人惊讶的 emergent abilities,这些能力在以前较小的PLM中可能没有被观察到。这些能力对于语言模型在复杂任务上的表现至关重要,使得AI算法变得前所未有的强大和有效。其次,LLM将彻底改变人类开发和使用AI算法的方式。与小型PLM不同,访问LLM的主要方法是通过提示接口(例如,GPT-4 API)。人类必须理解LLM的工作原理,并以LLM可以遵循的方式格式化他们的任务。第三,LLM的开发不再区分研究和工程。LLM的训练需要大规模数据处理和分布式并行训练的广泛实践经验。为了开发有能力的LLM,研究人员必须解决复杂的工程问题,与工程师合作或成为工程师。
如今,LLM对AI社区产生了重大影响,ChatGPT和GPT-4的出现引发了对人工通用智能(AGI)可能性的重新思考。OpenAI发表了一篇名为“规划AGI及其以上”的技术文章,讨论了接近AGI的短期和长期计划[40],最近的一篇论文则认为GPT-4可能被视为AGI系统的早期版本[41]。LLM的快速进展正在彻底改变AI的研究领域。在NLP领域,LLM可以作为通用的语言任务求解器(在某种程度上),研究范式已经转向使用LLM。在IR领域,传统的搜索引擎受到通过AI聊天机器人(即ChatGPT)进行新型信息寻求方式的挑战,New Bing3提出了一种基于LLM增强搜索结果的初步尝试。在CV领域,研究人员试图开发类似于ChatGPT的视觉语言模型,以更好地服务于多模态对话[42-45],而GPT-4 [46]通过整合视觉信息支持多模态输入。这股新技术浪潮有可能引领基于LLM的实际应用的繁荣生态系统。例如,Microsoft 365正在通过LLM(即Copilot)赋能办公自动化,OpenAI支持在ChatGPT中使用插件来实现特殊功能。
尽管LLM取得了进展和影响,但LLM的基本原理仍未得到很好的探索。首先,令人困惑的是,为什么 emergent abilities 出现在LLM中,而不是较小的PLM中。作为一个更一般的问题,缺乏对促进LLM卓越能力的关键因素进行深入详细的研究。研究LLM何时以及如何获得这些能力是很重要的[47]。虽然对这个问题有一些有意义的讨论[31, 47],但需要更有原则性的调查来揭示LLM的“秘密”。其次,对于研究界来说,训练有能力的LLM是困难的。由于计算资源的巨大需求,进行重复的、消融的研究以调查各种训练LLM策略的效果非常昂贵。事实上,LLM主要是由工业界进行培训,许多重要的培训细节(例如数据收集和清理)并未向公众公开。第三,将LLM与人类价值观或偏好对齐是具有挑战性的。尽管具有能力,LLM也可能产生有毒、虚构或有害的内容。需要有效和高效的控制方法来消除使用LLM的潜在风险[46]。
面对机遇和挑战,需要更多关注LLM的研究和开发。为了提供对LLM的基本理解,本调查从四个主要方面,包括预训练(如何预训练有能力的LLM)、适应调整(如何从有效性和安全性两个方面有效地调整预训练的LLM)、利用(如何使用LLM解决各种下游任务)和能力评估(如何评估LLM的能力和现有的经验发现),对LLM的最新进展进行了文献综述。我们彻底梳理了文献,并总结了LLM的关键发现、技术和方法。为此,我们还创建了一个GitHub项目网站,收集了LLM的支持资源,链接为https://github.com/RUCAIBox/LLMSurvey。我们也注意到了几篇关于PLM或LLM的相关综述文章[32, 36, 38, 39, 43, 48-54]。这些论文要么讨论PLM,要么讨论LLM的某些特定(或一般)方面。与它们相比,我们关注开发和使用LLM的技术和方法,并提供相对全面的LLM重要方面的参考。
本调查的其余部分组织如下:第2节介绍LLM的背景,包括术语、设置、资源和组织大纲,接着在第3节总结了开发LLM的可用资源。第4、5、6和7节分别从预训练、适应调整、利用和能力评估四个方面回顾和总结了最近的进展。最后,在第8节中,我们总结了主要发现,并讨论了未来工作的剩余问题。
在本节中,我们介绍LLM的背景,并总结GPT系列模型的技术演进。
通常,大型语言模型(LLM)是指包含数百亿(或更多)参数的Transformer语言模型,这些模型是在大规模文本数据[32]上进行训练的,例如GPT-3 [55]、PaLM [56]、Galactica [35]和LLaMA [57]。LLM表现出强大的理解自然语言和解决复杂任务(通过文本生成)的能力。为了快速了解LLM的工作原理,本部分介绍LLM的基本背景,包括缩放定律、 emergent abilities 和关键技术。
LLM的缩放定律。目前,LLM主要建立在Transformer架构[22]之上,其中多头注意力层被堆叠在非常深的神经网络中。现有的LLM采用类似的Transformer架构和预训练目标(例如语言建模)作为小型语言模型。然而,LLM在模型大小、数据大小和总计算量方面大幅度缩放(数量级)。广泛的研究表明,缩放可以大大提高LLM的模型容量[26, 55, 56]。因此,建立一个定量的方法来表征缩放效应是有用的。接下来,我们介绍两个代表性的Transformer语言模型缩放定律[30, 34]。
KM缩放定律。2020年,Kaplan等人[30](OpenAI团队)首次提出了神经语言模型的模型性能与三个主要因素(即模型大小(N)、数据集大小(D)和训练计算量(C))之间的幂律关系。给定一个计算预算c,他们凭经验提出了三个基本公式来描述缩放定律:
其中L(·)表示以nats为单位的交叉熵损失。这三个定律是通过拟合具有不同数据大小(22M到23B个标记)、模型大小(768M到1.5B个非嵌入参数)和训练计算量的模型性能得出的,在一些假设下(例如,一个因素的分析不应受到其他两个因素的瓶颈限制)。他们表明,模型性能与这三个因素有强烈的依赖关系。
Chinchilla缩放定律。作为另一个代表性研究,Hoffmann等人[34](Google DeepMind团队)提出了一种替代形式的缩放定律,以指导LLM的计算最优训练。他们通过变化更大范围的模型大小(70M到16B)和数据大小(5B到500B个标记)进行了严格的实验,并拟合了一个类似的缩放定律,但具有不同的系数,如下所示[34]:
其中E = 1.69,A = 406.4,B = 410.7,α = 0.34和β = 0.28。通过在约束条件C ≈ 6ND下优化损失L(N,D),他们表明可以得出将计算预算最优分配给模型大小和数据大小的方法,如下所示:
其中a = α,b = β,而G是一个缩放系数,可以通过A、B、α和β计算得出。根据[34]的分析,随着计算预算的增加,KM缩放定律更倾向于在模型大小上分配更大的预算,而不是数据大小,而Chinchilla缩放定律则认为这两个大小应该以相等的比例增加,即在方程(3)中a和b的值应该相似。
尽管有一些限制性假设,这些缩放定律提供了对缩放效应的直观理解,使得在训练期间预测LLM的性能成为可能[46]。然而,一些能力(例如上下文学习[55])根据缩放定律是不可预测的,只有当模型大小超过一定水平时才能观察到(如下所讨论的)。
在文献[31]中,LLM的新兴能力被正式定义为“在小型模型中不存在但在大型模型中出现的能力”,这是区分LLM与以前的PLM最显著的特征之一。当新兴能力出现时,它还引入了一个显着的特征[31]:当规模达到一定水平时,性能显著高于随机水平。类比地,这种新兴模式与物理学中的相变现象有密切联系[31, 58]。原则上,新兴能力可以与一些复杂任务相关联[31, 59],而我们更关注可以应用于解决各种任务的通用能力。在这里,我们简要介绍LLM的三种典型的新兴能力和具有这种能力的代表性模型。
LLM发展到当前状态:成为具有广泛能力的学习者,经历了漫长的过程。在开发过程中,提出了许多重要的技术,这些技术在很大程度上提高了LLM的能力。在这里,我们简要列出了几项重要的技术,这些技术(可能)导致了LLM的成功,如下所示。
此外,许多其他因素(例如硬件升级)也对LLM的成功做出了贡献。然而,我们将讨论限制在开发LLM的主要技术方法和关键发现上。
由于在与人类交流方面具有出色的能力,自ChatGPT发布以来,它已经引起了人工智能社区的兴奋。ChatGPT是基于强大的GPT模型开发的,具有特别优化的对话能力。考虑到对ChatGPT和GPT模型日益增长的兴趣,我们添加了一个关于GPT系列模型技术演进的特别讨论,以简要总结它们在过去几年中的发展进展。总体而言,OpenAI在LLM的研究可以大致分为以下几个阶段10。
根据Ilya Sutskever11(OpenAI的联合创始人和首席科学家)的一次采访,使用语言模型来处理智能系统的想法在OpenAI的早期就已经被探索过了,当时使用的是循环神经网络(RNN)[104]。随着Transformer的出现,OpenAI开发了两个最初的GPT模型,即GPT-1 [105]和GPT-2 [26],可以认为它们是后来更强大的模型(即GPT-3和GPT-4)的基础。
GPT-1。2017年,Google推出了Transformer模型[22],OpenAI团队迅速将他们的语言建模工作适应到这种新的神经网络架构上。他们在2018年发布了第一个GPT模型,即GPT-1 [105],并将GPT作为模型名称的缩写术语,代表生成式预训练。GPT-1基于生成式、仅解码的Transformer架构开发,并采用了无监督预训练和有监督微调的混合方法。GPT-1为GPT系列模型建立了核心架构,并建立了自然语言文本建模的基本原则,即预测下一个单词。
GPT-2。GPT-2 [26]采用了与GPT-1类似的架构,将参数规模增加到了1.5B,并使用大型网页数据集WebText进行训练。正如GPT-2的论文所声称的那样,它试图通过无监督的语言建模来执行任务,而不使用标记数据进行显式微调。为了激励这种方法,他们引入了一个多任务求解的概率形式,即p(output|input,task)(类似的方法已经在[106]中采用),它预测在给定输入和任务信息的条件下的输出。为了建模这种条件概率,语言文本可以自然地用作格式化输入、输出和任务信息的统一方式。通过这种方式,解决任务的过程可以被视为生成解决方案文本的单词预测问题。此外,他们为这个想法提出了一个更正式的说法:“由于(特定于任务的)监督目标与无监督(语言建模)目标相同,但仅在序列的子集上进行评估,因此无监督目标的全局最小值也是各种任务的监督目标的全局最小值”[26]12。对这个说法的基本理解是,每个(NLP)任务都可以被视为基于世界文本子集的单词预测问题。因此,如果训练具有恢复世界文本的足够能力,无监督语言建模可以解决各种任务。GPT-2论文中的这些早期讨论在Ilya Sutskever接受Jensen Huang采访时得到了回应:“神经网络学习的是产生文本的过程的某种表示。这个文本实际上是世界的投影...你在预测下一个单词时越准确,保真度就越高,你在这个过程中就会获得更高的分辨率...”13。
能力飞跃。尽管GPT-2旨在成为“无监督的多任务学习器”,但与监督微调的最先进方法相比,它的性能总体上较差。虽然它的模型规模相对较小,但在下游任务中被广泛微调,特别是对话任务[107, 108]。基于GPT-2,GPT-3通过扩展(几乎相同的)生成式预训练架构展示了一个关键的容量飞跃。
GPT-3。GPT-3 [55]于2020年发布,将模型参数扩展到了更大的规模,达到了175B。在GPT-3的论文中,它正式引入了上下文学习(ICL)14的概念,它以几个示例或零个示例的方式利用LLM。ICL可以教(或指导)LLM以自然语言文本的形式理解任务。通过ICL,LLM的预训练和利用收敛到相同的语言建模范式:预训练预测基于上下文的下一个文本序列,而ICL预测正确的任务解决方案,这也可以格式化为文本序列,给定任务描述和演示。GPT-3不仅在各种NLP任务中表现出非常出色的性能,而且在许多需要推理或领域适应能力的特别设计任务中也表现出色。虽然GPT-3的论文没有明确讨论LLM的新兴能力,但我们可以观察到大的性能飞跃,可能超越了基本的缩放定律[30],例如,更大的模型具有显着更强的ICL能力(在GPT-3的论文原始图1.2中有说明[55])。总的来说,GPT-3可以被视为从PLM到LLM演变过程中的一个显著里程碑。它经验证明,将神经网络扩展到显著的规模可以导致模型容量的巨大增加。
能力增强。由于其强大的能力,GPT-3已成为OpenAI开发更具能力的LLM的基础模型。总体而言,OpenAI已经探索了两种主要方法来进一步改进GPT-3模型,即在代码数据上进行训练和与人类偏好的对齐,具体如下所述。
在代码数据上进行训练。原始的GPT-3模型(在纯文本上进行预训练)的一个主要限制在于缺乏对复杂任务的推理能力,例如完成代码和解决数学问题。为了增强这种能力,OpenAI在2021年7月推出了Codex [89],这是一个在GitHub代码的大型语料库上微调的GPT模型。它证明了Codex可以解决非常困难的编程问题,并且在解决数学问题方面也带来了显著的性能提升[109]。此外,2022年1月报道了一种对比方法[110],用于训练文本和代码嵌入,该方法被证明可以改善一系列相关任务(即线性探针分类、文本搜索和代码搜索)。实际上,GPT-3.5模型是基于一个基于代码的GPT模型(即code-davinci-002)开发的,这表明在代码数据上进行训练是提高GPT模型容量的一种非常有用的实践,特别是推理能力。此外,还有一种猜测,即在代码数据上进行训练可以极大地增加LLM的思维链提示能力[47],但仍值得进一步研究以进行更彻底的验证。
人类对齐。OpenAI的人类对齐相关研究可以追溯到2017年(或更早):在OpenAI博客上发布了一篇名为“从人类偏好中学习”的博客文章15,描述了一项应用强化学习(RL)来学习人类注释的偏好比较的工作[70](类似于图6中InstructGPT对齐算法中的奖励训练步骤)。在这篇RL论文[70]发布后不久,Proximal Policy Optimization(PPO)[111]的论文于2017年7月发表,现在已成为从人类偏好中学习的基础RL算法[61]。随后在2020年1月,使用上述RL算法[70,111]微调了GPT-2,利用人类偏好来提高GPT-2在NLP任务上的能力。同年,另一项工作[112]以类似的方式训练了一个摘要模型以优化人类偏好。基于这些先前的工作,InstructGPT [61]于2022年1月提出,以改进GPT-3模型的人类对齐,正式建立了一个从人类反馈中进行三阶段强化学习(RLHF)算法。请注意,OpenAI的论文和文档中似乎很少使用“指令调整”这个词,而是用人类演示进行监督微调(即RLHF算法的第一步[61])。除了提高指令跟随能力外,RLHF算法特别有用于缓解LLM生成有害或有毒内容的问题,这对于在实践中安全部署LLM至关重要。OpenAI在一篇技术文章[113]中描述了他们的对齐研究方法,总结了三个有前途的方向:“训练AI系统使用人类反馈,协助人类评估和进行对齐研究”。
这些增强技术导致了具有更强容量的改进GPT-3模型,OpenAI称之为GPT-3.5模型(请参见第3.1节中有关OpenAI API的讨论)。
基于所有的探索努力,OpenAI已经实现了两个重要的里程碑,即ChatGPT [114]和GPT-4 [46],这两个模型在很大程度上提高了现有AI系统的容量门槛。
尽管取得了巨大的进展,这些优秀的LLM仍然存在一些限制,例如在某些特定情境下生成具有事实错误或潜在风险响应的幻觉[46]。LLM的更多限制或问题将在第7节中讨论。开发更具能力、更安全的LLM是一个长期存在的研究挑战。从工程的角度来看,OpenAI采用了迭代部署策略[116],通过遵循五个阶段的开发和部署生命周期来开发模型和产品,旨在有效降低使用模型的潜在风险。接下来,我们将深入探讨技术细节,以便具有具体的了解它们是如何开发的。
近年来大型语言模型(在本次调查中大小大于10B)的统计数据,包括容量评估、预训练数据规模(以标记数或存储大小表示)和硬件资源成本。在此表中,我们仅包括具有有关技术细节的公共论文的LLM。这里,“发布时间”表示相应论文正式发布的日期。“公开可用”表示模型检查点可以公开访问,而“闭源”则表示相反。“适应性”表示模型是否进行了后续微调:IT表示指令微调,RLHF表示强化学习与人类反馈。“评估”表示模型是否在其原始论文中评估了相应的能力:ICL表示上下文学习,CoT表示思维链。 “*”表示最大的公开可用版本。参考:https://github.com/feihengye/LLMSurvey 。
考虑到技术上的挑战和计算资源的巨大需求,开发或复制LLMs绝非易事。一种可行的方法是从现有的LLMs中学习经验,并重复使用公开可用的资源进行增量开发或实验研究。在本节中,我们简要总结了用于开发LLMs的公开可用资源,包括模型检查点(或API)、语料库和库。
考虑到模型预训练的巨大成本,经过良好训练的模型检查点对于研究社区的LLM研究和开发至关重要。由于参数规模是使用LLMs时需要考虑的关键因素,我们将这些公共模型分为两个规模级别(即数百亿个参数和数千亿个参数),这有助于用户根据其资源预算确定适合的资源。此外,对于推理,我们可以直接使用公共API执行任务,而无需在本地运行模型。接下来,我们介绍公开可用的模型检查点和API。
参数规模在数百亿的模型中,大多数模型的参数规模在10B到20B之间,除了LLaMA [57](最大版本包含65B参数)和NLLB [82](最大版本包含54.5B参数)。这个范围内的其他模型包括mT5 [74]、PanGu-α [75]、T0 [28]、GPT- NeoX-20B [78]、CodeGen [77]、UL2 [80]、Flan-T5 [64]和mT0 [84]。其中,Flan-T5(11B版本)可以作为指令微调研究的首选模型,因为它从三个方面探索了指令微调[64]:增加任务数量、扩大模型规模和使用思维链提示数据进行微调。此外,CodeGen(11B版本)作为一个用于生成代码的自回归语言模型,可以被认为是探索代码生成能力的良好候选模型。它还引入了一个新的基准MTPB [77],专门用于多轮程序合成,由115个专家生成的问题组成。为了解决这些问题,需要LLMs获得足够的编程知识(例如数学、数组操作和算法)。对于多语言任务,mT0(13B版本)可能是一个良好的候选模型,它已经在多语言提示下进行了微调。此外,基于深度学习框架MindSpore [117]开发的PanGu-α [75]在零样本或少样本情况下在中文下游任务中表现良好。需要注意的是,PanGu-α [75]拥有多个版本的模型(最多200B参数),而最大的公共版本只有13B参数。作为最近发布的模型,LLaMA(65B版本)[57]包含的参数数量约为其他模型的五倍,在指令跟随相关任务中表现出了卓越的性能。由于其开放性和有效性,LLaMA引起了研究界的广泛关注,许多努力[118-121]已经致力于微调或持续预训练其不同的模型版本,以实现新模型或工具的实现。通常,这个规模的预训练模型需要数百甚至数千个GPU或TPU。例如,GPT-NeoX-20B使用了12个超微服务器,每个服务器配备8个NVIDIA A100-SXM4-40GB GPU,而LLaMA在其原始出版物中报告使用了2,048个A100-80G GPU。为了准确估计所需的计算资源,建议使用衡量涉及计算数量的指标,如FLOPS(即每秒浮点数操作次数)[30]。
参数规模在数千亿个的模型中,只有少数模型被公开发布。例如,OPT [81]、OPT-IML [85]、BLOOM [69]和BLOOMZ [84]的参数数量几乎与GPT-3(175B版本)相同,而GLM [83]和Galactica [35]的参数数量分别为130B和120B。其中,OPT(175B版本)被特别激励进行开放共享,旨在使研究人员能够在规模上进行可重复的研究。对于跨语言通用性的研究,BLOOM(176B版本)和BLOOMZ(176B版本)可以作为基础模型,因为它们在多语言语言建模任务中表现出了竞争力。在这些模型中,OPT-IML已经进行了指令微调,这可能是研究指令微调效果的良好候选模型。这个规模的模型通常需要数千个GPU或TPU来进行训练。例如,OPT(175B版本)使用了992个A100-80GB GPU,而GLM(130B版本)使用了一个由96个NVIDIA DGX-A100(8x40G)GPU节点组成的集群。
LLMs的公共API。与直接使用模型副本相比,API为普通用户提供了更方便的使用LLMs的方式,无需在本地运行模型。作为使用LLMs的代表性接口,GPT系列模型的API [46、55、61、89]已经被学术界和工业界广泛使用。OpenAI为GPT-3系列模型提供了七个主要接口:ada、babbage、curie、davinci(GPT-3系列中最强大的版本)、text-ada-001、text-babbage-001和text-curie-001。其中,前四个接口可以在OpenAI的主机服务器上进一步微调。特别是,babbage、curie和davinci分别对应于GPT-3(1B)、GPT-3(6.7B)和GPT-3(175B)模型[55]。此外,还有两个与Codex [89]相关的API,称为code-cushman-001(Codex(12B)的强大和多语言版本[89])和code-davinci-002。此外,GPT-3.5系列包括一个基础模型code-davinci-002和三个增强版本,即text-davinci-002、text-davinci-003和gpt-3.5-turbo-0301。值得注意的是,gpt-3.5-turbo-0301是调用ChatGPT的接口。最近,OpenAI还发布了GPT-4的相应API,包括gpt-4、gpt-4-0314、gpt-4-32k和gpt-4-32k-0314。总的来说,API接口的选择取决于具体的应用场景和响应要求。详细的使用方法可以在它们的项目网站上找到。
与早期的PLMs相比,由大量参数组成的LLMs需要更多涵盖广泛内容的训练数据。为了满足这个需求,越来越多的可用训练数据集已经发布供研究使用。在本节中,我们将简要总结几个用于训练LLMs的广泛使用的语料库。根据它们的内容类型,我们将这些语料库分为六类:书籍、CommonCrawl、Reddit链接、维基百科、代码和其他。
在实践中,为了预训练LLMs(见图2),通常需要混合使用不同的数据源,而不是单一的语料库。因此,现有的研究通常混合几个现成的数据集(例如C4、OpenWebText和The Pile),然后进行进一步的处理以获得预训练语料库。此外,为了训练适应特定应用程序的LLMs,从相关来源(例如维基百科和BigQuery)提取数据以丰富预训练数据中的相应信息也很重要。为了快速了解现有LLMs中使用的数据源,我们介绍了三个代表性LLMs的预训练语料库:
在这部分中,我们简要介绍了一系列可用于开发LLMs的库。
除了上述库资源外,现有的深度学习框架(例如PyTorch [141]、TensorFlow [142]、MXNet [143]、PaddlePaddle [144]、MindSpore [117]和OneFlow [145])也提供了对并行算法的支持,这些算法通常用于训练大规模模型。
预训练为LLMs的能力奠定了基础。通过在大规模语料库上进行预训练,LLMs可以获得基本的语言理解和生成技能[55, 56]。在这个过程中,预训练语料库的规模和质量对于LLMs获得强大的能力至关重要。此外,为了有效地预训练LLMs,需要设计良好的模型架构、加速方法和优化技术。接下来,我们首先在第4.1节讨论数据收集和处理,然后在第4.2节介绍常用的模型架构,最后在第4.3节介绍稳定高效地优化LLMs的训练技术。
与小规模语言模型相比,LLMs对于模型预训练的高质量数据有更强的需求,它们的模型容量在很大程度上依赖于预训练语料库以及它是如何被预处理的。在这部分中,我们讨论预训练数据的收集和处理,包括数据来源、预处理方法以及预训练数据如何影响LLMs性能的重要分析。
要开发一个能力强大的LLM,关键是从各种数据源收集大量的自然语言语料库。现有的LLMs主要利用各种公共文本数据集的混合作为预训练语料库。图2显示了一些代表性LLMs的预训练数据来源分布。
预训练语料库的来源可以广泛分为两种类型:通用数据和专业数据。由于其规模大、多样化和易于获取,大多数LLMs [55, 56, 81]都利用通用数据,例如网页、书籍和对话文本,这可以增强LLMs的语言建模和泛化能力。鉴于LLMs展示出的令人印象深刻的泛化能力,也有研究将它们的预训练语料库扩展到更专业的数据集,例如多语言数据、科学数据和代码,赋予LLMs特定的任务解决能力[35, 56, 77]。接下来,我们描述这两种类型的预训练数据来源及其对LLMs的影响。有关常用语料库的详细介绍,请参见第3.2节。
如图2所示,绝大多数LLMs采用通用预训练数据,例如网页、书籍和对话文本,这提供了各种主题的丰富文本来源。接下来,我们简要总结了三种重要的通用数据类型。
专业数据集有助于提高LLMs在下游任务中的特定能力。接下来,我们介绍三种专业数据。
在收集大量文本数据之后,对数据进行预处理以构建预训练语料库至关重要,特别是要删除噪声、冗余、不相关和潜在有害的数据[56, 59],这可能会极大地影响LLMs的容量和性能。在本部分中,我们回顾了详细的数据预处理策略,以提高收集数据的质量[59, 69, 96]。预处理LLMs的预训练数据的典型流程已在图3中说明。
质量过滤:为了从收集的语料库中删除低质量的数据,现有的工作通常采用两种方法:(1)基于分类器的方法和(2)基于启发式的方法。前一种方法基于高质量文本训练选择分类器,并利用它来识别和过滤低质量数据。通常,这些方法[55, 56, 96]使用精心策划的数据(例如维基百科页面)作为正例,将候选数据作为负例,训练一个二元分类器,并预测衡量每个数据示例质量的分数。然而,一些研究[59, 96]还发现,基于分类器的方法可能会意外地删除方言、口语和社会语言中的高质量文本,这可能导致预训练语料库中的偏见并减少语料库的多样性。作为第二种方法,一些研究,例如BLOOM [69]和Gopher [59],采用基于启发式的方法通过一组精心设计的规则消除低质量文本,这些规则可以总结如下:
去重:现有的研究[158]发现,语料库中的重复数据会降低语言模型的多样性,这可能导致训练过程不稳定,从而影响模型性能。因此,有必要对预训练语料库进行去重。特别地,可以在不同的粒度上进行去重,包括句子级、文档级和数据集级去重。首先,应删除包含重复单词和短语的低质量句子,因为它们可能会引入重复的语言模式[159]。在文档级别上,现有的研究主要依靠文档之间表面特征(例如单词和n-gram重叠)的重叠比率来检测和删除包含相似内容的重复文档[57, 59, 69, 160]。此外,为了避免数据集污染问题,还需要通过从训练集中删除可能的重复文本来防止训练和评估集之间的重叠[56]。已经表明,三个级别的去重对于改善LLMs的训练是有用的[56, 161],在实践中应该共同使用。
隐私保护:大多数预训练文本数据来自于网络来源,包括涉及敏感或个人信息的用户生成内容,这可能增加隐私泄露的风险[162]。因此,有必要从预训练语料库中删除个人身份信息(PII)。一种直接有效的方法是采用基于规则的方法,例如关键词检测,来检测和删除姓名、地址和电话号码等PII[131]。此外,研究人员还发现,LLMs在隐私攻击下的脆弱性可以归因于预训练语料库中存在重复的PII数据[163]。因此,去重也可以在一定程度上降低隐私风险。
Token化:Token化也是数据预处理的关键步骤。它旨在将原始文本分割成单个标记序列,随后将其用作LLMs的输入。虽然利用现有的标记器(例如OPT [81]和GPT-3 [55]利用GPT-2 [26]的标记器)是方便的,但是使用专门为预训练语料库设计的标记器可能会非常有益[69],特别是对于由多个领域、语言和格式组成的语料库。因此,一些最近的LLMs使用SentencePiece [164]专门为预训练语料库训练定制的标记器。利用字节级别的Byte Pair Encoding(BPE)算法[165]可以确保标记化后的信息不会丢失[56, 59]。然而,在BPE中的规范化技术,例如NFKC [166],可能会降低标记化性能[34, 59, 69]。
与小规模PLMs不同,由于对计算资源的巨大需求,通常不可能多次迭代LLMs的预训练。因此,在训练LLMs之前构建一个准备充分的预训练语料库尤为重要。在本部分中,我们讨论预训练语料库的质量和分布如何潜在地影响LLMs的性能。
混合来源:如前所述,来自不同领域或场景的预训练数据具有不同的语言特征或语义知识。通过在来自不同来源的文本数据上进行预训练,LLMs可以获得广泛的知识范围,并可能展现出强大的泛化能力。在混合不同来源时,需要仔细设置预训练数据的分布,因为这也可能影响LLMs在下游任务上的性能[59]。Gopher [59]对数据分布进行了消融实验,以研究混合来源对下游任务的影响。在LAMBADA数据集[167]上的实验结果表明,增加书籍数据的比例可以提高模型在捕捉文本中的长期依赖关系方面的能力,而增加C4数据集[73]的比例则会导致在C4验证数据集上的性能提高[59]。然而,作为副作用,过多地训练某个领域的数据会影响LLMs在其他领域的泛化能力[35, 59]。因此,建议研究人员应仔细确定预训练语料库中来自不同领域的数据比例,以开发更符合其特定需求的LLMs。读者可以参考图2,比较不同LLMs的数据来源。
预训练数据量:为了预训练一个有效的LLM,收集足够的高质量数据以满足LLM的数据量需求非常重要。现有的研究发现,随着LLM中参数规模的增加,也需要更多的数据来训练模型[34, 57]:与模型大小相似的缩放规律也观察到了数据大小与模型性能之间的关系。最近的一项研究表明,由于预训练数据不足,许多现有的LLMs训练效果不佳[34]。通过进行广泛的实验,它进一步证明了在相等的规模下增加模型大小和数据大小可以导致更高效的计算模型(即Chinchilla模型),对于给定的计算预算。最近,LLaMA [57]表明,通过更多的数据和更长的训练,较小的模型也可以实现良好的性能。总的来说,建议研究人员在扩展模型参数时,应更加关注足够的高质量数据量,以充分训练模型。
在本节中,我们回顾LLMs的架构设计,即主流架构、预训练目标和详细配置。表3列出了几个具有公开细节的代表性LLMs的模型卡。
由于其出色的可并行性和容量,Transformer架构[22]已成为开发各种LLMs的事实标准骨干,使得将语言模型扩展到数百亿或数千亿个参数成为可能。一般来说,现有LLMs的主流架构可以大致分为三种主要类型,即编码器-解码器、因果解码器和前缀解码器,如图4所示。
对于这三种架构,我们还可以考虑通过混合专家(MoE)扩展它们,其中每个输入的一部分神经网络权重被稀疏激活,例如Switch Transformer [25]和GLaM [96]。已经表明,通过增加专家数量或总参数大小,可以观察到显著的性能提升[171]。
自Transformer [22]推出以来,已经提出了各种改进来增强其训练稳定性、性能和计算效率。在本部分中,我们将讨论Transformer的四个主要部分的相应配置,包括归一化、位置嵌入、激活函数和注意力和偏置。为了使本调查更加自包含,我们在表4中提供了这些配置的详细公式。
综合上述讨论,我们总结了现有文献中对详细配置的建议。为了获得更强的泛化能力和训练稳定性,建议选择前RMS Norm进行层归一化,并选择SwiGLU或GeGLU作为激活函数。然而,LN可能不适用于嵌入层之后,这可能会导致性能下降。此外,对于位置嵌入,RoPE或ALiBi是更好的选择,因为它们在长序列上表现更好。
预训练在将大规模语料库中的通用知识编码到大规模模型参数中起着关键作用。对于训练LLMs,有两种常用的预训练任务,即语言建模和去噪自编码。
语言建模。语言建模任务(LM)是预训练仅包含解码器的LLMs(例如GPT3 [55]和PaLM [56])最常用的目标。给定一个令牌序列x = {x1,...,xn},LM任务旨在基于序列中前面的令牌x<i,自回归地预测目标令牌xi。一般的训练目标是最大化以下似然:
由于大多数语言任务都可以基于输入进行预测,这些仅包含解码器的LLMs可能具有潜在的优势,可以隐式地学习如何以统一的LM方式完成这些任务。一些研究还表明,仅包含解码器的LLMs可以通过自回归地预测下一个令牌[26, 55]自然地转移到某些任务,而无需微调。LM的一个重要变体是前缀语言建模任务,它是为了预训练具有前缀解码器架构的模型而设计的。在计算前缀语言建模的损失时,不会使用随机选择的前缀内的令牌。在预训练期间看到相同数量的令牌时,前缀语言建模的表现略差于语言建模,因为序列中涉及的令牌较少[29]。
去噪自编码。除了传统的LM之外,去噪自编码任务(DAE)也被广泛用于预训练语言模型[24, 73]。DAE任务的输入x\x ̃是带有随机替换跨度的损坏文本。然后,语言模型被训练以恢复替换的令牌x ̃。形式上,DAE的训练目标如下所示:
然而,DAE任务在实现上似乎比LM任务更加复杂。因此,它并没有被广泛用于预训练大型语言模型。采用DAE作为预训练目标的现有LLMs包括T5 [73]和GLM-130B [83]。这些模型主要是以自回归的方式训练以恢复替换的跨度。
架构和预训练任务的选择可能会为LLMs带来不同的归纳偏差,这将导致不同的模型容量。在本部分中,我们总结了现有文献中关于这个问题的一些重要发现或讨论。
过使用LM目标进行预训练,因果解码器架构似乎可以实现更优越的零样本和少样本泛化能力。现有研究表明,在没有多任务微调的情况下,因果解码器比其他架构具有更好的零样本性能[29]。GPT-3 [55]的成功证明了大型因果解码器模型可以成为良好的少样本学习器。此外,第5节讨论的指令调整和对齐调整已被证明可以进一步增强大型因果解码器模型的能力[61, 62, 64]。
在因果解码器中,缩放定律已被广泛观察到。通过缩放模型大小、数据集大小和总计算量,可以大幅提高因果解码器的性能[30, 55]。因此,通过缩放已成为增加因果解码器模型容量的重要策略。然而,对于编码器-解码器模型的更详细调查仍然缺乏,需要更多的努力来研究大规模编码器-解码器模型的性能。
需要更多的研究努力来讨论架构和预训练目标的选择如何影响LLMs的容量,特别是对于编码器-解码器架构。除了主要架构之外,LLM的详细配置也值得关注,这在第4.2.2节中已经讨论过。
在本部分中,我们回顾了训练LLMs的重要设置、技术或技巧。
对于LLMs的参数优化,我们介绍了批量训练、学习率、优化器和训练稳定性的常用设置。
随着模型和数据大小的增加,如何在有限的计算资源下高效地训练LLMs已经成为一个挑战。特别是,需要解决两个主要的技术问题,即提高训练吞吐量和将更大的模型加载到GPU内存中。在本部分中,我们回顾了现有工作中几种广泛使用的方法来解决上述两个挑战,即3D并行[66, 194, 195]、ZeRO[196]和混合精度训练[197],并提出了如何利用它们进行训练的一般建议。
总体训练建议。在实践中,上述训练技术,特别是3D并行,通常联合使用以提高训练吞吐量和大模型加载。例如,研究人员已经将8路数据并行、4路张量并行和12路管道并行纳入BLOOM [69]的训练中,使其能够在384个A100 GPU上进行训练。目前,像DeepSpeed [65]、Colossal-AI [137]和Alpa [203]这样的开源库可以很好地支持这三种并行训练方法。为了减少内存冗余,可以使用ZeRO、FSDP和激活重计算技术[68, 204]来训练LLMs,这些技术已经集成到DeepSpeed、PyTorch和Megatron-LM中。此外,混合精度训练技术,如BF16,也可以利用来提高训练效率和减少GPU内存使用,但需要硬件的必要支持(例如A100 GPU)。由于训练大模型是一个耗时的过程,因此在早期预测模型性能并检测异常问题将非常有用。为此,GPT-4 [46]最近引入了一种称为可预测扩展的新机制,该机制建立在深度学习堆栈上,可以使用更小的模型对大模型的性能进行预测,这可能非常有用于开发LLMs。在实践中,可以进一步利用主流深度学习框架的支持训练技术。例如,PyTorch支持数据并行训练算法FSDP [202](即完全分片数据并行),如果需要,可以将部分训练计算卸载到CPU上。
除了上述的训练策略,提高LLMs的推理速度也非常重要。通常,量化技术被广泛用于减少LLMs在推理阶段的时间和空间成本[205]。虽然会损失一些模型性能,但量化的语言模型具有更小的模型大小,可以实现更快的推理速度[83, 206, 207]。对于模型量化,INT8量化[206]是一个流行的选择。此外,一些研究工作尝试开发更激进的INT4量化方法[83]。最近,Hugging Face发布了几个公开可用的语言模型的量化模型副本,包括BLOOM20、GPT-J21和ChatGLM22。
本文翻译摘要、概述、大语言资源、预训练;(后续会人工修改里面不好理解的句子)
下篇文章翻译LLM适应性调试、利用、能力进化、总结。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。