您现在的位置是:首页 >技术交流 >大型语言模型综述网站首页技术交流
大型语言模型综述
摘要
论文链接:https://arxiv.org/pdf/2303.18223.pdf
自20世纪50年代图灵测试被提出以来,人类一直在探索机器对语言智能的掌握。语言本质上是一个受语法规则支配的复杂的人类表达系统。这对开发有能力的人工智能(AI)算法来理解和掌握语言提出了重大挑战。作为一种主要的语言建模方法,在过去的二十年中,语言建模在语言理解和生成方面得到了广泛的研究,从统计语言模型发展到神经语言模型。最近,通过在大规模语料库上预训练Transformer模型,人们提出了预训练语言模型(plm),在解决各种自然语言处理(NLP)任务方面显示出强大的能力。由于研究人员发现模型缩放可以提高模型容量,他们通过将参数缩放到更大的尺寸来进一步研究缩放效应。有趣的是,当参数规模超过一定水平时,这些放大的语言模型不仅实现了显著的性能提升,还表现出一些在小规模语言模型(如BERT)中不存在的特殊能力(如上下文学习)。为了区分不同参数规模的语言模型,研究界创造了大型语言模型(LLM)这个术语,用于表示规模巨大的plm(例如,包含数百亿或千亿参数)。近年来,学术界和工业界对LLMs的研究取得了很大进展,其中最显著的进展是基于LLMs开发的ChatGPT(一个功能强大的人工智能聊天机器人)的推出,引起了社会的广泛关注。llm的技术发展对整个AI社区产生了重要影响,这将彻底改变我们开发和使用AI算法的方式。鉴于这种快速的技术进步,本综述通过介绍背景、关键发现和主流技术,回顾了llm的最新进展。重点关注llm的四个主要方面,即预训练、自适应调优、利用率和能力评估。此外,还总结了开发llm的可用资源,并讨论了剩余问题,以供未来发展方向。本综述提供了关于llm的文献的最新综述,对于研究人员和工程师来说,这可以是一个有用的资源。
索引词——大型语言模型、涌现能力、适应调优、利用率、对齐;能力评估。
1、简介
语言是人类表达和交流的突出能力,它在儿童早期发展并在一生中不断演变 [1, 2]。然而,机器不能自然地掌握以人类语言形式理解和交流的能力,除非配备了强大的人工智能算法。实现这一目标,让机器像人类一样阅读、写作和交流,一直是一个长期的研究挑战 [3]。
从技术上讲,语言建模(LM)是提高机器语言智能的主要方法之一。一般来说,LM旨在对单词序列的生成似然进行建模,从而预测未来(或缺失)标记的概率。LM的研究在文献中得到了广泛的关注,它可以分为四个主要的发展阶段:
- 统计语言模型(SLM)。SLMs[4-7]是基于20世纪90年代兴起的统计学习方法发展起来的。其基本思想是基于马尔可夫假设构建单词预测模型,例如根据最近的上下文预测下一个单词。具有固定上下文长度n的slm也称为n-gram语言模型,例如bigram和trigram语言模型。在信息检索(information retrieval, IR)[8,9]和自然语言处理(natural language processing, NLP)[10-12]中,slm被广泛应用于提高任务性能。然而,它们往往受到维数灾难的影响:由于需要估计指数级的转移概率,因此很难准确估计高阶语言模型。因此,专门设计的平滑策略如退避估计[13]和良图灵估计[14]被引入来缓解数据稀疏性问题。
- 神经语言模型(NLM)。NLMs[15-17]通过神经网络(例如,递归神经网络(rnn))来描述单词序列的概率。作为显著贡献,[15]算法引入了词的分布式表示概念,并构建了以聚集的上下文特征(即分布式词向量)为条件的词预测函数。通过扩展学习单词或句子的有效特征的思想,提出了一种通用的神经网络方法,构建了针对各种NLP任务的统一解决方案[18]。此外,word2vec[19,20]被提出构建一个简化的浅层神经网络来学习分布式单词表示,在各种NLP任务中被证明是非常有效的。这些研究开始将语言模型用于表示学习(超越词序列建模),对自然语言处理领域产生了重要影响。
- 预训练语言模型 (PLM): 作为早期尝试, ELMo [21] 被提出来通过预训练一个双向 LSTM(biLSTM)网络(而不是学习固定的词表示)来捕捉上下文感知的词表示,然后根据特定的下游任务微调 biLSTM 网络。进一步,基于自注意力机制的高度并行化 Transformer 架构 [22], BERT [23] 作为双向语言模型,在大规模无标签语料库上使用专门设计的预训练任务。这些预训练的上下文感知词表示作为通用语义特征非常有效,极大地提高了自然语言处理任务的性能。这项研究激发了大量后续工作,确立了“预训练和微调”学习范式。遵循这一范式,已经建立了大量关于预训练语言模型的研究,引入了不同的架构 [24, 25](例如 GPT-2 [26] 和 BART [24]),或者改进的预训练策略 [27–29]。在这个范式中,通常需要对预训练语言模型进行微调以适应不同的下游任务。
- 大语言模型 (LLM): 研究人员发现,扩展预训练语言模型(例如扩展模型大小或数据大小)通常会提高下游任务的模型容量(即遵循扩展定律 [30])。许多研究通过训练越来越大的 PLM(例如 175B 参数的 GPT-3 和 540B 参数的 PaLM)来探索性能极限。尽管扩展主要在模型大小方面进行(具有类似的架构和预训练任务),但这些大尺寸的预训练语言模型表现出与较小的预训练语言模型(如 330M 参数的 BERT和 1.5B 参数的 GPT-2)不同的行为,并在解决一系列复杂任务中展示了惊人的能力(称为涌现能力)。例如, GPT-3 可以通过上下文学习解决少样本任务,而 GPT-2 则表现不佳。因此,研究界为这些大型预训练语言模型命名为“大语言模型 (LLM)”[31–34]。 LLM 的一个显著应用是 ChatGPT2,它将 GPT 系列的 LLM 应用于对话,展现了惊人的与人类对话的能力。
在现有文献中, PLM 已经得到了广泛的讨论和调研 [35–38],而很少有研究对 LLM 以系统的方式进行回顾。为了激发我们的调研,我们首先强调 LLM 和 PLM 之间的三个主要区别。首先, LLM 表现出一些令人惊讶的涌现能力,这些能力可能在以前较小的 PLM 中没有观察到。这些能力是语言模型在复杂任务上表现的关键,使得人工智能算法具有前所未有的强大和有效性。其次, LLM 将彻底改变人类开发和使用人工智能算法的方式。与小型 PLM 不同,访问 LLM 的主要方法是通过提示接口(例如 GPT-4 API)。人们必须了解 LLM的工作原理,并以 LLM 能够遵循的方式形式化他们的任务。第三, LLM 的发展不再明确区分研究和工程。训练 LLM 需要在大规模数据处理和分布式并行训练方面具有丰富的实践经验。为了开发出有能力的 LLM,研究人员必须解决复杂的工程问题,与工程师合作或成为工程师。
如今,LLM正在对人工智能社区产生重大影响,ChatGPT和GPT-4的出现引发了对人工通用智能(AGI)可能性的重新思考。OpenAI发表了一篇题为“Planning for AGI and beyond”的技术文章,其中讨论了接近AGI[40]的短期和长期计划,而最近的一篇论文认为,GPT-4可能被视为AGI系统[41]的早期版本。LLM的快速发展正在彻底改变人工智能的研究领域。在NLP领域,LLM可以作为通用语言任务求解器(在某种程度上),研究范式已经转向使用LLM。在信息检索领域,传统的搜索引擎受到了通过人工智能聊天机器人(ChatGPT)进行信息搜索的新挑战,New Bing提出了基于LLMs增强搜索结果的初步尝试。在CV领域,研究人员试图开发类chatgpt的视觉-语言模型,可以更好地服务于多模态对话[42-45],而GPT-4[46]通过整合视觉信息支持多模态输入。这一新的技术浪潮可能会导致基于LLM的现实世界应用的繁荣生态系统。例如,LLMs(即Copilot)授权Microsoft 365来自动化办公工作,OpenAI支持在ChatGPT中使用插件来实现特殊功能。
尽管取得了进展和影响,LLM的基本原则仍然没有得到很好的探索。首先,令人费解的是为什么涌现能力发生在LLM中,而不是更小的plm中。作为一个更普遍的问题,缺乏对促成LLM卓越能力的关键因素的深入、详细的调查。研究LLM何时以及如何获得这种能力是很重要的[47]。尽管对这个问题有一些有意义的讨论[31,47],但需要更有原则的调查来揭开LLM的“秘密”。其次,研究界很难训练出有能力的LLM。由于计算资源的巨大需求,进行重复的、消耗的研究来研究各种策略对训练LLM的影响是非常昂贵的。事实上,LLM主要由工业界训练,其中许多重要的训练细节(例如,数据收集和清理)没有向公众披露。第三,使LLM与人类的价值观或偏好保持一致是具有挑战性的。尽管具有能力,LLM也可能产生有毒的、虚构的或有害的内容。它需要有效和高效的控制方法来消除使用LLMs[46]的潜在风险。
机遇与挑战并存,LLM的研究与发展需要更多的关注。为了提供对LLM的基本了解,本综述从四个主要方面对LLM的最新进展进行了文献回顾,包括预训练(如何预训练一个有能力的LLM)、自适应调整(如何从有效性和安全性两个角度有效地调整预训练的LLM)、利用(如何使用LLM解决各种下游任务)和能力评估(如何评估LLM的能力和现有的经验结果)。彻底梳理了文献,总结了llm的关键发现、技术和方法。对于这项调查,我们还通过收集LLMs的支持资源创建了一个GitHub项目网站,链接https://github.com/RUCAIBox/LLMSurvey。我们还了解到一些关于plm或LLM的相关综述文章[32,36,38,39,43,48 - 54]。这些论文要么讨论PLM,要么讨论LLM的一些特定(或一般)方面。在此基础上,重点阐述了开发和使用LLMs的技术和方法,为LLMs的重要方面提供了较为全面的参考
本综述的其余部分组织如下:第2节介绍LLMs的背景,以及术语、设置、资源和组织大纲,然后在第3节中总结用于开发LLMs的可用资源。第4、5、6和7节分别从预训练、适应调优、利用和能力评估四个方面回顾和总结了近年来的进展。最后,我们在第8节总结了调查的主要发现,并讨论了未来工作的剩余问题。
2、概述
在本节中,我们介绍了 LLM 的背景,包括其关键术语、能力和技术。
2.1 LLM的背景
通常,大型语言模型(LLM)是指包含数千亿(或更多)参数的Transformer语言模型,这些模型是在海量文本数据[32]上训练的,如GPT-3[55]、PaLM[56]、Galactica[35]和LLaMA[57]。LLM表现出强大的理解自然语言和解决复杂任务的能力(通过文本生成)。为了快速了解llm的工作原理,本部分介绍了LLM的基本背景,包括缩放定律、涌现能力和关键技术。
llm的缩放定律。目前,llm主要建立在Transformer架构[22]上,其中多头注意力层堆叠在非常深的神经网络中。现有的llm采用类似于小型语言模型的Transformer架构和预训练目标(例如,语言建模)。而llm在很大程度上扩展了模型大小、数据大小和总计算(放大倍数)。广泛的研究表明,扩展可以在很大程度上提高llm的模型容量[26,55,56]。因此,建立一种量化的方法来表征尺度效应是有意义的。接下来,介绍了Transformer语言模型的两个代表性缩放定律[30,34]。
- KM缩放定律。2020年Kaplan等人[30] (OpenAI团队)首次提出对神经语言模型的模型性能与三个主要因素的幂律关系进行建模,即模型大小(N)、数据集大小(D)和训练计算量©。给定一个计算预算c,他们根据经验给出了缩放定律的三个基本公式:
L ( N ) = ( N c N ) α N , α N ∼ 0.076 , N c ∼ 8.8 × 1 0 13 L ( D ) = ( D c D ) α D , α D ∼ 0.095 , D c ∼ 5.4 × 1 0 13 L ( C ) = ( C c C ) α C , α C ∼ 0.050 , C c ∼ 3.1 × 1 0 8 (1) egin{aligned} L(N) & =left(frac{N_{c}}{N} ight)^{alpha_{N}}, quad alpha_{N} sim 0.076, N_{c} sim 8.8 imes 10^{13} \ L(D) & =left(frac{D_{c}}{D} ight)^{alpha_{D}}, quad alpha_{D} sim 0.095, D_{c} sim 5.4 imes 10^{13} \ L(C) & =left(frac{C_{c}}{C} ight)^{alpha_{C}}, quad alpha_{C} sim 0.050, C_{c} sim 3.1 imes 10^{8} end{aligned} ag{1} L(N)L(D)L(C)=(NNc)αN,αN∼0.076,Nc∼8.8×1013=(DDc)αD,αD∼0.095,Dc∼5.4×1013=(CCc)αC,αC∼0.050,Cc∼3.1×108(1)
其中L(·)为nats的交叉熵损失。这三条规律是通过拟合不同数据大小(22M到23B token)、模型大小(768M到1.5B的非嵌入参数)和训练计算在一些假设下(例如,一个因素的分析不应该被其他两个因素瓶颈)的模型性能推导出来的。他们表明模型性能对这三个因素有很强的依赖关系。
- Chinchilla 缩放定律。作为另一项代表性研究,Hoffmann等人34提出了一种缩放定律的替代形式,以指导llm的计算最优训练。他们进行了严格的实验,改变了更大的模型大小范围(70M到16B)和数据大小范围(5B到500B token),并拟合了类似的缩放规律,但具有不同的系数,如下[34]:
L ( N , D ) = E + A N α + B D β (2) L(N, D)=E+frac{A}{N^{alpha}}+frac{B}{D^{eta}} ag{2} L(N,D)=E+NαA+DβB(2)
其中 E = 1.69 , A = 406.4 , B = 410.7 , α = 0.34 , β = 0.28 E=1.69, A=406.4, B=410.7, alpha =0.34, eta =0.28 E=1.69,A=406.4,B=410.7,α=0.34,β=0.28。通过在约束条件 C ≈ 6 N D C approx 6 N D C≈6ND下优化损失函数L(N, D),他们表明计算预算对模型大小和数据大小的最优分配可以推导如下:
N o p t ( C ) = G ( C 6 ) a , D o p t ( C ) = G − 1 ( C 6 ) b , (3) N_{o p t}(C)=Gleft(frac{C}{6} ight)^{a}, quad D_{o p t}(C)=G^{-1}left(frac{C}{6} ight)^{b}, ag{3} Nopt(C)=G(6C)a,Dopt(C)=G−1(6C)b,(3)
其中 a = α α + β , b = β α + β , G a= frac{alpha}{alpha+eta}, b= frac{eta}{alpha+eta}, G a=α+βα,b=α+ββ,G是缩放系数,可以由 a , b , α 和 β a, b, alpha和eta a,b,α和β计算。正如在[34]中分析的那样,当计算预算增加时, K M mathrm{KM} KM缩放律倾向于在模型大小上分配比数据大小更大的预算,而Chinchilla缩放律认为两种大小应该以相同的规模增加,即具有相似的规模。
尽管有一些限制性假设,但这些缩放定律提供了对尺度效应的直观理解,使得在训练[46]期间预测llm的性能是可行的。然而,根据缩放定律,有些能力(例如上下文学习[55])是不可预测的,只有当模型大小超过一定水平时才能观察到这一点(如下所述)。
llm的涌现能力。在文献[31]中,llm的涌现能力被正式定义为"在小型模型中不存在,但在大型模型中出现的能力",这是llm与以前的plm区分的最突出特征之一。进一步引入突发性能力出现时的显著特征[31]:当规模达到一定程度时,性能明显高于随机。类推,这种涌现模式与物理中的相变现象有着密切的联系[31,58]。原则上,涌现能力可以根据一些复杂的任务来定义[31,59],而我们更关心的是可以应用于解决各种任务的一般能力。本文简要介绍llm的三种典型涌现能力和具有这种能力的代表性模型。
-
上下文学习。上下文学习(ICL)能力是由GPT-3[55]正式引入的:假设语言模型已经提供了一个自然语言指令和/或几个任务演示,它可以通过完成输入文本的单词序列为测试实例生成预期的输出,而不需要额外的训练或梯度更新8。在gpt系列模型中,175B GPT-3模型总体表现出较强的ICL能力,而GPT-1和GPT-2模型表现不佳。然而,这种能力也取决于特定的下游任务。例如,13B GPT-3的ICL能力可以在算术任务(例如3位加减法)上表现出来,但175B GPT-3甚至不能在波斯语QA任务[31]上很好地工作。
-
指令遵循: 通过使用自然语言描述的多任务数据集进行微调(称为指令微调), LLM 可以在同样使用指令形式化描述的未见任务上表现良好 [28, 61, 62]。通过指令微调, LLM 能够在没有使用显式示例的情况下遵循任务指令,从而具有更好的泛化能力。
-
逐步推理。对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学应用题。而基于思维链(chain-of-thought, CoT)的[33]激励策略,LLMs可以利用包含中间推理步骤的激励机制来求解此类任务。据推测,这种能力可能是通过对代码进行训练获得的[33,47]。一项实证研究[33]表明,当应用于模型大小大于60B的PaLM和LaMDA变体时,CoT提示可以带来性能提升(在算术推理基准上),而当模型大小超过100B时,CoT提示相对于标准提示的优势变得更加明显。此外,在不同的任务中,任务激励对绩效的提升效果也不尽相同,如,对于PaLM[33]来说GSM8K > MAWPS > SWAMP 。
llm的关键技术。llm经过了很长一段时间才发展到目前的状态:通用和有能力的学习者。在开发过程中,提出了许多重要的技术,极大地提高了llm的性能。在这里,我们简要列出了几个(潜在地)导致llm成功的重要技术,如下所示。
-
缩放。如前几部分所述,Transformer语言模型中存在明显的缩放效应:更大的模型/数据规模和更多的训练计算通常会提高模型容量[30,34]。作为两个代表性的模型,GPT-3和PaLM分别通过将模型大小增加到175B和540B来探索缩放限制。此外,由于计算预算通常是有限的,因此可以采用缩放法则来进行计算资源的更高效分配。例如,在相同的计算预算[34]下,Chinchilla(具有更多的训练令牌)通过增加数据规模,优于其对应模型Gopher(具有更大的模型大小)。同时,应该注意的是,数据扩展应该有仔细的清洗过程,因为预训练数据的质量在模型容量中起着关键作用。
-
训练。由于模型规模巨大,成功训练一个强大的LLM是非常具有挑战性的。llm的网络参数学习需要分布式的训练算法,通常需要联合使用多种并行策略。为了支持分布式训练,已经发布了几个优化框架来促进并行算法的实现和部署,如DeepSpeed[65]和Megatron-LM[66-68]。此外,优化技巧对训练稳定性和模型性能也很重要,例如重新启动以克服训练损失spike[56]和混合精度训练[69]。最近,GPT-4[46]提出开发特殊的基础设施和优化方法,以可靠地预测用小得多的模型的大型模型的性能。
-
涌现能力。经过大规模语料库的预训练,llm被赋予了作为通用任务求解器的潜在能力。然而,当llm执行某些特定任务时,这些能力可能不会明确表现出来。作为一种技术手段,设计合适的任务指令或特定的上下文学习策略有助于引出此类能力。例如,思维链提示已被证明对解决复杂推理任务很有用,它包括中间推理步骤。此外,可以进一步对用自然语言表示的任务描述的llm进行指令调优,以提高llm在未见任务上的泛化能力。而这些技术主要对应于llm的突现能力,在小型语言模型上可能不会显示出相同的效果。
-
对齐调优。由于llm被训练来捕获预训练语料库的数据特征(包括高质量和低质量的数据),因此它们很可能对人类产生有毒的、有偏见的,甚至有害的内容。有必要使llm与人类价值观保持一致,例如,有益的、诚实的和无害的。为此,InstructGPT[61]设计了一种有效的调优方法,使llm能够遵循预期的指令,该方法利用具有人工反馈的强化学习技术[61,70]。它将人融入到训练循环中,并精心设计了标记策略。ChatGPT确实是基于与InstructGPT类似的技术开发的,该技术在产生高质量、无害的回应方面表现出强大的对齐能力,例如拒绝回答侮辱性的问题。
-
工具操作。本质上,llm被训练为在大规模纯文本语料库上的文本生成器,因此在不是以文本形式最佳表达的任务(例如,数值计算)上表现不佳。此外,它们的能力也局限于预训练数据,例如无法捕捉最新信息。为了解决这些问题,最近提出的一种技术是使用外部工具来弥补LLMs的缺陷[71,72]。例如,LLMs可以利用计算器进行精确计算[71],并利用搜索引擎检索未知信息[72]。最近,ChatGPT启用了使用外部插件(现有或新创建的应用程序)的机制,这与llm的“眼睛和耳朵”类似。这种机制可以广泛扩展llm的能力范围。
此外,许多其他因素(如硬件的升级)也有助于LLMs的成功。同时,将讨论限制在开发llm的主要技术方法和关键发现上。
2.2 GPT系列模型的技术演进
由于与人类交流的出色能力,ChatGPT自发布以来就点燃了AI社区的兴奋之情。ChatGPT是基于经过特殊优化的GPT模型开发的。鉴于人们对ChatGPT和GPT模型越来越感兴趣,文中特别讨论了GPT系列模型的技术演变,以简要总结它们在过去几年中所取得的进展。总体而言,OpenAI在llm上的研究大致可以分为以下几个阶段。
早期的探索。根据对Ilya Sutskever (OpenAI的联合创始人和首席科学家)的一次采访,在OpenAI的早期,就已经探索了用语言模型来实现智能系统的想法,而尝试使用递归神经网络(RNN)[104]。随着Transformer的出现,OpenAI开发了两个初始的GPT模型,即GPT-1[105]和GPT-2[26],它们可以被视为后续更强大的模型GPT-3和GPT-4的基础。
GPT-1。2017年,谷歌引入了Transformer模型[22],OpenAI团队迅速将他们的语言建模工作适应这种新的神经网络架构。他们在2018年发布了第一个GPT模型,即GPT-1[105],并创造了术语GPT的缩写作为模型名称,代表生成式预训练。GPT-1基于生成式、仅解码器的Transformer架构开发,并采用无监督预训练和有监督微调的混合方法。GPT- 1建立了GPT-series模型的核心架构,并建立了对自然语言文本进行建模的基本原则,即预测下一个单词。
GPT-2。遵循类似GPT-1的架构,GPT-2[26]将参数规模增加到1.5B,使用大型网页数据集WebText进行训练。正如GPT-2的论文所声称的,它试图通过无监督语言建模来执行任务,而不使用标记数据进行显式微调。为了激励这种方法,他们引入了一种多任务解决的概率形式,即p(outputjinput;(在[106]中也采用了类似的方法),它根据输入和任务信息预测输出。为了对这种条件概率进行建模,语言文本可以自然地作为一种统一的方式来格式化输入、输出和任务信息。通过这种方式,解决任务的过程可以被转换为生成解决方案文本的单词预测问题。此外,他们对这一想法提出了更正式的主张:“由于(特定于任务的)监督目标与无监督(语言建模)目标相同,但只在序列的子集上进行评估,因此无监督目标的全局最小值也是有监督目标(对于各种任务)的全局最小值”[26]。对这一主张的基本理解是,每个(NLP)任务都可以被认为是基于世界文本的一个子集的单词预测问题。因此,如果训练无监督语言模型具有恢复世界文本的足够能力,则可以解决各种任务。GPT-2论文中的这些早期讨论在Jensen Huang对Ilya Sutskever的采访中得到了呼应:“神经网络学习的是产生文本过程的一些表征。这段文字实际上是世界的投影。你预测下一个单词越准确,保真度就越高,你在这个过程中获得的分辨率就越多……”
能力的飞跃。尽管GPT-2旨在成为一个"无监督多任务学习器",但与有监督的微调最先进方法相比,它的性能总体上较差。虽然它具有相对较小的模型大小,但它在下游任务中进行了广泛的微调,特别是对话任务[107,108]。基于GPT-2, GPT-3通过扩展(几乎相同的)生成式预训练架构,展示了关键能力的飞跃。
- GPT-3。GPT-3[55]于2020年发布,将模型参数扩展到越来越大的175B。在GPT-3的论文中,它正式介绍了上下文学习(ICL)的概念,它以少样本或零样本的方式使用LLMs。ICL可以教导(或指导)llm以自然语言文本的形式理解任务。通过ICL, llm的预训练和利用收敛于相同的语言建模范式:预训练根据上下文预测以下文本序列,而ICL预测正确的任务解决方案,给定任务描述和演示,也可以将其格式化为文本序列。GPT-3不仅在各种NLP任务中表现出非常优秀的性能,而且在一些需要推理或领域自适应能力的特殊设计任务上也表现出非常优秀的性能。尽管GPT-3的论文没有明确讨论llm的突现能力,但我们可以观察到可能超越基本尺度定律[30]的较大性能飞跃,例如,越大的模型具有明显更强的ICL能力(见GPT-3论文[55]的原始图1.2)。总的来说,GPT-3可以被视为从plm到llm旅程中的一个重要里程碑。经验证明,将神经网络扩展到很大的规模可以导致模型容量的大幅增加。
能力的提高。由于能力强大,GPT- 3已经成为为OpenAI开发更强大的llm的基础模型。总的来说,OpenAI探索了两种主要的方法来进一步改进GPT-3模型,即使用代码数据进行训练和与人类偏好对齐,具体如下。
- 对代码数据进行训练。原始GPT-3模型(在纯文本上进行预训练)的一个主要限制是缺乏对复杂任务的推理能力,例如完成代码和解决数学问题。为了增强这种能力,Codex[89]于2021年7月由OpenAI提出,这是一个在大量GitHub代码语料库上进行微调的GPT模型。它证明了Codex可以解决非常困难的编程问题,也导致了解决数学问题的显著性能提高[109]。此外,2022年1月报告了一种训练文本和代码嵌入的对比方法[110],该方法被证明可以改进一系列相关任务(即线性探针分类、文本搜索和代码搜索)。实际上,GPT-3.5模型是在基于代码的GPT模型(code- davincin -002)的基础上开发的,这表明在代码数据上进行训练对于提高GPT模型的模型能力,尤其是推理能力是非常有用的。此外,还有一种推测认为,对代码数据进行训练可以大大提高LLMs[47]的思维链提示能力,但仍值得进一步研究,验证更彻底。
- 人类的对齐。人类对齐的相关研究可以追溯到OpenAI的2017年(或更早):OpenAI博客上发表了一篇题为“从人类偏好中学习”15的博客文章,描述了一项工作,应用强化学习(RL)从人类注释的偏好比较中学习70。在这篇强化学习论文[70]发布后不久,近端策略优化(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算法对减轻LLMs产生危害或有毒内容的问题特别有用,这是LLMs在实践中安全部署的关键。OpenAI在一篇技术文章[113]中描述了他们的对齐研究方法,总结了三个有希望的方向:“训练AI系统使用人工反馈,协助人工评估和进行对齐研究”。
这些增强技术使改进的GPT-3模型具有更强的能力,OpenAI将其称为GPT-3.5模型(参见3.1节中关于OpenAI API的讨论)。
语言模型的里程碑。在所有探索努力的基础上,OpenAI实现了两个主要里程碑,即ChatGPT[114]和GPT-4[46],大大提高了现有AI系统的容量门槛。
- ChatGPT。2022年11月,OpenAI发布了基于GPT模型(GPT-3.5和GPT-4)的对话模型ChatGPT。正如官方博客文章[114]所介绍的那样,ChatGPT以与InstructGPT类似的方式进行训练(在原始文章中称为“InstructGPT的兄弟模型”),同时针对对话进行了特别优化。他们报告了在数据收集设置上ChatGPT和InstructGPT的训练之间的差异:人工生成的对话(同时扮演用户和AI的角色)以对话格式与InstructGPT数据集相结合,用于训练ChatGPT。ChatGPT在与人类交流中表现出了卓越的能力:拥有大量的知识,对数学问题进行推理的技能,在多轮对话中准确地追踪上下文,并与人类的价值观保持良好一致,以确保安全使用。后来,ChatGPT也支持了插件机制,进一步扩展了ChatGPT在现有工具或应用中的功能。到目前为止,它似乎是人工智能历史上最强大的聊天机器人。ChatGPT的提出对未来的人工智能研究具有重要影响,有助于探索类人人工智能系统。
- GPT-4。作为另一个显著的进展,2023年3月发布了GPT-4[46],将文本输入扩展到多模态信号。总体而言,与GPT-3.5相比,GPT-4在解决复杂任务方面具有更强的能力,在许多评测任务上表现出较大的性能提升。最近的一项研究[41]通过对人工生成的问题进行定性测试来调查GPT-4的能力,跨越了一系列不同的困难任务,表明GPT-4可以实现比之前的GPT模型(如ChatGPT)更优越的性能。此外,由于六个月的迭代对齐(在RLHF训练中有额外的安全奖励信号),GPT-4对恶意或挑衅性查询的反应更安全。在技术报告中,OpenAI强调了如何安全开发GPT-4,并应用了一些干预策略来缓解llm可能存在的问题,如幻觉、隐私和过度依赖。例如,他们引入了名为read teaming[115]的机制来减少有害或有毒内容的生成。另一个重要的方面是,GPT- 4是在一个完善的深度学习基础上通过改进的优化方法开发的。他们引入了一种名为可预测扩展的新机制,可以在模型训练期间使用少量计算来准确预测最终性能。
尽管取得了巨大的进展,但这些优秀的llm仍然存在局限性,例如,在某些特定背景下产生带有事实错误或潜在风险反应的幻觉[46]。llm的更多限制或问题将在第7节讨论。它提出了长期以来的研究挑战,以开发更强大、更安全的llm。从工程角度来看,OpenAI采用了迭代部署策略[116],遵循五个阶段的开发部署生命周期开发模型和产品,旨在有效降低使用模型的潜在风险。在下文中,我们将深入探讨技术细节,以便具体了解它们是如何开发的。
3 LLMs资源
考虑到具有挑战性的技术问题和巨大的计算资源需求,开发或重现llm绝非易事。一种可行的方法是从现有的llm中学习经验,并重用公开可用的资源以进行增量开发或实验研究。在本节中,我们简要总结了用于开发llm的公开可用资源,包括模型检查点(或api)、语料库和库。
3.1 公开可用的模型检查点或api
考虑到模型预训练的巨大成本,训练良好的模型检查点对研究界的llm的研究和开发至关重要。由于参数规模是使用llm的关键因素,将这些公共模型分为两个规模级别(即数百亿参数和数千亿参数),这有助于用户根据其资源预算识别合适的资源。此外,对于推理,我们可以直接使用公共api来执行我们的任务,而无需在本地运行模型。接下来,我们介绍公开可用的模型检查点和api。
具有数百亿参数的模型。除LLaMA57和NLLB82外,该类模型的参数规模大多在10B到20B之间。在这个范围内的其他模型包括mT5[74]、PanGu-α[75]、T0[28]、GPTNeoX-20B[78]、CodeGen[77]、UL2[80]、Flan-T5[64]和mT0[84]。其中,Flan-T5 (11B版本)可以作为指令调优研究的首选模型,因为它从三个方面探索了指令调优[64]:增加任务数量,扩展模型大小,以及利用思维链提示数据进行微调。此外,CodeGen (11B版本)作为一种用于代码生成的自回归语言模型,可以作为探索代码生成能力的一个很好的候选。文中还提出了一个专门用于多轮程序合成的新基准MTPB[77],它由115个专家生成的问题组成。为了解决这些问题,llm需要获得足够的编程知识(例如,数学、数组操作和算法)。对于多语言任务,mT0 (13B版本)可能是一个很好的候选模型,它已经在具有多语言提示的多语言任务上进行了微调。此外,PanGu- α[75]在基于深度学习框架MindSpore[117]开发的中文下游任务中,在零样本或少样本设置下表现出良好的性能。请注意,PanGu-α[75]包含多个版本的模型(多达200B个参数),而最大的公开版本有13B个参数。作为最新的版本,LLaMA (65B版本)[57]包含的参数大约是其他模型的5倍,在与指令遵循相关的任务中表现出卓越的性能。由于其开放性和有效性,LLaMA受到了研究界的极大关注,许多工作[118-121]致力于微调或持续预训练其不同的模型版本以实现新模型或工具。通常,这种规模的预训练模型需要数百个甚至数千个gpu或tpu。例如,GPT-NeoX-20B使用12台supermicro服务器,每个服务器配备8个NVIDIA A100- SXM4-40GB gpu,而LLaMA使用2048个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节点的集群。
llm的公共API。api不是直接使用模型副本,而是为普通用户提供了一种更方便的方式来使用llm,而不需要在本地运行模型。作为使用llm的代表性接口,gpt系列模型[46,55,61,89]的api已被学术界和工业界广泛使用16。OpenAI为GPT-3系列中的模型提供了七个主要接口:ada、babbage、curie、davinci (GPT-3系列中最强大的版本)、text-ada-001、text-babbage-001和text-curie-001。其中,前4个接口可以在OpenAI主机服务器上进一步微调。特别地,巴贝奇、居里和达芬奇分别对应GPT-3 (1B)、GPT-3 (6.7B)和GPT-3 (175B)模型,分别为[55]。此外,还有两个与Codex[89]相关的api,称为code-cushman-001 (Codex (12B)[89]的强大多语言版本)和code- davincei -002。此外,GPT-3.5系列包括一个基本模型代码-达芬奇-002和三个增强版本,即text-达芬奇-002、text-达芬奇-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接口的选择取决于具体的应用场景和响应需求。详细用法可以在他们的项目网站上找到。
3.2 常用语料库
与早期的plm相比,由大量参数组成的llm需要更多的训练数据,这些数据涵盖了广泛的内容。针对这一需求,已经发布了越来越多的可访问训练数据集用于研究。在本节中,我们将简要总结几种用于训练llm的广泛使用的语料库。根据它们的内容类型,我们将这些语料库分为六组:书籍、CommonCrawl、Reddit链接、Wikipedia、代码和其他。
书。BookCorpus[122]是以前小规模模型(如GPT[105]和GPT-2[26])中常用的数据集,由超过1.1万本书组成,涵盖了广泛的主题和类型(如小说和传记)。另一个大型图书语料库是Project Gutenberg[123],由超过70,000本文学书籍组成,包括小说、散文、诗歌、戏剧、历史、科学、哲学和其他公共领域的作品。它是目前最大的开源藏书之一,用于MT-NLG[97]和LLaMA[57]的训练。GPT-3[55]中使用的Books1[55]和Books2[55]比BookCorpus要大得多,但目前还没有公开发布。
CommonCrawl。CommonCrawl[132]是最大的开源web爬行数据库之一,包含petabytescale的数据量,已被广泛用作现有llm的训练数据。由于整个数据集非常庞大,现有的研究主要是从其中抽取特定时间段内的网页子集。然而,由于web数据中普遍存在噪声和低质量的信息,在使用前需要进行数据预处理。基于CommonCrawl,现有工作中常用的过滤数据集有4个:C4[73]、CCStories[124]、CC-News[27]和RealNews[125]。庞大的干净爬取语料库(C4)包括五个变体,即en (806G), en。noclean (6T)、realnewslike (36G)、webtextlike (17G)和multilingual (38T)。en版本已被用于预训练T5 [73], LaMDA [63], Gopher[59]和UL2[80]。多语言C4,也称为mC4,已在mT5中使用[74]。CC-Stories (31G)由CommonCrawl数据的子集组成,其中的内容以类似故事的方式制作。而CC-Stories的原始来源目前无法获得,因此表2中包含了一个复制版本CC-Stories- r[133]。此外,从CommonCrawl中提取的两个新闻语料库REALNEWS (120G)和CC-News (76G)也常被用作预训练数据。
Reddit的链接。Reddit是一个社交媒体平台,用户可以提交链接和文本帖子,其他人可以通过“赞”或“反对票”对这些内容进行投票。高支持率的帖子通常被认为是有用的,可以用来创建高质量的数据集。WebText[26]是一个著名的语料库,由来自Reddit的高投票链接组成,但它不公开可用。作为替代方案,有一个现成的开源替代方案OpenWebText[126]。另一个从Reddit中提取的语料库是PushShift。io[127],一个实时更新的数据集,由Reddit自创建之日起的历史数据组成。Pushshift不仅提供了每月的数据转储,而且还提供了有用的实用工具来支持用户搜索、总结和对整个数据集进行初步调查。这使得用户可以轻松地收集和处理Reddit数据。
维基百科。维基百科[128]是一个在线百科全书,包含大量不同主题的高质量文章。这些文章大多是说明性的写作风格(有辅助参考文献),涵盖了广泛的语言和领域。通常,仅英语过滤版本的维基百科被广泛用于大多数llm中(例如,GPT-3 [55], LaMDA[63]和LLaMA[57])。维基百科有多种语言,所以它可以在多语言设置中使用。
代码。为了收集代码数据,现有的工作主要是从互联网上爬取开源授权代码。两个主要的源代码是开源许可下的公共代码库(如GitHub)和与代码相关的问答平台(如StackOverflow)。谷歌公开发布了BigQuery数据集[129],其中包括大量不同编程语言的开源许可代码片段,作为代表性的代码数据集。CodeGen使用BIGQUERY [77] (BIGQUERY数据集的一个子集)来训练CodeGen的多语言版本(CodeGen- multi)。
其他。Pile[130]是一个大规模、多样化和开源的文本数据集,由来自多个来源的超过800GB的数据组成,包括书籍、网站、代码、科学论文和社交媒体平台。它由22个不同的高质量子集构建而成。Pile数据集被广泛应用于不同参数规模的模型中,如GPT-J (6B)[134]、CodeGen (16B)[77]和MegatronTuring NLG (530B)[97]。此外,ROOTS[131]由各种较小的数据集(共1.61 TB文本)组成,涵盖59种不同的语言(包括自然语言和编程语言),这些数据集已被用于训练BLOOM[69]。
在实践中,通常需要混合不同的数据源来预训练llm(参见图2),而不是单一的语料库。因此,现有研究通常将多个现成的数据集(如C4、OpenWebText和the Pile)混合在一起,然后进行进一步处理以获得预训练语料。此外,为了训练适应特定应用的llm,从相关来源(如Wikipedia和BigQuery)中提取数据以丰富预训练数据中的相应信息也很重要。为了快速了解现有llm中使用的数据源,本文提出三个代表性的llm的预训练语料库:
- GPT-3 (175B)[55]在包含300B个token的混合数据集上进行训练,包括CommonCrawl[132]、WebText2[55]、Books1[55]、Books2[55]和Wikipedia[128]。
- PaLM (540B)[56]使用780B token的预训练数据集,这些token来自社交媒体对话、过滤后的网页、书籍、Github、多语言维基百科和新闻。
- LLaMA[57]从各种来源提取训练数据,包括CommonCrawl、C4[73]、Github、Wikipedia、books、ArXiv和StackExchange。LLaMA (6B)和LLaMA (13B)的训练数据大小为1.0T token,而LLaMA (32B)和LLaMA (65B)的训练数据大小为1.4T token。
3.3 算法库资源
在这一部分中,我们简要介绍了一系列用于开发llm的可用库。
-
Transformers[135]是一个开源Python库,用于使用Transformer架构构建模型,由Hugging Face开发和维护。它具有简单和友好的API,使其易于使用和自定义各种预训练模型。它是一个强大的库,拥有一个庞大而活跃的用户和开发人员社区,他们定期更新和改进模型和算法。
-
DeepSpeed [64] 是由 Microsoft 开发的深度学习优化库(与 PyTorch 兼容),已用于训练多个大语言模型,例如MT-NLG[97] 和 BLOOM [68]。它提供了各种分布式训练优化技术的支持,例如内存优化(ZeRO 技术、梯度检查点)和管道并行。
-
Megatron-LM[66-68]是由NVIDIA开发的用于训练大规模语言模型的深度学习库。它还为分布式训练提供了丰富的优化技术,包括模型和数据并行,混合精度训练和FlashAttention。这些优化技术可以在很大程度上提高训练效率和速度,从而实现跨gpu的高效分布式训练。
-
JAX[136]是谷歌开发的用于高性能机器学习算法的Python库,允许用户通过硬件加速(例如GPU或TPU)轻松地对数组进行计算。它支持在各种设备上进行高效计算,还支持一些特色功能,如自动区分和即时编译。
-
Colossal-AI[137]是由HPC-AI Tech开发的用于训练大规模AI模型的深度学习库。它基于PyTorch实现,支持丰富的并行训练策略集合。此外,它还可以使用PatrickStar[138]提出的方法优化异构内存管理。最近,一个名为ColossalChat[121]的类似聊天gpt的模型已经公开发布了两个版本(7B和13B),它们是使用基于LLaMA[57]的colossalai开发的。
-
BMTrain[139]是由OpenBMB开发的一个高效的库,用于以分布式方式训练具有大规模参数的模型,它强调代码简单、低资源和高可用性。BMTrain已经将几个常见的llm(例如Flan-T5[64]和GLM[83])合并到其ModelCenter中,开发人员可以直接使用这些模型。
-
FastMoE[140]是一个专门用于MoE(即专家混合)模型的训练库。它基于PyTorch开发,在设计上兼顾了效率和用户友好性。FastMoE简化了将Transformer模型转换为MoE模型的过程,并在训练期间同时支持数据并行和模型并行。
除了上述库资源外,现有的深度学习框架(如PyTorch[141]、TensorFlow[142]、MXNet[143]、PaddlePaddle[144]、MindSpore[117]和OneFlow[145])也提供了对并行算法的支持,这些算法通常用于训练大规模模型。
4 预训练
预训练奠定了llm能力的基础。通过在大规模语料库上进行预训练,llm可以获得基本的语言理解和生成技能[55,56]。在此过程中,预训练语料库的规模和质量对llm获得强大的能力至关重要。此外,为了有效地预训练llm,需要精心设计模型架构、加速方法和优化技术。接下来,我们首先讨论4.1节中的数据收集和处理,然后在4.2节中介绍常用的模型架构,最后在4.3节中介绍稳定高效优化llm的训练技术。
4.1 数据收集
与小规模语言模型相比,llm对模型预训练高质量数据的需求更强,其模型能力很大程度上依赖于预训练语料库及其预处理方式。讨论了预训练数据的收集和处理,包括数据源、预处理方法,并对预训练数据如何影响llm的性能进行了重要分析。
4.1.1 数据源
大量的自然语言语料库是开发一个强大的LLM的关键。现有的llm主要利用各种公共文本数据集的混合作为预训练语料库。图2显示了一些代表性llm的预训练数据来源的分布。
预训练语料库的来源大致可以分为两类:通用数据和专用数据。由于一般数据,如网页、书籍和对话文本,由于其庞大、多样化和可访问性,大多数llm都使用这些数据[55,56,81],这可以增强llm的语言建模和泛化能力。鉴于llm表现出的令人印象深刻的泛化能力,也有研究将其预训练语料库扩展到更专业的数据集,如多语言数据、科学数据和代码,使llm具有特定的任务解决能力[35,56,77]。接下来,我们将描述这两种类型的预训练数据源及其对llm的影响。有关常用语料库的详细介绍,请参阅3.2节。
通用文本数据。正如我们在图2中看到的,绝大多数llm采用通用的预训练数据,如网页、书籍和对话文本,这些数据提供了各种主题的丰富文本来源。接下来,我们简要总结了三种重要的通用数据。
- 网页。由于互联网的普及,产生了各种类型的数据,这使得llm能够获得多样化的语言知识并增强其泛化能力[26,73]。为了方便使用这些数据资源,在以往的工作中,从网络抓取了大量的数据,如CommonCrawl[132]。然而,爬取的web数据往往既包含维基百科等高质量文本,也包含垃圾邮件等低质量文本,因此对网页进行过滤和处理对提高数据质量至关重要。
- 对话文本。会话数据可以增强llm的会话能力[81],并可能提高它们在一系列问答任务[56]上的性能。研究人员可以利用公共对话语料库的子集(例如,PushShift。io Reddit语料库)[127,146]或从在线社交媒体收集对话数据。由于在线会话数据通常涉及多个参与者之间的讨论,一种有效的处理方法是将会话转换为树结构,使话语与其回应的话语相关联。通过这种方式,可以将多方对话树划分为多个子对话,并将这些子对话收集到预训练语料库中。此外,一个潜在的风险是将对话数据过度整合到llm中可能会产生副作用[81]:陈述性指令和直接疑问句被错误地视为对话的开始,从而导致指令的有效性下降。
- 书。与其他语料库相比,书籍提供了正式长文本的重要来源,这可能有利于llm学习语言知识、建模长期依赖以及生成叙述性和连贯的文本。为获取开源图书数据,现有研究通常采用Pile数据集中的Books3和Bookcorpus2数据集[130]。
专门的文本数据。专门的数据集有助于提高llm在下游任务上的特定能力。接下来,我们介绍三种特殊的数据。
- 多语言文本。除了目标语文本外,集成多语言语料库可以增强语言理解和语言生成的多语言能力。例如,BLOOM[69]和PaLM[56]在其预训练语料库中分别策划了涵盖46和122种语言的多语言数据。这些模型在多语言任务中表现出了令人印象深刻的性能,如翻译、多语言摘要和多语言问答,并取得了与在目标语言语料库上进行微调的最先进模型相当或优越的性能。
- 科学文本。人类对科学的探索伴随着科学出版物的不断增长。为了增强对llm科学知识的理解[35,147],将科学语料库纳入模型预训练[35,147]是有用的。通过对大量科学文本进行预训练,llm可以在科学和推理任务中取得令人印象深刻的性能[148]。在科学语料库建设方面,现有工作主要收集arXiv论文、科学教材、数学网页等相关科学资源。由于科学领域中数据的复杂性,如数学符号和蛋白质序列,通常需要特定的标记化和预处理技术将这些不同格式的数据转换为统一的形式,以供语言模型处理。
- 代码。程序合成在研究界已被广泛研究[89,149-152],特别是使用在代码上训练的plm[134, 153]。然而,对于这些plm(如GPT-J[134])来说,生成高质量和准确的程序仍然具有挑战性。最近的研究[89,152]发现,在大量代码语料库上训练llm可以大大提高合成程序的质量。生成的程序可以成功地通过专家设计的单元测试用例[89]或解决具有竞争性的编程问题[98]。通常,两种类型的代码语料库通常用于预训练llm。第一个来源来自于编程问答社区,如Stack Exchange[154,155]。第二个来源来自公共软件仓库,如GitHub[77, 89, 152],其中收集了代码数据(包括注释和文档字符串)以供使用。与自然语言文本相比,代码是一种编程语言的格式,对应长程依赖和精确的执行逻辑[156]。最近的一项研究[47]也推测,对代码的训练可能是复杂推理能力的来源(例如,思维链能力[33])。此外,有研究表明,将推理任务格式化为代码可以帮助llm生成更准确的结果[156,157]。
4.1.2 数据预处理
在收集了大量的文本数据后,为了构建预训练语料库,对数据进行预处理是必不可少的,特别是去除噪声、冗余、不相关和潜在的有毒数据[56,59],这在很大程度上影响了llm的容量和性能。在这一部分中,回顾了详细的数据预处理策略,以提高收集的数据的质量[59,69,96]。图3展示了对llm预训练数据进行预处理的典型流程。
过滤质量。现有工作一般采用两种方法从收集的语料库中去除低质量数据:(1)基于分类器的;(2)基于启发式的。前者基于高质量的文本训练一个选择分类器,并利用它来识别和过滤低质量的数据。通常,这些方法[55,56,96]用精心策划的数据(如维基百科页面)作为正例,样本候选数据作为负例,训练一个二元分类器,并预测衡量每个数据示例质量的分数。然而,一些研究[59,96]也发现,基于分类器的方法可能会无意中删除方言、口语化和社会集合语言中的高质量文本,这可能会导致预训练语料库中的偏见,并降低语料库的多样性。作为第二种方法,一些研究,如BLOOM[69]和Gopher[59],采用基于启发式的方法,通过一套设计良好的规则来消除低质量文本,总结如下:
- 基于语言的过滤。如果LLM主要用于某些语言的任务,则可以过滤其他语言的文本。
- 基于度量的过滤。生成文本的评价指标,例如困惑度,可以用来检测和删除不自然的句子。
- 基于统计的过滤。语料库中的标点符号分布、码字比、句子长度等统计特征可以用来衡量文本质量,并过滤低质量数据。
- 基于关键字过滤。基于特定的关键词集,可以识别并删除文本中噪声或无用的元素,如HTML标签、超链接、模板、攻击性词汇等。
去重。已有工作[158]发现,语料库中的重复数据会降低语言模型的多样性,这可能会导致训练过程变得不稳定,从而影响模型性能。因此,有必要对预训练语料进行去重。特别地,重复数据删除可以在不同的粒度上执行,包括句子级别的重复数据删除、文档级别的重复数据删除和数据集级别的重复数据删除。首先,应该删除包含重复单词和短语的低质量句子,因为它们可能会在语言建模中引入重复的模式[159]。在文档层面,现有研究大多依靠文档之间的地物重叠率(如单词和n元语法重叠)来检测和删除包含相似内容的重复文档[57,59,69,160]。此外,为了避免数据集污染问题,通过从训练集中删除可能的重复文本,防止训练集和评估集[56]之间的重叠也是至关重要的。已有研究表明,三种层次的去重对提高llm的训练是有用的[56,161],在实践中应该联合使用。
隐私编辑。大多数预训练文本数据来自网络,包括用户生成的涉及敏感或个人信息的内容,这可能会增加隐私泄露的风险[162]。因此,有必要从预训练语料库中删除个人身份信息(PII)。一种直接有效的方法是采用基于规则的方法,如关键词识别,来检测和删除名称、地址和电话号码等ii[131]。此外,研究者还发现llm在隐私攻击下的脆弱性可以归因于预训练语料库中存在重复的PII数据[163]。因此,去重也可以在一定程度上降低隐私风险。
分词。分词也是数据预处理的关键步骤。它旨在将原始文本分割为单个词元序列,随后将其用作llm的输入。虽然利用现有的分词器是方便的(例如,OPT[81]和GPT-3[55]利用了GPT-2[26]的分词器),但使用专门为预训练语料库设计的分词器可能是非常有益的[69],特别是对于由不同域、语言和格式组成的语料库。因此,最近的几个llm使用SentencePiece专门为预训练语料库训练定制的分词器[164]。采用字节级字节对编码(Byte -level Byte Pair Encoding, BPE)算法[165]保证分词后的信息是无损的[56,59]。而BPE中的规范化技术,如NFKC[166],可能会降低分词性能[34,59,69]。
注:token可以理解为最小语义单元,翻译为词元 (当然翻译成令牌、词都行),可以是 word/char/subword。
tokenization是指分词,目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,供后续任务 (比如学习embedding 或者作为高级模型的输入) 使用。
4.1.3 预训练数据对llm的影响
与小规模plm不同,由于对计算资源的巨大需求,llm的预训练通常无法多次迭代。因此,在训练法学硕士之前,构建一个准备充分的预训练语料库尤为重要。在这一部分中,我们讨论了预训练语料库的质量和分布如何潜在地影响llm的性能。
混合来源。如前所述,来自不同领域或场景的预训练数据具有不同的语言特征或语义知识。通过对来自不同来源的混合文本数据进行预训练,法学硕士可以获得广泛的知识范围,并可能表现出强大的泛化能力。当混合不同的数据源时,需要仔细设置预训练数据的分布,因为这也可能影响llm在下游任务上的性能[59]。Gopher[59]对数据分布进行消融实验,考察混合源对下游任务的影响。在LAMBADA数据集[167]上的实验结果表明,增加图书数据的比例可以提高模型从文本中捕获长期依赖关系的能力,增加C4数据集[73]的比例可以提高C4验证数据集的性能[59]。然而,作为一个副作用,对某一领域的过多数据进行训练会影响llm在其他领域的泛化能力[35,59]。因此,建议研究人员仔细确定预训练语料库中不同领域数据的比例,以开发更符合其特定需求的法学硕士。读者可以参考图2来比较不同llm的数据源。
预训练数据量。为了预训练一个有效的LLM,重要的是收集足够的高质量数据,满足LLM的数据量需求。已有研究发现,随着LLM中参数规模的增大,需要更多的数据来训练模型[34,57]:在模型性能方面,数据规模也存在与模型规模相似的比例规律。最近的一项研究表明,由于预训练数据不足,许多现有的llm存在次优训练问题[34]。通过进行广泛的实验,它进一步证明了在给定的计算预算下,以相同的规模增加模型大小和数据大小可以导致计算效率更高的模型(即Chinchilla模型)。最近,LLaMA[57]表明,在更多的数据和更长的训练时间下,较小的模型也可以获得良好的性能。综上所述,我们建议研究人员在充分训练模型时,特别是在缩放模型参数时,应该更加关注高质量数据的数量。
预训练数据的质量。现有的研究表明,在低质量的语料库上进行预训练,如有噪声的、有毒的和重复的数据,可能会损害模型的性能[59,158,160,163]。为了开发一个性能良好的法学硕士,同时考虑收集的训练数据的数量和质量是至关重要的。最近的研究,如T5[73]、GLaM[96]和Gopher[59],研究了数据质量对下游任务性能的影响。通过比较在过滤和未过滤的语料库上训练的模型的性能,他们得出了相同的结论,即在清洗过的数据上预训练llm可以提高性能。更具体地说,数据的重复可能会导致“双下降”(指性能最初下降,随后提高的现象)[158,168],甚至会使训练过程不堪重负[158]。此外,有研究表明,重复数据会降低llm从上下文中复制的能力,这可能会进一步影响llm使用上下文学习的泛化能力[158]。因此,如文献[56,59,69]所建议的,在预训练语料库上谨慎地加入预处理方法(如4.1.2节所示),以提高训练过程的稳定性,避免影响模型性能。
4.2 架构
在本节中,我们回顾了llm的架构设计,即主流架构、预训练目标和详细配置。表3列出了几个具有公开细节的代表性llm模型。
4.2.1 主流架构
由于出色的并行性和容量,Transformer架构[22]已经成为开发各种llm的事实上的骨干,使得将语言模型扩展到数百或数千亿个参数成为可能。总的来说,现有llm的主流架构大致可以分为三大类,即编码器-解码器、因果解码器和前缀解码器,如图4所示。
Encoder-decoder架构。普通的Transformer模型建立在编码器-解码器架构[22]上,该架构由两个堆栈的Transformer块组成,分别为编码器和解码器。编码器采用堆叠多头自注意力层对输入序列进行编码以生成其潜在表示,而解码器对这些表示进行交叉注意力并自回归生成目标序列。编码器-解码器plm(如T5[73]和BART[24])在各种NLP任务上显示了有效性。到目前为止,只有少量的llm是基于编码器-解码器架构构建的,例如Flan-T5[64]。我们将在4.2.4节详细讨论体系结构的选择。
因果解码器架构。因果解码器架构包含了单向注意力掩码,以保证每个输入token只能关注过去的token和自身。输入和输出标记在解码器中以相同的方式处理。作为这种架构的代表性语言模型,gpt系列模型[26,55,105]是基于causaldecoder架构开发的。特别是,GPT-3[55]成功地证明了这种架构的有效性,也展示了llm惊人的上下文学习能力。有趣的是,GPT-1[105]和GPT-2[26]并没有表现出像GPT-3中那样优越的能力,扩展似乎在增加这种模型架构的模型容量方面起着重要作用。到目前为止,因果解码器已被各种现有的llm广泛采用作为llm的架构,如OPT [81], BLOOM[69]和Gopher[59]。请注意,下面讨论的因果解码器和前缀解码器都属于仅解码器的体系结构。而在提到“仅解码器架构”时,除特别说明外,主要指现有文献中的因果解码器架构。
前缀解码器架构。前缀解码器架构(又称非因果解码器[169])修订了因果解码器的屏蔽机制,以使其能够对前缀token[170]进行双向注意,并仅对生成的token进行单向注意。这样,就像编码器-解码器架构一样,前缀解码器可以对前缀序列进行双向编码,并逐个自回归地预测输出token,其中在编码和解码期间共享相同的参数。与其从头开始预训练,一个实用的建议是不断训练因果解码器,然后将其转换为前缀解码器,以加速收敛[29],例如U-PaLM[102]来自PaLM[56]。现有代表性的基于前缀解码器的LLMs包括GLM- 130B[83]和U-PaLM[102]。
对于这三种类型的架构,我们还可以考虑通过专家混合(MoE)缩放来扩展它们,其中每个输入的神经网络权重子集被稀疏激活,例如开关Transformer[25]和GLaM[96]。已有研究表明,通过增加专家数量或总参数大小可以观察到实质性的性能改进[171]。
4.2.2详细配置
自Transformer[22]推出以来,人们提出了各种改进,以提高其训练稳定性、性能和计算效率。在本部分中,我们将讨论Transformer的四个主要部分的相应配置,包括归一化、位置嵌入、激活函数和注意力和偏差。为了使这个调查更加独立,我们在表4中给出了这些配置的详细公式。
正则化。训练不稳定是预训练llm的一个挑战性问题。为了缓解这个问题,Transformer架构中广泛采用层归一化(layer Norm, LN)[173]。LN的位置对llm的性能至关重要。虽然初始Transformer[22]使用post-LN,但大多数llm使用pre-LN来进行更稳定的训练,尽管性能下降[182]。Sandwich-LN[172]在pre-LN的基础上,在残差连接之前增加了额外的LN,以避免值爆炸。然而,研究发现Sandwich-LN有时无法稳定llm的训练,并可能导致训练崩溃[83]。最近,一些先进的规范化技术被提出作为LN的替代方案。在Gopher[59]和Chinchilla[34]中,由于其在训练速度和性能上的优势,采用了RMS Norm[174][183]。与LN相比,DeepNorm[175]在保证训练稳定性方面表现出了更好的能力,经过后归一化的GLM-130B采用了DeepNorm。此外,在嵌入层之后添加额外的LN也可以稳定llm的训练。然而,它往往会导致显著的性能下降[184],这在最近的几个llm中已被消除[69]。
激活函数。为了获得良好的性能,在前馈网络中还需要适当地设置激活函数。在现有的llm中,GeLU激活[185]被广泛使用。此外,在最新的LLMs(如PaLM和LaMDA)中,也使用了GLU激活的变体[179,186],特别是SwiGLU和GeGLU变体,它们在实践中往往取得了更好的性能[183]。然而,与GeLU相比,它们在前馈网络中需要额外的参数(约50%)[184]。
位置编码。由于Transformer中的自注意力模块是排列等变的,位置编码被用来注入绝对或相对位置信息来对序列进行建模。在普通Transformer[22]中,绝对位置编码有两种变体,即正弦函数和学习位置编码,后者通常在llm中使用。与绝对位置嵌入不同,相对位置编码根据键和查询之间的偏移量生成编码[73],因此它可以在比训练期间看到的序列更长的序列上表现良好,即外推[181]。不在场证明[181]使用基于键和查询之间的距离的惩罚来偏差注意力分数。实证结果表明,与其他位置编码[29]相比,它具有更好的零样本泛化能力和更强的外推能力。此外,在RoPE[180]中,通过设置基于绝对位置的特定旋转矩阵,可以利用相对位置信息计算键和查询之间的得分,这有助于对长序列进行建模。因此,RoPE在最新的几个llm中被广泛采用[56,57,83]。
注意力和偏差。除了原始Transformer[22]中的完全自注意力外,GPT-3中使用了计算复杂度较低的稀疏注意力(即因子化注意力[55,187])。为了有效和高效地对较长的序列进行建模,人们通过引入特殊的注意力模式[188,189]或考虑GPU内存访问(即FlashAttention[190])进行了更多的尝试。此外,继原始Transformer之后,大多数llm保持每个密集核和层范数的偏差。然而,在PaLM[56]和Galactica[35]中,偏差被消除了。这表明无偏差可以增强LLMs[56]的训练稳定性。
综上所述,我们总结了现有文献中有关详细配置的建议。为了获得更强的泛化性和训练稳定性,建议选择pre RMS范数进行层归一化,并将SwiGLU或GeGLU作为激活函数。然而,LN可能不会在嵌入层后立即使用,这可能会导致性能下降。此外,对于位置嵌入,RoPE或不在场证明是更好的选择,因为它在长序列上表现更好。
4.2.3 预训练任务
预训练是将大规模语料库中的一般知识编码成海量模型参数的关键。对于训练llm,有两种常用的预训练任务,即语言建模和去噪自动编码。
语言建模。语言建模任务(LM)是预训练纯解码器llm最常用的目标,例如GPT3[55]和PaLM[56]。给定一个令牌序列
x
=
{
x
1
,
…
,
x
n
}
,
L
M
mathbf{x}=left{x_{1}, ldots, x_{n}
ight},LM
x={x1,…,xn},LM任务的目的是基于序列中前面的标记x<i自回归地预测目标标记xi。一般的培训目标是使以下可能性最大化:
L
L
M
(
x
)
=
∑
i
=
1
n
log
P
(
x
i
∣
x
<
i
)
.
(4)
mathcal{L}_{L M}(mathbf{x})=sum_{i=1}^{n} log Pleft(x_{i} mid x_{<i}
ight) . ag{4}
LLM(x)=i=1∑nlogP(xi∣x<i).(4)
由于大多数语言任务都可以被转换为基于输入的预测问题,因此这些仅解码器的llm可能对隐式学习如何以统一的LM方式完成这些任务具有潜在的优势。一些研究还表明,只有解码器的llm可以通过自回归预测下一个标记自然地转移到某些任务中[26,55],而无需微调。LM的一个重要变体是前缀语言建模任务,该任务是为具有前缀解码器架构的预训练模型而设计的。在计算前缀语言建模的损失时,不会使用随机选择的前缀中的标记。在预训练中看到的token数量相同的情况下,前缀语言建模的性能略差于语言建模,因为模型预训练涉及的序列中的token较少[29]。
去噪自编码。除了传统的LM,去噪自动编码任务(DAE)也被广泛用于语言模型的预训练[24,73]。DAE任务的输入xnx~是带有随机替换的跨度的损坏文本。然后,训练语言模型以恢复被替换的标记
x
x
~
mathbf{x}_{ackslash ilde{mathbf{x}}}
xx~。形式上,DAE的训练目标表示为:
L
D
A
E
(
x
)
=
log
P
(
x
~
∣
x
x
~
)
mathcal{L}_{D A E}(mathbf{x})=log Pleft( ilde{mathbf{x}} mid mathbf{x}_{ackslash ilde{mathbf{x}}}
ight)
LDAE(x)=logP(x~∣xx~)
然而,DAE任务在实现上似乎比LM任务更复杂。因此,它还没有被广泛用于预训练大型语言模型。现有以DAE为预训练目标的llm包括T5[73]和GLM-130B[83]。这些模型的训练主要是为了以自回归的方式恢复被替换的跨度。
4.2.4 总结与讨论
对于llm,体系结构和预训练任务的选择可能会产生不同的归纳偏差,从而导致不同的模型能力。在这一部分中,我们总结了现有文献中关于这一问题的一些重要发现或讨论。
通过LM目标的预训练,因果解码器架构似乎可以获得更优越的零采样和少采样泛化能力。已有研究表明,在没有多任务微调的情况下,因果解码器比其他架构具有更好的零射击性能[29]。GPT-3[55]的成功表明,大型因果解码器模型可以是一个很好的少量学习器。此外,第5节讨论的指令调优和对齐调优已被证明可以进一步增强大型因果解码器模型的能力[61,62,64]。
在因果解码器中广泛观察到标度定律。通过缩放模型大小、数据集大小和总计算量,可以大大提高因果解码器的性能[30,55]。因此,通过缩放来提高因果解码器的模型容量已成为一种重要的策略。然而,对编码器-解码器模型的更详细的研究仍然缺乏,需要更多的努力来研究编码器-解码器模型在大范围内的性能。
需要更多关于架构和预训练目标讨论的研究工作来分析架构和预训练任务的选择如何影响llm的能力,特别是对于编码器-解码器架构。除了主要的架构外,LLM的详细配置也值得注意,这在4.2.2节中已经讨论过。
4.3 模型训练
在这一部分中,我们回顾了培训llm的重要设置,技术或技巧。
4.3.1 优化器设置
对于llm的参数优化,我们给出了批处理训练、学习率、优化器和训练稳定性的常用设置。
批处理训练。对于语言模型预训练,现有工作一般将批大小设置为较大的数字(例如8,196个样例或16M个token),以提高训练的稳定性和吞吐量。对于GPT-3和PaLM等llm,他们引入了一种新策略,在训练过程中动态增加批处理大小,最终达到百万规模。具体来说,GPT-3的批处理规模正从32K逐渐增加到320万令牌。实证结果表明,批量大小的动态调度可以有效地稳定llm的训练过程[56]。
学习率。现有的llm通常采用类似的学习率计划,在预训练期间采用热身和衰减策略。具体来说,在最初的0.1%到0.5%的训练步骤中,采用线性热身计划逐渐将学习率提高到大约5 × 10−5到1 × 10−4的最大值(例如,GPT-3为6 × 10−5)。然后,在后续步骤中采用余弦衰减策略,逐渐将学习率降低到其最大值的约10%,直到训练损失收敛。
优化器。Adam优化器[191]和AdamW优化器[192]被广泛用于训练llm(例如,GPT- 3),它们基于低阶矩的自适应估计来进行一阶梯度优化。通常,其超参数设置如下: β 1 = 0.9 eta_{1}=0.9 β1=0.9, β 2 = 0.95 eta_{2}=0.95 β2=0.95和 ϵ = 1 0 − 8 epsilon=10^{-8} ϵ=10−8。同时,Adafactor优化器[193]也被用于训练llm(例如PaLM和T5),这是Adam优化器的一个变体,专门为在训练期间保存GPU内存而设计。Adafactor优化器的超参数设置为:$ eta_{1}=0.9 和 和 和eta_{2}=1.0-k^{-0.8}$,其中k表示训练步数。
稳定训练。在LLMs的预训练过程中,它经常受到训练不稳定问题的影响,这可能会导致模型崩溃。为了解决这个问题,人们广泛利用了weight衰减和梯度剪切,在现有的研究中[55,69,81,83,97]通常设置梯度剪切到1.0的阈值和weight衰减率到0.1。然而,随着LLMs的规模,训练的损失也更有可能发生,导致不稳定的训练。为了缓解这个问题,PaLM[56]和OPT[81]使用了一种简单的策略,即从峰值发生之前的一个较早的检查点重新启动训练过程,并跳过可能导致问题的数据。此外,GLM[83]发现嵌入层的异常梯度通常会导致峰值,并提出收缩嵌入层梯度来缓解。
4.3.2 可扩展的训练技术
随着模型和数据规模的增加,在有限的计算资源下有效地训练llm变得具有挑战性。特别是,需要解决两个主要的技术问题,即提高训练吞吐量和将更大的模型加载到GPU内存中。在本部分中,回顾了现有工作中几种广泛使用的方法来解决上述两个挑战,即3D并行[66,194,195]、ZeRO[196]和混合精度训练[197],并就如何利用它们进行训练给出了一般性建议。
3D并行性。3D并行实际上是三种常用并行训练技术的组合,即数据并行、流水线并行[194,195]和张量并行[66]19。接下来介绍三种并行训练技术。
数据并行性。数据并行性是提高培训吞吐量的最基本途径之一。它在多个gpu上复制模型参数和优化状态,然后将整个训练语料库分发到这些gpu中。这样,每个GPU只需要处理分配的数据,并执行转发和向后传播以获得梯度。在不同的gpu上的计算梯度将被进一步聚合,以获得在所有gpu中更新模型的整个批处理的梯度。通过这种方法,随着梯度的计算在不同的gpu上独立执行,数据并行性机制是高度可伸缩的,使增加了ofgpu的数量来提高培训吞吐量。此外,这种技术在实现中是简单的,而且大多数现有的流行的深度学习库已经实现了数据并行性,如流和PyTorch。
管道并行性。管道并行性的目的是将不同层的LLM分布到多个gpu。特别是,在变压器模型的情况下,管道并行将连续的层加载到同一个GPU上,以降低在GPU之间传输计算的隐藏状态或梯度的成本。然而,简单地实现管道并行性可能会导致GPU利用率较低,因为每个GPU都必须等待之前的一个完成计算,导致不必要的气泡开销[194]。为了减少管道并行的这些气泡,GPipe[194]和PipeDream[195]提出了一种填充多个批量数据和异步梯度更新的技术,以提高管道效率。
张量并行。张量并行也是一种常用的技术,旨在分解多gpu加载的LLM。与管道并行性不同,张量并行性侧重于分解llm的张量(参数矩阵)。对于LLM中的矩阵乘法运算Y = XA,参数矩阵a可按列分为两个子矩阵 A 1 A_{1} A1和 A 2 A_{2} A2,表示为 Y = [ X A 1 , X A 2 ] Y=left[X A_{1}, X A_{2} ight] Y=[XA1,XA2]。通过将矩阵$ A_{1}$ 和 $A_{2} $放置在不同的gpu上,在两个gpu上并行调用矩阵乘法运算,通过跨gpu通信将两个gpu的输出组合得到最终结果。目前,张量并行性已经在几个开源库中得到支持,例如Megatron-LM[66],并且可以扩展到更高维度的张量。此外,colosal - ai还对高维张量实现了张量并行化[198-200],并特别针对序列数据提出了序列并行化[201],可以进一步分解Transformer模型的注意力操作。
ZeRO。ZeRO[196]技术,由DeepSpeed[65]提出,重点关注数据并行性的内存冗余问题。如前所述,数据并行性要求每个GPU存储相同副本的LLM,包括模型参数、模型梯度和优化器参数。而不是所有以上的数据都需要在每个GPU上保留,这将导致内存冗余问题。为了解决这个问题,ZeRO技术的目标是只保留每个GPU上数据的一小部分,而rest数据在需要时可以从其他GPU检索到。具体来说,ZeRO提供了三个解决方案,这取决于如何存储数据的三个部分,即优化器状态分区、梯度分区和参数分区。实证结果表明,前两种解决方案不会增加通信开销,第三种解决方案增加了50%的通信开销,但节省了与GPUs数成比例的内存。PyTorch已经实现了一种类似的技术,名为FSDP[202]。
混合精度训练。在以前的plm(例如BERT[23])中,32位浮点数(也称为FP32)主要用于预训练。近年来,为了预训练超大型语言模型,一些研究[197]开始使用16位浮点数(FP16),这样可以减少内存使用和通信开销。此外,由于流行的NVIDIA gpu(如A100)的FP16计算单元数量是FP32的两倍,因此FP16的计算效率可以进一步提高。然而,已有工作发现FP16可能导致计算精度的损失[59,69],从而影响最终的模型性能。为了缓解这一问题,一种被称为脑浮点(BF16)的替代方法被用于训练,它比FP16分配更多的指数位和更少的有效位。对于预训练,BF16在表征准确率上一般优于FP16[69]。
整体培训建议。在实践中,为了提高训练吞吐量和提高模型的大负载,经常联合使用上述训练技术,尤其是3D并行化。例如,研究人员将8路数据并行、4路张量并行和12路管道并行结合起来,使BLOOM[69]能够在384个A100 gpu上进行训练。目前,像DeepSpeed[65]、colosal - ai[137]和Alpa[203]这样的开源库可以很好地支持这三种并行训练方法。为了减少内存冗余,ZeRO、FSDP和激活重计算技术[68,204]也可以用于训练llm,这些技术已经集成到DeepSpeed、PyTorch和Megatron-LM中。此外,混合精度训练技术,如BF16,也可以提高训练效率,减少GPU内存的使用,但需要必要的硬件支持(如A100 GPU)。由于训练大型模型是一个耗时的过程,因此在早期阶段预测模型性能并检测异常问题将是有用的。为此,GPT-4[46]最近引入了一种名为可预测缩放的新机制,该机制建立在深度学习堆栈上,可以用更小的模型来预测大型模型的性能,这可能对开发llm非常有用。在实践中,可以进一步利用主流深度学习框架的支持训练技术。例如,PyTorch支持数据并行训练算法FSDP[202] (即,完全分片数据并行),如果需要,它允许将部分训练计算卸载到cpu上。
除了上述训练策略外,提高llm的推理速度也很重要。通常,量化技术被广泛用于减少llm在推理阶段的时间和空间成本[205]。在模型性能有一定损失的情况下,量化语言模型的模型尺寸更小,推理速度更快[83,206,207]。对于模型量化,常用的选择是int8量化[206]。此外,一些研究工作试图开发更激进的int4量化方法[83]。在这些开源llm中,BLOOM、GPT-J和GLM已经发布了相应的量化模型副本。
5 . LLMS自适应调优
经过预训练,llm可以获得解决各种任务的一般能力。然而,越来越多的研究表明,LLM的能力可以根据特定的目标进一步适应。本节介绍两种主要的自适应预训练llm的方法,即指令调优和对齐调优。前者主要旨在增强(或解锁)llm的能力,后者旨在使llm的行为与人类的价值观或偏好保持一致。此外,我们还将讨论快速模型自适应的有效调优。接下来,我们将详细介绍这三个部分。
5.1指令调优
本质上,指令调优是在一组自然语言形式的格式化实例上微调预训练llm的方法[62],这与监督微调[61]和多任务提示训练[28]高度相关。为了执行指令调优,我们首先需要收集或构建指令格式的实例。然后,用这些格式化的实例以监督学习的方式进行微调(例如,用序列到序列损失进行训练)。经过指令调优后,llm可以表现出优越的能力来泛化到未见过的任务[28,62,64],即使在多语言设置中[84]。
最近的一项综述[214]对指令调优的研究进行了系统的概述。主要关注指令调优对llm的影响,并为实例收集和调优提供了详细的指南或策略。此外,还讨论了如何使用指令调优来满足用户的实际需求,这已经广泛应用于现有的llm中,如InstructGPT[61]和gpt - 4[46]。
5.1.1、格式化实例构造
通常,指令格式的实例由一个任务描述(称为指令)、一个输入输出对和少量的演示(可选)组成。作为重要的公共资源,已有研究发布了大量自然语言格式化的标记数据(可用资源列表见表6)。接下来,介绍了两种主要的格式化实例构造方法(见图5),并讨论了实例构造的几个关键因素。
格式化现有数据集。在提出指令调优之前,一些早期研究[211,213,215,216]从不同的任务(例如,文本摘要,文本分类和翻译)中收集实例,以创建有监督的多任务训练数据集。作为指令调优实例的主要来源,将这些多任务训练数据集格式化为自然语言任务描述很方便。最近的工作[28,61,62,79]用人工编写的任务描述增强了标记的数据集,这指示llm通过解释任务目标来理解任务。例如,在图5(b)中,为问答任务中的每个示例添加了一个任务描述“请回答这个问题”。经过指令调优后,llm可以通过遵循其任务描述[28,62,64],很好地泛化到其他未见过的任务。特别是,已有研究表明,指令是LLMs任务泛化能力的关键因素[62]:通过在删除任务描述的标记数据集上微调模型,导致模型性能急剧下降。为了更好地生成用于指令调优的标记实例,人们提出了一种众包平台PromptSource[210],用于有效地创建、共享和验证不同数据集的任务描述。为了丰富训练实例,一些研究[28,213,217]还试图用专门设计的任务描述对现有实例的输入-输出对进行逆向转换,以进行指令调优。例如,给定一个问题-答案对,我们可以通过预测问题条件回答来创建一个新实例(例如,“请根据答案生成一个问题:”)。此外,一些工作[218]还利用启发式任务模板将大量未标记的文本转换为标记的实例。
格式化人类的需求。尽管大量的训练实例已被指令格式化,但它们主要来自公开的NLP数据集,要么缺乏指令多样性,要么与真实的人类需求不匹配[61]。为了克服这个问题,InstructGPT[61]建议将真实用户提交给OpenAI API的查询作为任务描述。用户查询以自然语言表示,特别适合于获取llm的指令跟随能力。此外,为了丰富任务的多样性,人工标注者还被要求编写现实生活任务的说明,包括开放式生成、开放式问题回答、头脑风暴和聊天。然后,他们让另一组标记者直接回答这些指令作为输出。最后,他们将一条指令(即收集的用户查询)和预期的输出(即人工书写的答案)配对作为训练实例。请注意,InstructGPT还采用了这些以自然语言格式化的真实任务,用于对齐调优(在5.2节讨论)。此外,GPT-4[46]设计了具有潜在风险的指令,并通过监督式微调来指导模型拒绝这些指令。此外,为了减轻人工标注的负担,还提出了几种半自动化方法[219-221],通过将现有实例提供给llm来生成不同的任务描述和实例,从而构建实例。
实例构造的关键因素。指令实例的质量对模型的性能有重要影响。在这里,我们讨论实例构造的一些基本因素。
- 缩放指令。广泛的研究表明,扩展任务数量可以在很大程度上增强llm的泛化能力[28,62,79]。随着任务数量的增加,模型性能最初呈现连续增长的模式,当达到一定水平时,增益变得微不足道[64,79]。一种合理的推测是,一定数量的代表性任务可以提供相对充分的知识,增加更多的任务可能不会带来额外的收益[64]。此外,该方法在长度、结构、创造性[28]等方面也有利于增强任务描述的多样性。关于每个任务的实例数量,研究发现少量实例通常可以饱和模型的泛化性能[62,64]。然而,将某些任务的实例数量增加到大量(例如几百个)可能会导致过拟合问题并影响模型性能[79]。
- 格式设计。作为一个重要因素,自然语言格式的设计也在很大程度上影响着LLMs的泛化性能[79]。通常,我们可以将任务描述和可选的演示添加到现有数据集的输入输出对中,其中任务描述是llm理解任务的最关键部分[79]。此外,通过使用适当数量的示例作为演示,可以导致实质性的改进[64],这也减轻了模型对教学工程的敏感性[62,64]。然而,将其他组件(例如,要避免的事情、原因和建议)合并到指令中可能会对llm的性能产生微不足道的影响,甚至是不利的影响[79,208]。最近,为了引出llm逐步推理的能力,一些工作[64]提出为一些推理数据集包括思维链(CoT)示例,如算术推理。研究表明,用CoT和非CoT示例对llm进行微调,可以在各种推理任务中取得良好的性能,包括那些需要多跳推理能力的任务(如常识问答和算术推理)以及那些不需要这种推理方式的任务(如情感分析和抽取式问答)[64,85]。
总而言之,指令的多样性似乎比实例的数量更重要,因为性能良好的InstructGPT[61]和Alpaca[221]比flan系列LLMs[62,64]使用更少但更多样化的指令(或实例)。此外,邀请标记者编写人类需要的任务比使用数据集特定的任务更有用。然而,它仍然缺乏注释人类需求实例的指导方针,使任务组合在某种程度上具有启发式。为了减少人工工作量,我们可以重用现有的格式化数据集(表6),也可以使用现有的LLMs自动构建指令[219]。
5.1.2指令调优策略
与预训练不同,指令调优通常更有效,因为只有适度数量的实例用于训练。由于指令调优可以被认为是一个监督训练过程,其优化在几个方面与预训练不同[64],如训练目标(即序列到序列损失)和优化配置(如更小的批量大小和学习率),这些在实践中需要特别注意。除了这些优化配置,指令调优还需要考虑两个重要方面。
均衡数据分布。由于指令调优涉及不同任务的混合,因此在微调过程中平衡不同任务的比例是很重要的。一种广泛使用的方法是样例比例混合策略[73],即结合所有数据集并从混合数据集中均等地采样每个样例。此外,根据最近的研究结果[64,85],增加高质量集合(例如FLAN[62]和P3[210])的采样率通常可以提高性能。然而,通常设置一个最大上限来控制在指令调优过程中数据集可以包含的最大示例数[73],这是为了防止更大的数据集压倒整个分布[73,85]。在实践中,根据不同的数据集[62,64],最大上限通常设置为几千或数万。
结合指令调优和预训练。为了使调优过程更加有效和稳定,OPT-IML[85]在指令调优过程中融入了预训练数据,可以视为模型调优的正则化。此外,一些研究不是使用单独的两阶段过程(预训练然后指令调优),而是尝试使用多任务学习的预训练数据(即纯文本)和指令调优数据(即格式化数据集)的混合从头开始训练模型[73,211]。具体来说,GLM-130B[83]和Galactica[35]将指令格式的数据集作为预训练语料库的一小部分集成到预训练llm中,这可能同时实现预训练和指令调优的优势。
5.1.3、指令调优的效果
在这一部分中,我们主要从两个方面讨论了指令调优对llm的影响。
提高性能。尽管对数量适中的实例进行了调优,但指令调优已成为提高或解锁llm能力的重要方法[64]。最近的研究对多个尺度(从77M到540B)的语言模型进行了实验,表明不同尺度的模型都可以从指令调优中受益[64,217],随着参数尺度的增加,产生性能的提高[84]。此外,具有指令调优的较小模型甚至可以比不进行微调的较大模型表现更好[28,64]。除了模型规模之外,指令调优在各种模型架构、预训练目标和模型自适应方法中显示出一致的改进[64]。在实践中,指令调优提供了一种增强现有语言模型能力的通用方法[64] (包括小型plm)。此外,它也比预训练成本低得多,因为LLMs所需的指令数据量明显小于预训练数据。
任务泛化。指令调优鼓励模型理解自然语言指令以完成任务。它赋予llm遵循人类指令[31]执行特定任务的能力(通常被认为是一种紧急能力),即使是在未见过的任务上[64]。大量研究证实了指令调优的有效性,可以在见过和未见过的任务上实现卓越的性能[85,217]。此外,指令调优已被证明有助于缓解llm的几个弱点(例如,重复生成或补充输入,而不完成某个任务)[61,64],使llm具有解决现实世界任务的优越能力。此外,经过指令调优训练的llm可以泛化到跨语言的相关任务。例如,BLOOMZ-P3[84]基于BLOOM[69]使用English-only任务集合P3[210]进行微调。有趣的是,与BLOOM相比,BLOOMZ-P3在多语言句子补全任务中可以实现50%以上的提升,这表明指令调优可以帮助llm从纯英语数据集中获得一般任务技能,并将这些技能迁移到其他语言中[84]。此外,已有研究发现,使用纯英语指令可以在多语言任务上产生令人满意的结果[84],这有助于减少特定语言的教学工程工作量。
5.2、对齐调整
首先介绍了对齐的背景、定义和标准,然后重点介绍了llm对齐中人工反馈数据的收集,最后讨论了基于人工反馈的强化学习进行对齐调优的关键技术。
5.2.1、比对的背景和标准
背景。llm在广泛的NLP任务中表现出了卓越的能力[55,56,62,81]。然而,这些模型有时可能会表现出意想不到的行为,例如,制造虚假信息,追求不准确的目标,并产生有害的、误导性的和有偏见的表达[61,222]。对于LLMs,语言建模目标通过单词预测预训练模型参数,而缺乏对人类价值观或偏好的考虑。为了避免这些意想不到的行为,人们提出了人类联盟,以使llm的行为符合人类的期望[61,100]。然而,与最初的预训练和自适应调优(例如,指令调优)不同,这种对齐需要考虑非常不同的标准(例如,有用性、诚实性和无害性)。已有研究表明,对齐可能会在一定程度上损害llm的一般能力,相关文献称之为对齐税[61,223,224]。
校准标准。近年来,人们越来越重视制定各种标准来规范llm的行为。本文以三个有代表性的对齐标准(即有帮助、诚实和无害)为例进行讨论,这些标准在现有文献中被广泛采用[61,222,223]。此外,llm还有其他不同角度的对齐标准,包括行为、意图、激励和内部方面[222],这些标准在本质上与上述三个标准相似(或至少采用类似的对齐技术)。也可以根据具体需要对这三个标准进行修改,例如用正确性代替诚实[100]或侧重于某些特定的标准[224]。接下来,对三个具有代表性的对齐准则进行简要说明:
-
有帮助。为了有所帮助,LLM应尽可能以简洁和高效的方式展示明确的尝试来帮助用户解决其任务或回答问题。在更高层次上,当需要进一步澄清时,LLM应展示通过相关询问获取额外相关信息的能力,并表现出适当的敏感性、洞察力和审慎程度[223]。实现有用行为的对齐对llm来说是一个挑战,因为很难精确定义和衡量用户的意图[222]。
-
诚实。在基本层面上,对齐到诚实的LLM应该向用户提供准确的内容,而不是捏造信息。此外,LLM在其输出中传达适当程度的不确定性是至关重要的,以避免任何形式的欺骗或信息误报。这需要模型知道它的能力和知识水平(例如,“知道未知”)。根据[223]的讨论,与有益和无害相比,诚实是一个更客观的标准,因此可以在较少依赖人类努力的情况下发展诚实联盟。
-
无害。为了无害,它要求模型产生的语言不应该具有攻击性或歧视性。在其能力的最大限度内,该模型应该能够检测旨在为恶意目的征集请求的隐蔽努力。理想情况下,当模型被诱导进行危险行为(例如,犯罪)时,LLM应该礼貌地拒绝。然而,哪些行为被认为是有害的,以及在多大程度上个人或社会之间存在差异[223],这高度取决于谁在使用LLM,所提出的问题的类型,以及使用LLM的上下文(例如,时间)。
我们可以看到,这些标准是相当主观的,是根据人类的认知发展起来的。因此,很难将它们直接表述为llm的优化目标。在现有工作中,在对齐llm时,有许多方法来满足这些标准。一种很有前途的技术是red teaming[115,225],它涉及使用手动或自动方法以对抗性的方式探测llm,以生成有害的输出,然后更新llm,以防止此类输出。
5.2.2、收集用户反馈
在预训练阶段,llm在大规模语料库上使用语言建模目标进行训练。然而,它不能考虑人类对LLM输出的主观和定性评估(在本调查中称为人工反馈)。高质量的人工反馈对于使llm与人类的偏好和价值观保持一致至关重要。在这一部分中,我们讨论了如何选择一个人工标注团队来收集反馈数据。
人工标记器选择。在现有工作中,生成人工反馈数据的主要方法是人工标注[61,100,226]。这突出了选择合适的人类标签的关键作用。为了提供高质量的反馈,人工标注者应该具有合格的教育水平和非常熟练的英语。例如,Sparrow[100]要求人类标签员是以英语为母语的英国人,并且至少获得了本科水平的教育资格。此外,在[224]中,大约一半的高优先级任务的人工标签员是从美国亚马逊土耳其机械工人队伍中招聘的,具有硕士学位。即使如此,一些研究[112,226]发现研究人员和人类标记者之间的意图仍然存在不匹配,这可能导致低质量的人类反馈,并导致llm产生意想不到的输出。为了解决这个问题,InstructGPT[61]进一步进行筛选过程,通过评估人类标记者和研究人员之间的协议来过滤标记者。具体来说,研究人员首先标记少量数据,然后测量他们自己和人类标记者之间的一致性。将选择协议最高的标签商进行后续的标注工作。在其他一些工作[227]中,“超级评分者”被用来确保高质量的人工反馈。研究人员评估人类标记者的表现,并选择一组表现良好的人类标记者(例如,高一致性)作为超级评分者。超级评分者将在后续研究中优先与研究人员合作。人工标注人员在标注LLMs的输出时,有助于为人工标注人员指定详细的说明并提供即时指导[112],从而进一步规范标注人员的标注。
人工反馈收集。在现有的工作中,主要有3种方法从人工标注者那里收集反馈和偏好数据。
- 基于排序的方法。在早期的工作[226,228]中,人类标注者经常以粗粒度的方式评估模型生成的输出(即,只选择最好的),而不考虑更细粒度的对齐标准。尽管如此,不同的标注者可能对最佳候选输出的选择持有不同的意见,并且该方法忽略了未选择的样本,这可能导致不准确或不完整的人为反馈。为了解决这个问题,随后的研究[100,224]引入了Elo评级系统,通过比较候选输出来得出偏好排名。输出的排序作为训练信号,引导模型偏爱某些输出,从而产生更可靠、更安全的输出。
- 基于问题的方法。此外,人工标注者可以通过回答研究人员[72]设计的某些问题来提供更详细的反馈,包括对齐标准以及llm的额外约束。特别地,在WebGPT[72]中,为了帮助模型过滤和利用检索文档中的相关信息,人工标注者需要回答关于检索文档是否对给定输入有用的多个选项的问题。
- 基于规则的方法。此外,许多研究开发了基于规则的方法来提供更详细的人工反馈。作为一个典型案例,Sparrow[100]不仅选择标签者认为最好的响应,还使用一系列规则来测试模型生成的响应是否满足有用、正确和无害的对齐标准。通过这种方式,可以获得两种人工反馈数据:(1)通过成对比较模型生成输出的质量获得响应偏好反馈;(2)通过收集人工标注者的评估(即表示生成输出在多大程度上违反规则)获得违反规则反馈。此外,GPT-4[46]利用一组零样本分类器(基于GPT-4本身)作为基于规则的奖励模型,可以自动确定模型生成的输出是否违反一组人工编写的规则。
下面,我们关注一种众所周知的技术,从人工反馈中强化学习(RLHF),它已广泛应用于最近强大的llm中,如ChatGPT。正如下面所讨论的,可以通过从llm对用户查询的响应的人工反馈中学习来实现第5.2.1节中介绍的对齐标准。
5.2.3、基于人工反馈的强化学习
为了使llm与人类价值观保持一致,有人提出了从人类反馈中强化学习(RLHF)[70,226],以用收集的人类反馈数据对llm进行微调,这有助于改进对齐标准(如有用性、诚实性和无害性)。RLHF采用强化学习(RL)算法(如近端策略优化(PPO)[111])通过学习奖励模型使LLMs适应人类反馈。这种方法将人类纳入到开发对齐良好的llm的训练循环中,如InstructGPT [61]。
RLHF系统。RLHF系统主要由三个关键部分组成:预训练的语言模型进行对齐,从人工反馈中学习的奖励模型,以及训练语言模型的强化学习算法。具体来说,预训练的语言模型通常是一个生成模型,用现有的预训练语言模型参数进行初始化。例如,OpenAI将175B GPT-3用于其第一个流行的RLHF模型InstructGPT [61], DeepMind将2800亿参数模型Gopher[59]用于其GopherCite模型[227]。此外,奖励模型(RM)提供(学习的)指导信号,反映人类对语言模型生成的文本的偏好,通常以标量值的形式。奖励模型可以有两种形式:微调的语言模型或使用人类偏好数据从头训练的语言模型。现有工作通常采用与对齐LM[61,227]不同的参数规模的奖励模型。例如,OpenAI使用6B GPT-3, DeepMind使用7B Gopher作为奖励模型。最后,为了利用奖赏模型的信号优化预训练的LM,设计了一种针对大规模模型调优的特定强化学习算法。具体来说,近端策略优化(Proximal Policy Optimization, PPO)[111]是在现有工作[61,100,227]中广泛使用的对齐RL算法。
RLHF的关键步骤。图6展示了RLHF[61,112]的整个三步过程,如下所述。
监督微调。为了使语言模型最初执行所需的行为,它通常需要收集一个包含输入提示(指令)和所需输出的监督数据集,以对语言模型进行微调。这些提示和输出可以由人工标记人员为某些特定任务编写,同时确保任务的多样性。例如,InstructGPT[61]要求人类标记者撰写提示(例如,“列出五个关于如何重拾对我的职业热情的想法”)和几个生成任务(如开放QA、头脑风暴、聊天和重写)的期望输出。注意,在特定的设置或场景中,第一步是可选的。
奖励模型训练。第二步是使用人工反馈数据训练RM。使用采样的提示(来自监督数据集或人工生成的提示)作为输入,使用语言模型来生成一定数量的输出文本。然后,我们邀请人类标注者对这些对的偏好进行标注。标注过程可以以多种形式进行,常用的方法是通过对生成的候选文本进行排序进行标注,以减少标注者之间的不一致性。然后,对RM进行训练,以预测人类首选的输出。在InstructGPT中,标记者将模型生成的输出从好到坏进行排序,并且训练RM(即6B GPT-3)来预测排序。
RL微调。在这一步,对齐(即微调)语言模型被形式化为RL问题。在这种设置中,预训练的LM充当策略,将提示作为输入并返回输出文本,它的动作空间是词汇表,状态是当前生成的token序列,奖励由RM提供。为了避免明显偏离初始(调优之前)LM,惩罚项通常被纳入奖励函数中。例如,InstructGPT使用PPO算法针对RM优化LM。对于每个输入提示,InstructGPT计算当前LM和初始LM生成结果之间的KL散度作为惩罚。值得注意的是,第二步和最后一步可以多次迭代,以更好地对齐llm。
5.3、高效调优
在上面,我们讨论了指令调优和对齐调优的方法,以根据特定目标调整llm。由于llm由大量的模型参数组成,执行全参数调优的成本很高。在本节中,我们将讨论如何对llm进行高效调优。回顾了几种代表性的Transformer语言模型的参数高效微调方法,总结了现有的参数高效微调llm的工作。
5.3.1、参数高效的微调方法
在现有文献中,参数高效的微调[229,229 - 232]是一个重要的主题,旨在减少可训练参数的数量,同时尽可能保持良好的性能。简要回顾了Transformer语言模型的四种参数有效的微调方法,包括适配器调优、前缀调优、提示调优和LoRA。
适配器调优。适配器调优将小型神经网络模块(称为适配器)合并到Transformer模型中[233]。为了实现适配器模块,[233,234]中提出了一种瓶颈架构,首先将原始特征向量压缩到一个较小的维度(随后进行非线性变换),然后将其恢复到原始维度。适配器模块将集成到每个Transformer层中,通常在Transformer层的两个核心部分(即注意力层和前馈层)的每个核心部分之后进行串行插入。或者,并行适配器[235]也可以用于Transformer层,它相应地将两个适配器模块与attention层和前馈层并行放置。在微调过程中,适配模块会根据具体的任务目标进行优化,而原始语言模型的参数在此过程中会被冻结。这样,我们可以有效地减少微调过程中可训练参数的数量。
前缀调优。前缀调优[230]将前缀序列(一组可训练的连续向量)前置到语言模型中的每个Transformer层。这些前缀向量是特定于任务的,可以认为是虚拟令牌嵌入。为了优化前缀向量,通过学习一个MLP函数,将一个较小的矩阵映射到前缀的参数矩阵,而不是直接优化前缀,人们提出了一种重新参数化技巧[230]。已经证明,这个技巧对于稳定的训练是有用的。优化后的映射函数将被丢弃,仅保留导出的前缀向量,以提高特定任务的性能。由于只需要训练前缀参数,因此可以实现参数高效的模型优化。与前缀调优类似,ptuning v2[236]将逐层提示向量合并到Transformer架构中,专门用于自然语言理解,也利用多任务学习来联合优化共享的提示。在自然语言处理任务中,它被证明对提高不同参数尺度的模型性能是有用的。
提示调优。与前缀调优不同,提示调优[231,237]主要侧重于在输入层合并可训练的提示向量24。它基于离散提示方法[239,240],通过包含一组软提示标记(自由形式[237]或前缀形式[231])来增强输入文本,然后采用提示增强输入来解决特定的下游任务。在实现中,特定于任务的提示嵌入与输入的文本嵌入相结合,随后将其输入到语言模型中。P-tuning[237]提出了一种结合上下文、提示和目标标记的自由形式,可应用于自然语言处理和生成的体系结构。它们通过双向LSTM进一步学习软提示标记的表示。另一种代表性方法[231]名为提示调优(prompt tuning),它直接在输入前添加前缀提示。在训练过程中,只有提示嵌入会根据特定任务的监督进行学习。然而,由于这种方法在输入层只包含少量的可训练参数,人们发现其性能高度依赖于底层语言模型的模型容量[231]。
低秩自适应(LoRA)。LoRA[232]在每个密集层施加低秩约束以逼近更新矩阵,从而减少可训练参数以适应下游任务。考虑优化参数矩阵 W mathbf{W} W的情况。更新过程可以用通用格式编写: W ← W + Δ W mathbf{W}leftarrowmathbf{W} + Deltamathbf{W} W←W+ΔW。LoRA的基本思想是冻结原矩阵 W ∈ R m × n , mathbf{W}inmathbb{R} ^{m imes n,} W∈Rm×n,同时用低秩分解矩阵逼近参数更新 Δ W ,即 Δ W = A ⋅ B ⊤ ,其中 A ∈ R m × k Deltamathrm{W},即Deltamathbf{W} = mathbf{A}cdotmathbf{B} ^ { op},其中mathbf{A}inmathbb{R} ^{m imes k} ΔW,即ΔW=A⋅B⊤,其中A∈Rm×k和 B ∈ R n × k mathbf{B}inmathbb{R} ^{n imes k} B∈Rn×k是任务自适应的可训练参数, r ≪ min ( m , n ) rllmin (m, n) r≪min(m,n)是降阶后的秩。LoRA的主要优点是它可以很大程度上节省内存和存储使用(例如VRAM)。此外,人们只能保留一个大型模型副本,同时维护一些特定于任务的低秩分解矩阵,以适应不同的下游任务。此外,一些研究还讨论了如何以更有原则的方法设置排序,例如基于重要性分数的分配[241]和无搜索的最优排序选择[242]。
除了上述方法之外,关于Transformer语言模型的高效调优也有广泛的研究。然而,关于高效调优的更全面的讨论超出了本文的范围,可以在有关此主题的相关论文中找到[229,235]。
5.3.2 llm上的参数高效微调
随着llm的兴起,高效调优吸引了越来越多的研究关注,以在下游任务中开发更轻量级的自适应方法。
特别是,LoRA[232]已被广泛应用于开源llm(例如LLaMA和BLOOM),以进行参数高效的微调。在这些研究尝试中,LLaMA及其变体在参数高效调优方面获得了广泛关注。例如,使用LoRA作为Alpaca[221]的轻量级微调版本(微调后的7B美洲驼模型,具有52K的人类指令演示)对AlpacaLoRA[243]进行训练。有广泛的探索羊驼在不同的语言或模型大小,可以在收集页25。此外,LLaMAAdapter[244]将可学习的提示向量插入到每个Transformer层中,其中提出了零初始化注意力,以通过减轻拟合不足的提示向量的影响来改进训练。此外,他们还将该方法扩展到多模态环境,例如视觉问答。
此外,进行了一项实证研究[234],以检查不同调优方法对语言模型的影响。他们比较了四种有效的调优方法,包括串行适配器调优[233]、并行适配器调优[235,245]和LoRA[232],在三个开源llm上进行评估,即GPT-J (6B)、BLOOM (7.1B)和LLaMA (7B)。基于在6个数学推理数据集上的实验结果,他们表明,这些有效的调优方法在困难任务上的表现低于参考基线GPT-3.5,而在简单任务上取得了相当的性能。总的来说,LoRA在这些比较方法中表现相对较好,使用的可训练参数明显较少。
作为一种重要的资源,PEFT[246] (代表参数高效微调)库已经发布在GitHub上。它包括几种广泛使用的高效调优方法,包括LoRA [232]/AdaLoRA [241], prefixtuning [230, 236], P-Tuning[237]和prompt-tuning[231]。此外,它支持许多语言模型,如GPT-2和LLaMA,还涵盖了几个代表性的视觉Transformer模型(如ViT和Swin Transformer)。
如5.3.1节所述,现有文献中已经提出了大量有效的调优方法。然而,这些方法中的大多数是在小型的预训练语言模型上进行测试的,而不是在llm上。到目前为止,仍然缺乏对不同高效调优方法在不同设置或任务下对大规模语言模型的影响的深入调查。
6、利用
作为一种特殊的提示形式,上下文学习(in-context learning, ICL)与GPT-3[55]一起被首次提出,成为利用llm的典型方法。
6.1、情境学习
作为一种特殊的提示形式,语境学习(in-context learning, ICL)与GPT-3一起被首次提出[55],并已成为一种典型的利用llm的方法。
6.1.1、提示制定
如[55]所述,ICL使用格式化的自然语言提示,由任务描述和/或一些任务示例组成作为演示。图7展示了ICL的图示。首先,从任务描述开始,从任务数据集中选择一些示例作为演示。然后,它们以特定的顺序组合,以使用专门设计的模板形成自然语言提示符。最后,测试实例被添加到演示中,作为llm生成输出的输入。基于任务演示,LLMs可以识别和执行一个新的任务,而不需要显式的梯度更新。
形式上,设
D
k
=
{
f
(
x
1
,
y
1
)
,
…
,
f
(
x
k
,
y
k
)
}
D_{k}=left{fleft(x_{1}, y_{1}
ight), ldots, fleft(x_{k}, y_{k}
ight)
ight}
Dk={f(x1,y1),…,f(xk,yk)}表示一组包含k个示例的演示,其中
f
(
x
k
,
y
k
)
fleft(x_{k}, y_{k}
ight)
f(xk,yk)是将第k个任务示例转换为自然语言提示的提示函数。给定任务描述I、演示
D
k
D_{k}
Dk和一个新的输入查询
x
k
+
1
x_{k+1}
xk+1,从LLMs生成的输出
y
^
k
+
1
hat{y}_{k+1}
y^k+1的预测可以表述如下:
LLM
(
I
,
f
(
x
1
,
y
1
)
,
…
,
f
(
x
k
,
y
k
)
⏟
demonstrations
,
f
(
x
k
+
1
⏟
input
,
∑
′
⏟
answer
)
)
→
y
^
k
+
1
.
(6)
operatorname{LLM}(I, underbrace{fleft(x_{1}, y_{1}
ight), ldots, fleft(x_{k}, y_{k}
ight)}_{ ext {demonstrations }}, f(underbrace{x_{k+1}}_{ ext {input }}, underbrace{sum^{prime}}_{ ext {answer }}))
ightarrow hat{y}_{k+1} ext {. } ag{6}
LLM(I,demonstrations
f(x1,y1),…,f(xk,yk),f(input
xk+1,answer
∑′))→y^k+1. (6)
其中实际答案
y
k
+
1
y_{k+1}
yk+1被留作空白,由LLM预测。由于ICL的性能在很大程度上依赖于演示,因此在提示符中正确设计演示是一个重要的问题。根据式(6)的构建过程,我们主要关注提示中演示格式的三个主要方面,包括如何选择组成演示的示例,如何将每个示例格式化为函数
f
(
⋅
)
f(cdot)
f(⋅)的提示,以及如何合理地排列演示顺序。
综述论文[50]对ICL进行了全面的描述,我们建议读者参考该论文,对这一主题进行更广泛、更详细的讨论。与此调查相比,我们特别侧重于在演示设计和ICL的底层机制两个主要方面讨论ICL在法学硕士中的应用。此外,ICL与指令调优(在5.1节中讨论)也有密切的联系,因为它们都使用自然语言来格式化任务或实例。但是,指令调优需要对llm进行微调以适应,而ICL只提示llm使用。此外,指令调优可以增强llm执行目标任务的ICL能力,特别是在零射击设置下(仅使用任务描述)[64]。
6.1.2、论证设计
多项研究表明,ICL的有效性受到演示设计的高度影响[247-249]。在6.1.1节的讨论之后,我们将从演示选择、演示格式和演示顺序三个主要方面介绍ICL的演示设计。
- 演示的选择。不同的演示示例之间,ICL的性能往往存在很大差异[250],因此选择能够有效利用llm的ICL能力的示例子集非常重要。有两种主要的示范选择方法,即启发式和基于llm的方法:
启发式方法。由于简单和低成本,现有工作广泛采用启发式方法来选择演示。一些研究使用基于k-NN的检索器来选择与查询在语义上相关的示例[250,251]。但是,它们对每个示例单独执行选择,而不是对整个示例集进行评估。为了解决这一问题,提出了基于多样性的选择策略,为特定任务选择最具代表性的示例集[252,253]。此外,在[254]中,在选择演示时同时考虑了相关性和多样性。