赞
踩
自然语言处理(NLP)的最新进展导致了大语言模型的发展,这些模型在大量文本数据上进行了预训练,并在广泛的NLP任务中表现出卓越的性能,包括语言翻译,文本摘要和问答。在GPT(Generative Pre-trained Transformer)系列中,ChatGPT模型在教育、医疗保健、推理、文本生成、人机交互和科学研究等各个领域都展示了其潜力。
通常,大语言模型(LLM) 是指包含数千亿(或更多)参数的 Transformer 语言模型,在大规模文本数据上进行训练,如 GPT-3,PaLM,Galactica 等。LLM 展现了理解自然语言和解决复杂任务(通过文本生成)的强大能力。
现存各种LLM模型与时间线一览
本文将以GPT为主的大语言模型文献综述整理成笔记,相关综述文献在下面标注。
从技术上讲,语言建模(LM)是提高机器语言智能的主要方法之一。一般来说,LM 旨在对词序列的生成概率进行建模,以预测未来(或缺失)tokens 的概率。语言建模可以分为四个主要发展阶段:
统计语言模型(SLM):运用统计学习的方法构造语言模型。其基本思想是基于马尔可夫假设建立词预测模型,例如根据最近的上下文预测下一个词。SLM 已被广泛应用于提高信息检索和NLP的任务性能。
神经网络语言模型(NLM):基于神经网络构建的语言模型,比如 RNN 和LSTM 等。通过扩展学习词或句子有效特征的想法,已有研究开发了通用神经网络方法来为各种 NLP 任务构建统一解决方案。相关工作提出了构建简化的浅层神经网络来学习分布式单词表示的方法,这些表示在各种 NLP 任务中被证明非常有效。
预训练语言模型(PLM):基于自注意力机制的 transformer 架构,先在原始语料上进行预训练,然后进行 fine-tune 微调以适用不同的下游任务。BERT 作为双向语言模型,在大规模无标签语料库上使用专门设计的预训练任务,这些预训练的上下文感知词表示作为通用语义特征非常有效。这项研究激发了大量后续工作,例如 BART 和 T5,确立了“预训练和微调”学习范式。
大型语言模型(LLM):研究发现扩展 PLM (如扩展模型大小或数据大小)通常会提高下游任务的模型性能。在 PLM 的基础上,增大模型参数,使得 LLM 出现 PLM 不具有的涌现能力,其同样采用预训练+微调的形式。GPT-3及以上的模型就属于此类,例如,GPT-3 可以通过上下文学习来解决小样本任务,而 GPT-2 则表现不佳。
在Arxiv网站中,对语言模型和大语言模型的搜索量。自 ChatGPT 出世以来,大语言模型搜索增长趋势明确加快
如今,LLM 对 AI 社区产生了重大影响,ChatGPT 和 GPT-4 的出现促使人们重新思考通用人工智能(AGI)的可能性。AI 研究领域正因 LLM 的迅速发展而发生革命性变革。对 LLM 的最近进展进行的文献综述,一般包括预训练(如何预训练出有能力的 LLM)、适配微调(如何从有效性和安全性两个角度有效地微调预训练的 LLM)、使用(如何利用 LLM 解决各种下游任务)以及能力评估(如何评估 LLM 的能力和现有的经验性发现)。
为了对 LLM 的工作原理有一个快速的了解,本部分将介绍 LLM 的基本背景,包括扩展法则、涌现能力和关键技术。
目前,LLM 主要建立在 Transformer 架构上,其中多头注意力层堆叠在深度神经网络中。现有的 LLM 采用类似的 Transformer 架构和与小型语言模型相同的预训练目标(如语言建模)。然而,LLM 大幅度扩展了模型规模、数据规模和总计算量。大量研究表明,扩展可以大幅提高 LLM 的模型能力。因此,建立一个定量的方法来描述扩展效应是有意义的。
LLM 的涌现能力被正式定义为 “在小型模型中不存在但在大型模型中产生的能力”,这是区别 LLM 与先前 PLM 的最显著特征之一。当规模达到一定水平时,性能显著提高,超出随机水平。这里简要介绍 LLM 的三种典型涌现能力。
上下文学习(ICL):这种能力是由 GPT-3 正式引入的:假设已经为语言模型提供了一个自然语言指令和/或几个任务演示,它可以通过完成输入文本的单词序列的方式来为测试实例生成预期的输出,而无需额外的训练或梯度更新。然而,这种能力还取决于具体的下游任务。
指令遵循:通过使用自然语言描述的混合多任务数据集进行微调(称为指令微调), LLM 在未见过的以指令形式描述的任务上表现出色。通过指令微调,LLM 能够在没有使用显式示例的情况下遵循新的任务指令,因此它具有更好的泛化能力。
逐步推理:对于小型语言模型而言,通常很难解决涉及多个推理步骤的复杂任务,例如数学问题。然而,通过使用思维链(Chain-of-Thought, CoT)提示策略,LLM 可以通过利用包含中间推理步骤的提示机制来解决这类任务,从而得出最终答案。
由于具备与人类进行交流的出色能力,ChatGPT 自从发布以来便引发了 AI 社区的极大兴趣。ChatGPT 基于功能强大的 GPT 模型开发,其对话能力得到专门的优化。
GPT系列模型的技术发展
早期探索:早期已经探索了使用语言模型来实现智能系统,但当时是使用循环神经网络(RNN)。随着 Transformer 的出现,OpenAI 开发了两个初始的 GPT 模型即 GPT-1 和 GPT-2。GPT-1 是基于生成型的、仅解码器的 Transformer 架构开发的,采用了无监督预训练和有监督微调的混合方法。GPT-2 采用了与 GPT-1 类似的架构,将参数规模增加到了 15 亿,并使用大规模的网页数据集 WebText进行训练。它旨在通过无监督语言建模来执行任务,而无需使用标记数据进行显式微调。
能力飞跃:基于 GPT-2,GPT-3 通过扩展(几乎相同的)生成式预训练架构展现出重要的能力飞跃。GPT-3 于 2020 年发布,将模型参数扩展到了更大的规模,达到了 1750 亿,并首次正式提出ICL的概念。它是以小样本或零样本的方式使用 LLM。ICL 可以指导 LLM 理解以自然语言文本的形式给出的任务。LLM 的预训练和使用在 ICL 下有着相同的语言建模范式:预训练预测给定上下文条件下的后续文本序列,而 ICL 预测正确的任务解决方案,该解决方案可以被格式化为给定任务描述和示范下的文本序列。
能力增强:GPT-3 已经成为 OpenAI 开发更强大 LLM 的基础模型。总体而言,OpenAI 探索了两种主要方法来进一步改进 GPT-3 模型,即使用代码数据进行训练以及与人类偏好的对齐。这些增强技术引出了具有更强能力的改进型 GPT-3 模型,OpenAI 称其为 GPT-3.5 模型。
基于所有的探索工作,OpenAI 取得了两个重要的里程碑:ChatGPT 和 GPT-4,这两个模型大大提升了现有 AI 系统的能力水平。
ChatGPT:在 2022 年 11 月,OpenAI 发布了对话语言模型 ChatGPT,基于 GPT 模型(GPT-3.5 和 GPT-4)开发。ChatGPT 是以类似 InstructGPT 的方式进行训练的,但专门针对对话能力进行了优化。ChatGPT 训练数据是通过将人类生成的对话(扮演用户和 AI 两个角色)与 InstructGPT 数据集结合起来以对话形式生成。ChatGPT 在与人类的交流中表现出卓越的能力:拥有丰富的知识库,擅长解决数学问题,准确追踪多轮对话中的上下文,并与人类的价值观保持一致以确保被安全使用。随后,ChatGPT 支持了插件机制,进一步通过已有工具或应用扩展了 ChatGPT 的功能。
GPT-4:作为另一重要的进展,GPT-4 于 2023 年3 月发布,将文本输入扩展到多模态信号。总体而言,相比GPT-3.5,GPT-4 在解决复杂任务方面具有更强的能力,在许多评估任务上展现出大幅度的性能提升。最近的一项研究通过开展人类生成问题的定性测试来研究 GPT-4 的性能,其中的测试涵盖了各种困难任务,结果显示 GPT-4 具有比之前的 GPT 模型如 ChatGPT 更出色的性能。此外,由于经过为期六个月的迭代对齐(在 RLHF 训练中加入了额外的安全奖励信号),GPT-4 对于具有恶意或挑衅的提问的响应更加安全。
尽管取得了巨大的进展,这些优秀的 LLM 仍然存在局限性,例如在某些特定上下文中生成错误的幻觉或存在潜在风险的回应。开发更强大、更安全的 LLM 是一个长期存在的研究挑战。
预训练为 LLM 的能力奠定了基础。通过在大规模语料库上进行预训练,LLM 可以获得基本的语言理解和生成能力。在这个过程中,预训练语料库的规模和质量对于 LLM 获得强大的能力至关重要。此外,为了有效地预训练 LLM,也需要设计好模型架构、加速方法和优化技术。
相比小规模语言模型,LLM 更需要高质量数据来预训练模型,并且它们的模型能力很大程度上依赖于预训练语料库及其预处理方式。
要开发出一个有能力的 LLM,其关键在于从各种数据来源中收集大量的自然语言语料库。现有的 LLM 主要混合了各种公共文本数据集,并将其作为预训练语料库。预训练语料库的来源可以广义地分为两种类型:通用文本数据和专用文本数据。
通用文本数据:通用文本数据,如网页、书籍和对话文本等,其由于规模大、多样性强且易于获取的特点,被大多数 LLM 所利用,这可以增强 LLM 的语言建模和泛化能力。这些数据源提供了丰富的文本资源,并且涉及了多种主题。
专用文本数据:鉴于 LLM 所展现出的惊人泛化能力,也有研究将预训练语料库扩展到更专用的数据集,如多语言数据、科学数据和代码等,以此来赋予 LLM 解决专用任务的能力。专用数据集对于提高 LLM 在特定下游任务中的能力非常有用。
在收集大量文本数据后,对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据,对于构建预训练语料库是必不可少的,因为这些数据可能会极大地影响 LLM的能力和性能。
质量过滤:删除收集到的语料库中的低质量数据。通常采用两种方法:基于分类器的方法,和基于启发式的方法。前一种方法基于高质量文本训练选择分类器,并利用它来识别和过滤低质量数据。使用高质量数据作为正样本,采样候选数据作为负样本来训练二元分类器,并预测衡量每个数据的质量的分数。部分研究采用第二种基于启发式的方法,通过设计一组精心设计的规则来消除低质量文本。
去重:语料库中重复数据会降低语言模型的多样性,可能导致训练过程不稳定,从而影响模型性能。因此,需要对预训练语料库进行去重处理。具体来说,可以在句子级、文档级和数据集级等不同粒度上去重。现有研究已经证明,这三个级别的去重都有助于改善 LLM 的训练。
隐私去除:大多数预训练文本数据来自网络来源,包括涉及敏感或个人信息的用户生成内容,这可能增加隐私泄露的风险。因此,需要从预训练语料库中删除可识别个人信息(PII)。采用基于规则的方法,例如关键字识别,来检测和删除 PII,例如姓名、地址和电话号码 。
分词:分词也是数据预处理的关键步骤。它的目的是将原始文本分割成词序列,随后用作 LLM 的输入。虽然直接利用已有的分词器是方便的(例如 OPT 和 GPT-3 利用了 GPT-2 的分词器),但是使用专门为预训练语料库设计的分词器可能会更加有效,特别是对于由多种领域、语言和格式组成的语料库。
LLM在预训练前典型的数据预处理流程
本节中回顾 LLM 的架构设计,包括主流架构、预训练目标和详细配置。
编码器-解码器架构(Encoder-Decoder):传统 Transformer 模型建立在该架构上,由两个 Transformer 块分别作为编码器和解码器。编码器采用堆叠的多头自注意层对输入序列进行编码以生成其潜在表示,而解码器对这些表示进行交叉注意并自回归地生成目标序列。编码器-解码器 PLM(例如 T5 和 BART )能有效完成各种 NLP 任务。
因果解码器架构(Causal Decoder):采用单向注意力掩码,以确保每个输入 token 只能关注过去的 token 和它本身。输入和输出 token 通过解码器以相同的方式进行处理。作为这种架构的代表性语言模型,GPT 系列模型是基于因果解码器架构开发的。至今,因果解码器已被广泛用作为各种现有 LLM 的体系结构,例如 OPT 、BLOOM 等。
前缀解码器架构(Prefix Decoder):(也称非因果解码器架构)修正因果解码器的掩码机制,以使其能够对前缀 token 执行双向注意力,并仅对生成的 token 执行单向注意力。这样,与编码器-解码器架构类似,前缀解码器可以双向编码前缀序列并自回归地逐个预测输出 token,其中在编码和解码过程中共享相同的参数。
三种架构中不同的注意力机制比较。蓝色、绿色、黄色和黑色圆角矩形分别表示前缀token之间、前缀和目标token之间、目标token之间和掩码的注意力
自 Transformer 推出以来,已经提出了各种改进方法来提高其训练稳定性、性能和计算效率。
标准化:训练不稳定是预训练 LLM 的一个难题。为了缓解这个问题,层标准化 (Layer Norm, LN) 被广泛应用于Transformer 架构中。LN 的位置对 LLM 的性能至关重要。虽然最初的 Transformer 使用后置 LN,但大多数 LLM采用前置 LN 以实现更稳定的训练,尽管会带来一定的性能损失。最近,一些高级标准化技术被提出以作为 LN 的替代方案。
激活函数:为了获得良好的性能,在前馈网络中也需要设置合适的激活函数。在现有的 LLM 中,广泛使用 GeLU 激活函数 。此外,在最新的 LLM 中,也使用了 GLU 激活函数的变体,在实践中通常可以获得更好的性能。
位置编码:由于 Transformer 中的自注意模块具有置换不变性,因此需要使用位置编码来注入绝对或相对位置信息以建模序列。在经典的 Transformer 中有两种绝对位置编码的变体,即正弦函数和学习的位置编码,后者通常在 LLM 中使用。与绝对位置编码不同,相对位置编码根据键和查询之间的偏移量生成嵌入,因此它可以在比训练序列更长的序列上表现良好。
注意力机制和偏置:除了原始 Transformer 中的全自注意力机制,GPT-3 采用了更低计算复杂度的稀疏注意力机制,即分解注意力。此外,与原始 Transformer 一样,大多数 LLM 在每个线性层和层标准化中保留了偏置。
预训练在将大规模语料库中的通用知识编码到巨大的模型参数中起着关键作用。
语言建模(LM):预训练仅包含解码器的LLM(如 GPT-3 和 PaLM)最常用的目标。给定一个 token 序列,LM 任务旨在基于序列中前面的 token,自回归地预测目标 token。由于大多数语言任务可以转换为基于输入的预测问题来解决,因此这些仅包含解码器的 LLM 可能具有优势,可以隐式地学习如何以统一的 LM 方式完成这些任务。一些研究还表明,仅包含解码器的 LLM 可以通过自回归地预测下一个token 而自然地迁移到某些任务中,而无需微调。
去噪自编码(DAE):DAE 任务的输入是一些有随机替换区间的损坏文本。然后,训练语言模型以恢复被替换的 token。然而,DAE 任务在实现上似乎比 LM 任务更为复杂。因此,它并没有被广泛用于预训练 LLM。采用 DAE 作为预训练目标的现有 LLM 包括 T5 和 GLM-130B 。这些模型主要通过自回归地恢复替换区间来进行训练。
选择架构和预训练任务可能会对 LLM 的归纳偏差产生不同影响,从而导致不同的模型性能。现有研究表明,在没有进行多任务微调的情况下,因果解码器比其他架构具有更好的零样本性能。通过扩展模型大小、数据集大小和总计算量,可以大幅提高因果解码器的性能。
当前仍需要更多架构和预训练任务的研究,以分析架构和预训练任务的选择如何影响 LLM 的能力,特别是对于编码器-解码器架构。
这一部分回顾训练LLM的重要设置和技巧。
批量训练:对于语言模型的预训练,现有研究通常将批量大小设置为较大的数字(如 2048 个例子或 400 万个 token),以提高训练的稳定性和吞吐量。GPT-3 和 PaLM 等引入了一种新的策略,即在训练过程中动态增加批量大小,最终达到百万级别。
学习率:现有的 LLM 通常在预训练过程中采用类似的学习率调整策略,包括预热(warm-up)和衰减(decay)。
优化器:Adam 优化器和 AdamW 优化器被广泛应用于 LLM(例如 GPT-3)的训练中,这些优化器使用了基于一阶梯度优化的低阶矩自适应估计。Adafactor是一种 Adam 优化器的变体,经过特殊设计以在训练过程中节省显存。
稳定训练:在 LLM 的预训练过程中,常常会遇到训练不稳定的问题,这可能会导致模型崩溃。为了解决,通常会广泛使用权重衰减(weight decay)和梯度裁剪(gradient clipping)。
随着模型和数据规模的增加,有限的计算资源下高效地训练LLM 变得具有挑战性。尤其是两个主要的技术问题需要解决,即提高训练吞吐量和加载更大模型到显存中。
3D并行:3D 并行实际上是三种常用并行训练技术的组合,即数据并行、流水线并行和张量并行。数据并行将模型参数和优化器状态复制到多个 GPU 上,然后将整个训练语料库分配到这些 GPU 上。这样,每个 GPU 只需要处理分配给它的数据,并执行前向和反向传播以获取梯度。流水线并行旨在将 LLM 的不同层分配到多个 GPU 上。在 Transformer 模型中,流水线并行将连续的层加载到同一 GPU 上,以减少在 GPU 之间传输已经计算的隐藏状态或梯度的成本。张量并行也是一种常用的技术,旨在为多GPU 加载而分解 LLM。与流水线并行不同,张量并行专注于分解 LLM 的张量(参数矩阵)。
ZeRO:Zero Redundancy Optimizer 技术,由 Deep Speed 库提出,专注于解决数据并行中的内存冗余问题。ZeRO 技术旨在仅在每个 GPU 上保留部分数据,而当需要其余数据时可以从其他 GPU 中检索。具体而言,根据三个数据部分具体的存储方式,ZeRO 提供了三种解决方案,即优化器状态分区、梯度分区和参数分区。
混合精度训练:以前的 PLM(例如 BERT )主要使用 32位浮点数(FP32)进行预训练。近年来,为了预训练极大的语言模型,一些研究开始利用 16 位浮点数(FP16),以减少内存使用和通信开销。
除了上述训练策略,提高使用 LLM 的推理速度也很重要。通常,量化技术被广泛用于减少 LLM 推理阶段的时间和空间开销。虽然会损失一些模型性能,但量化语言模型具有更小的模型大小和更快的推理速度。
越来越多的研究表明,LLM 的能力可以进一步适配到特定的目标。本节介绍两种适配预训练后的 LLM 的方法:指令微调(instruction tuning)和对齐微调(alignment tuning)。前一种方法旨在增强(或解锁)LLM 的能力,而后一种方法旨在将 LLM 的行为与人类的价值观或偏好对齐。
本质上,指令微调是在自然语言格式的实例(instance)集合上微调预训练后的 LLM 的方法。为了进行指令微调,我们首先需要收集或构建指令格式(instruction-formatted)的实例。然后,我们使用这种格式的实例以有监督的方式微调LLM(例如使用序列到序列的损失进行训练)。
通常情况下,一个指令格式的实例包括一个任务描述(称为指令)、一对输入-输出以及少量示例(可选)。接下来介绍两种主要的构建格式化实例的方法,然后讨论几个构建实例关键因素。
格式化已有数据集:作为指令微调实例的一种重要来源,用自然语言的任务描述来格式化这些多任务训练数据集是相当方便的。具体来说,最近工作使用人类撰写的任务描述来增广带标注的数据集,这些描述通过解释任务目标来指导LLM 理解任务。在指令微调之后,LLM 可以通过遵循任务描述很好地泛化到其他未见过的任务上。
格式化人类需求:尽管大量的训练实例已经通过添加指令进行格式化,但它们主要来自公共的 NLP 数据集,任务描述缺乏多样性或与人类真实需求不匹配。InstructGPT 建议采用真实用户提交给 OpenAI API 的查询作为任务描述。用户查询以自然语言表示,很适合引导出LLM 遵循指令的能力。此外,为了丰富任务的多样性,标注者为真实生活中的任务编写指令,包括开放式生成问答、头脑风暴和聊天等。然后另一组标注人员直接按照将这些指令作为输出进行回答。最后,将指令(即采集的用户查询)和期望的输出(即人工编写的答案)配对作为一个训练实例。
格式化实例与两种构造指令格式实例方式的示意图
指令微调可以被视为一个有监督的训练过程,其优化过程与预训练有一些不同,比如训练目标函数(如序列到序列的损失)和优化参数设置(如更小的批量大小和学习率)。指令微调还需要考虑两个重要方面。
平衡数据分布:由于指令微调涉及多种任务的混合,因此在微调过程中平衡不同任务的比例非常重要。一种广泛使用的方法是实例比例混合策略,即将所有数据集合并,然后从混合数据集中按比例采样每种实例。此外,根据最近的研究发现,提高高质量数据集的采样比例通常可以带来性能提升。
结合指令微调和预训练:为了使微调过程更加有效和稳定,有的工作在指令微调期间加入了预训练数据,这可以看作是对模型的正则化。此外,一些研究并没有使用单独的两阶段训练过程(预训练和指令微调),而是尝试混合使用预训练数据(即纯文本)和指令微调数据(即指令格式数据),用多任务学习的方式从头训练模型。
性能改进:最近的研究在多个规模上对 LM 进行了实验,表明不同规模的模型都可以从指令微调中受益,随着参数规模的增加,性能也得到了提升。除了模型规模外,指令微调在不同的模型架构、预训练目标和模型适配方法上都展现出稳定的改进效果。
任务泛化性:指令微调鼓励模型理解用于完成任务的自然语言指令。它赋予 LLM 遵循人类指令执行特定任务的能力(通常被视为一种涌现能力),即使在未见过的任务上也能够执行。大量研究已经证实了指令微调在已见过和未见过的任务上都有卓越的性能表现。此外,指令微调还被证明可以帮助缓解 LLM 的一些弱点(例如生成重复内容或补全输入但不完成相应任务),从而使 LLM 具有更强的解决现实世界任务的能力。
背景:对于 LLM 而言,模型参数的预训练使用了语言建模的目标,即用单词预测进行预训练,但这没有考虑到人类的价值观或偏好。这些模型有时可能表现出预期之外的行为,例如编造虚假信息、追求不准确的目标,以及产生有害的、误导性的和有偏见的表达。为了避免这些预期外的行为,一些研究提出了人类对齐,使得LLM 的行为能够符合人类期望。
标准:在基本层面上,诚实的 LLM 应该向用户提供准确的内容,而不会捏造信息;模型生成的语言不得是冒犯性或歧视性的;LLM为达到有用性,应尽其所能以简明扼要且高效的方式帮助用户解决任务或回答问题。这些对齐的标准相当主观,是基于人类认知制定的。
高质量的人类反馈对于将 LLM 向人类的偏好和价值观对齐非常重要。在现有的工作中,主要有三种方法从人类标注者中收集反馈和偏好数据。
基于排序:部分研究引入了 Elo 评分系统 ,通过一一比较所有候选输出结果来生成一个偏好排序。候选输出的排序将用于调整模型更倾向的输出,从而产生更可靠和更安全的结果。
基于问题:此外,通过回答研究人员设计的特定问题,标注人员可以提供更详细的反馈,这些问题能够覆盖不同的对齐标准以及其他对 LLM 的约束条件。
基于规则:在许多研究中,基于规则的方法也被用来提供更详细的人类反馈。作为一个经典例子,Sparrow 不仅选择了标注人员挑选的最佳回复,还设计了一系列规则来测试模型生成的回复是否符合有用、正确和无害的对齐标准。
为了使 LLM 与人类价值观保持一致,人们提出了 RLHF,使用收集到的人类反馈数据对 LLM 进行微调,有助于改进对齐的指标。RLHF采用强化学习(RL)算法,通过学习奖励模型使 LLM适配人类反馈。
系统框架:RLHF 系统主要包括三个关键组件,要对齐的 PLM、从人类反馈中学习的奖励模型,以及训练 LM 的 RL 算法。具体来说,PLM 通常是一个生成模型,它使用现有的 PLM 参数进行初始化。此外,奖励模型(RM)提供(学习得到的)指导信号,这些信号反映了人类对 LM生成的文本的偏好,通常以标量值的形式表示。最后,为了使用来自奖励模型的信号优化 PLM,设计一种特定的 RL 算法用于大规模模型的微调。
关键步骤:监督微调,为了使 LM 具有初步执行所需行为的能力,通常需要收集一个包含输入提示(指令)和所需输出的监督数据集,以对 LM 进行微调。训练奖励模型,我们向 LM 中输入采样的提示(来自监督数据集或人类生成的提示),以生成一定数量的输出文本,然后邀请人工标注员为这些输入-输出对标注偏好,最后训练 RM 预测人类偏好的输出。强化学习微调,形式化为 RL 问题。RL 问题的策略由 PLM 给出(将提示作为输入并返回输出文本),行动空间是 LM 的词表,状态是目前生成的 token 序列,奖励则由 RM 提供。
RLHF算法工作流
上文讨论了指令微调和对齐微调的方法,以使 LLM 适应特定的目标。由于 LLM 包含大量的模型参数,进行全参数微调将会有较大开销。本节讨论如何对 LLM 进行高效微调。
参数高效微调(parameter-efficient fine-tuning) 是一个重要的课题,旨在减少可训练参数的数量,同时尽可能保持良好的性能。简要回顾四种用于 Transformer 语言模型的参数高效微调方法,包括适配器微调(adapter tuning)、前缀微调(prefix tuning)、提示微调(prompt tuning)和低秩适配(LoRA)。
适配器微调:在 Transformer 模型中引入了小型神经网络模块,称为适配器。适配器模块将被集成到每个 Transformer 层中,通常使用串行插入的方式,分别在 Transformer 层的两个核心部分(即注意力层和前馈层)之后。另外,在 Transformer 层中也可以使用并行适配器,其将两个适配器模块与注意力层和前馈层并行放置。
前缀微调:前缀微调在语言模型的每个 Transformer 层前添加了一系列前缀,这些前缀是一组可训练的连续向量。这些前缀向量具有任务的特异性,可以视为虚拟的 token 嵌入。优化后,映射函数将被舍弃,只保留派生的前缀向量以增强与特定任务相关的性能。由于只有前缀参数会被训练,因此可以实现参数高效的模型优化。
提示微调:提示微调主要是在输入层中加入可训练的提示向量。基于离散提示方法,它通过包含一组软提示 token(以自由形式或前缀形式)来扩充输入文本,然后将扩充后的输入用于解决特定的下游任务。在实现中,任务特定的提示嵌入与输入文本嵌入相结合,然后输入到语言模型中。
低秩适配:低秩适配(LoRA)通过添加低秩约束来近似每层的更新矩阵,以减少适配下游任务的可训练参数。LoRA 的基本思想是冻结原始矩阵,同时通过低秩分解矩阵来近似参数更新矩阵。LoRA 的主要优点是可以大大节省内存和存储使用。此外,人们可以只保留一个大型模型副本,同时保留多个用于适配不同下游任务的特定低秩分解矩阵。
随着 LLM 的兴起,高效微调吸引了越来越多的研究关注,以开发一种更轻量级的下游任务适配方法。特别地,LoRA 已广泛应用于开源 LLM(如 LLaMA和 BLOOM)以实现参数高效微调。在这些研究尝试中,LLaMA 及其变体因其参数高效微调而受到了广泛关注。总体而言,LoRA 在这些比较方法中表现相对较好,同时使用的可训练参数明显较少。
然而,大多数方法都是在小型 PLM 上进行测试的,而不是在 LLM 上进行的。到目前为止,有关不同高效微调方法对不同设置或任务下 LLM 的影响仍缺乏深入的研究。
经过预训练或适配微调之后,使用 LLM 的主要方法是为解决各种任务设计适当的提示策略。一种典型的提示方法是将任务描述和(或)示范(demonstration)以自然语言文本的形式表达的上下文学习(ICL)。此外,采用思维链提示(chain-of-thought prompting)可以通过将一系列中间推理步骤加入提示中来增强 ICL。
ICL 在 GPT-3 中首次被提出,而后成为使用 LLM 的典型方法。
ICL 使用一种由任务描述和(或)作为示范的几个任务样例构成的自然语言提示。首先,以任务描述作为开始,从任务数据集中选择一些样例作为示范。然后,以特别设计的模板形式将它们按照特定的顺序组合成自然语言提示。最后,将测试样例添加到 LLM 的输入中以生成输出。基于任务示范,LLM 可以在没有显式梯度更新的情况下识别和执行新任务。
设代表由_k_个样例组成的一组示范,其中_f_是将第_k_个任务样例转换为自然语言提示的函数。给定任务描述I、示范D以及新的输入查询,LLM生成的输出预测可以如下表示:
其中真实的答案留白,来由LLM预测。其构建过程着眼于于提示中示范格式化的三个主要方面,包括:选择组成示范的样例,用函数将每个样例格式化为提示,以及用合理的顺序排列示范。
多项研究表明,ICL 的有效性在很大程度上受到示范设计的影响。本节从三个方面介绍 ICL 的示范设计,即示范选择、格式和顺序。
示范选择:关于示范选择的主要方法有两种,启发式方法和基于 LLM 的方法。由于其简单性和低成本,现有工作广泛采用启发式方法来选择示范,一些研究采用基于 k-NN 的检索器来选择与查询语义相关的样例;另一部分工作利用 LLM 来选择示例,例如 LLM 可以直接根据添加样例后的性能提升评估每个样例的信息量,从而进行选择。
示范格式:在选择任务示范样例后,下一步是将它们整合及格式化为对 LLM 的自然语言提示。一种直接的方法是用相应的输入输出对来实例化预定义的模板。为了构建更具信息量的模板,一些研究考虑添加任务描述,或者通过 CoT 提示来增强 LLM 的推理能力。由于人工标注不同任务的示范格式成本较高,一些工作研究了如何自动生成高质量的示范格式。
示范顺序:LLM 有时会受到顺序偏差的影响,例如会倾向于重复示范结尾附近的答案。因此,以合理的顺序排列示范(例如任务样例)非常重要。早期的工作提出了一些启发式方法来快速地找到一个良好的顺序。受到信息论的启发,一些最近的研究提出最小化压缩和传输任务标签所需的码长来整合更多的任务信息。
预训练如何影响上下文学习? 一些研究表明,小规模的 PLM 也可以通过特别设计的训练任务表现出强大的 ICL 能力,甚至可能超越规模更大的模型。这表明,训练任务的设计是影响 LLM 的 ICL 能力的一个重要因素。除了训练任务之外,近期的一些研究还探索了 ICL 与预训练语料之间的关系;研究表明,ICL 的性能主要取决于预训练语料的来源而非规模。
大语言模型如何实现上下文学习? 在推理阶段,因为 ICL 不涉及显式的学习或更新,研究人员侧重分析在给定示范的情况下 ICL 的能力如何实现。他们通常从梯度下降的角度进行分析,并将 ICL 视为隐式微调。在这一框架下,ICL可以解释为:通过前向计算,LLM 生成关于示范的元梯度,并通过注意力机制隐式地执行梯度下降。实验也表明,LLM中的某些注意力头能够执行与 ICL 能力密切相关的任务无关的原子操作。
上下文学习和思维链提示的比较说明
思维链(Chain-of-Thought,CoT)是一种改进的提示策略,旨在提高 LLM 在复杂推理任务中的性能,例如算术推理,常识推理和符号推理。不同于 ICL中仅使用输入输出对来构造提示,CoT 将可以导出最终输出的中间推理步骤纳入提示中。
通常情况下,CoT 可以在小样本(few-shot)和零样本(zero-shot)设置这两种主要设置下与 ICL 一起使用。
小样本思维链:小样本 CoT 是 ICL 的一个特例,它通过加入 CoT 推理步骤将每个示范(输入,输出)扩充为(输入,CoT,输出)。设计合适的 CoT 提示对于有效引出LLM 的复杂推理能力至关重要。一种直接的方法是使用多样的 CoT 推理路径,这可以有效增强性能。另一个基于直觉的想法是,具有复杂推理路径的提示更有可能引出 LLM 的推理能力,这可以提高生成正确答案的准确性。除了丰富上下文信息外,CoT 提示还提供了更多推断答案的选项。现有研究主要关注如何生成多个推理路径,并尝试在得到的答案中寻找一致性。
零样本思维链:与小样本 CoT 不同,零样本 CoT 没有在提示中加入人工标注的任务示范。相反,它直接生成推理步骤,然后利用生成的 CoT 来得出答案。这种策略在模型规模超过一定大小时可以显著提高性能,但在小规模的模型中效果不佳,这是涌现能力的重要表现。
思维链何时适用于LLM? 由于 CoT 是一种涌现能力,它只能有效增强有 100 亿或更多参数的足够大的模型,而对小模型无效。此外,由于 CoT 通过中间推理步骤增强了标准提示,它的效果主要体现在需要逐步推理的任务,例如算术推理、常识推理和符号推理。
LLM为什么能够进行思维链推理? 关于 CoT 能力的来源,研究人员普遍假设其可以归因于使用代码进行训练,因为在代码数据上训练过的模型表现出了强大的推理能力。直观上,代码数据具有规范的算法逻辑和编程流程,这可能有助于提高 LLM 的推理性能。此外,文本和模式之间存在共生关系:文本有助于 LLM生成有用的模式,而模式则可以帮助 LLM 理解任务并生成额外文本以帮助解决任务。
总的来说,CoT 提示提供了一种通用而灵活的方法来引出 LLM 的推理能力。还有一些工作尝试将这种技术扩展至多模态任务和多语言任务。
为了检验 LLM 的有效性和优越性,已有研究采用了大量的任务和基准数据集来进行实证评估和分析。首先介绍 LLM 在语言生成和语言理解方面的三种基本评估任务。然后介绍 LLM 在几种更复杂的设定或目标下的高级任务。
本部分主要关注 LLM 的三种评估任务,即语言生成、知识利用和复杂推理。
语言建模:LLM 的基本能力,旨在基于前一个token 预测下一个 token,主要关注基本的语言理解和生成能力。困惑度(perplexity)指标通常用于评估零样本情况下模型的性能。有的数据集要求 LLM 基于一段上下文来预测句子的最后一个单词。语言建模任务的性能通常遵循扩展法则,这意味着提升语言模型(LM)的参数量将提高模型的准确性并降低困惑度。
条件文本生成:作为语言生成中的一个重要话题,条件文本生成旨在基于给定的条件生成满足特定任务需求的文本,通常包括机器翻译、文本摘要和问答系统等。为了衡量生成文本的质量,通常使用自动化指标和人类评分来评估性能。由于 LLM 具有强大的语言生成能力,它们在现有的数据集上取得了显著的性能,甚至超过了人类(在测试数据集上的)表现。
代码合成:除了生成高质量的自然语言外,现有的 LLM 还表现出强大的生成形式语言的能力,尤其是满足特定条件的计算机程序(即代码),这种能力被称为代码合成。与自然语言生成不同,由于生成的代码可以直接用相应的编译器或解释器执行,现有的工作主要通过计算测试用例的通过率来评估 LLM 生成的代码的质量。
知识利用是一种智能系统基于事实证据的支撑,完成知识密集型任务的重要能力。具体而言,它要求 LLM 适当地利用来自预训练语料库的丰富事实知识,或在必要的时候检索外部数据。根据测试任务(问答或知识补全)和评估设定(有或没有外部资源),将现有的知识利用任务分为三种类型。
闭卷问答:闭卷问答任务测试 LLM 从预训练语料库中习得的事实知识。LLM 只能基于给定的上下文回答问题,而不能使用外部资源。其中准确性指标被广泛采用。实验表明,LLM在这种情况下表现良好,甚至与目前效果最好的开放领域问答系统的表现相匹配。在相似的参数规模下,用更多与评估任务相关的数据训练 LLM 将实现更好的性能。
开卷问答:与闭卷问答不同,LLM 可以从外部知识库或文档集合中提取有用的证据,然后基于提取的证据回答问题。在开卷问答任务中,广泛使用的评估指标是准确性和 F1-score。为了从外部资源中选出有关的知识,LLM 通常与一个文本检索器(甚至是一个搜索引擎)配对,该文本检索器与 LLM 独立或联合训练。研究表明,检索到的证据可以大大提高生成答案的准确性。
知识补全:在知识补全任务中,LLM(在某种程度上)可以被视为一个知识库 ,补全或预测知识单元的缺失部分。这种任务可以探索和评估 LLM 从预训练数据中学习到的知识的数量和种类。现有的知识补全任务可以粗略地分为知识图谱补全任务和事实补全任务。实证研究表明,对于涉及特定关系类型的知识补全任务,现有的 LLM 很难完成 。
知识推理:知识推理任务依赖于逻辑关系和事实知识的证据来回答给定的问题。现有的工作主要使用特定的数据集来评估相应类型的知识推理能力。除了生成结果的准确性,现有的工作还通过自动化评测或人类评估的方法,来评估所生成的推理过程的质量。通常,这些任务要求 LLM 根据事实知识逐步推理,直到回答给定的问题。
符号推理:符号推理任务主要关注于在形式化规则设定中操作符号以实现某些特定目标,且这些操作和规则可能在 LLM 预训练期间从未被看到过。现有的工作通常用尾字母拼接和硬币反转任务来评估 LLM,其中用于评测的数据与上下文例子有相同的推理步骤(称为领域内测试)或更多步骤(称为领域外测试)。
数学推理:数学推理任务需要综合利用数学知识、逻辑和计算来解决问题或生成证明过程。现有的数学推理任务主要可分为数学问题求解和自动定理证明两类。由于这些任务也需要多步推理,CoT 提示策略已被广泛采用来提高 LLM 的推理性能。
除了基本评测任务外,LLM 还展现出一些需要特殊考虑的高级能力。本节将讨论几种有代表性的高级能力及其相应的评测方法,包括与人类对齐、与外部环境的互动、工具操作等。
与人类对齐(human alignment)指的是让 LLM 能够很好地符合人类的价值和需求,这是在现实世界应用中广泛使用 LLM的关键能力。为了评估这种能力,现有的研究考虑了多个人类对齐的标准,例如有益性、真实性和安全性。尽管存在基于数据集的自动评估,人工评估仍然是一种更直接有效的测试LLM 与人类对齐能力的方法。此外,对于人类对齐的其他方面,一些研究提出使用具体指令和设计标注规则来指导评价过程。实证研究表明,这些策略可以大大提高 LLM 的人类对齐能力。
除了标准评估任务外,LLM 还具有从外部环境接收反馈并根据行为指令执行操作的能力,例如生成自然语言行动计划以操纵智能体。这样的能力也是在 LLM 中涌现,可以生成详细且高度切实可行的行动计划。对于 LLM 生成的行动计划,现有的工作要么采用基准测试中的常规指标,要么直接根据现实世界执行的成功率来评估这种能力现有的工作已经显示出 LLM 在与外部环境的互动和生成准确的行动计划方面的有效性。
在解决复杂问题时,LLM 可以在必要的情况下利用外部工具。通过封装可用工具的 API 调用,现有的工作已经考虑了各种外部工具,例如搜索引擎、计算器和编译器等,以增强 LLM 在特定任务上的性能。为了检验工具使用的能力,现有的工作大多采用复杂的推理任务进行评估,例如数学问题求解或知识问答,其中成功使用工具对于增强 LLM 缺乏的所需技能非常重要。现有工作发现,在工具的帮助下 LLM 变得更加有能力解决它们不擅长的问题,例如方程计算和利用实时信息,并最终提高了最后的性能。
除了上述三种高级能力之外,LLM 还可能展现出一些有关特定任务(例如数据标注)或学习机制(例如自我改进)的其他高级能力。
大模型时代,企业对人才的需求变了,AIGC相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。
-END-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。