大模型技术发展概述 -(三)

文本内容参考论文《A Survey of Large Language Models》

在这里插入图片描述

在这里插入图片描述

论文标题:A Survey of Large Language Models
论文链接:https://arxiv.org/pdf/2303.18223v10.pdf

5. 适应性调整LLM

经过预训练,LLM可以获取解决各种任务的通用能力。然而,越来越多的研究表明,**LLM的能力可以根据具体目标进行进一步调整。**在本节中,我们介绍了适应预训练LLM的两种主要方法,即指令调整(Instruction Tuning)和对齐调整(Alignment Tuning)。前一种方法主要旨在增强(或解锁)LLM的能力,而后一种方法旨在使LLM的行为与人类的价值观或偏好保持一致。此外,我们还讨论了用于快速模型调整的高效调整方法。接下来,我们将详细介绍这三个部分。

5.1 指令(Instruction)调整

实质上,指令调整是通过一系列格式化的自然语言实例对预训练LLM进行微调的方法,这与监督微调和多任务提示训练密切相关。为了进行指令调整,我们首先需要收集或构建格式化的实例。然后,我们使用这些格式化的实例以监督学习的方式对LLM进行微调(例如,使用序列到序列损失进行训练)。经过指令调整后,LLM可以展示出更优越的泛化能力,可以适用于未见任务,甚至在多语言环境下。

5.1.1 格式化实例构建

通常,一个格式化的实例包括一个任务描述(称为指令),一个输入输出对以及少量示范(可选)。作为重要的公共资源,现有研究已经发布了大量以自然语言格式化的带标签数据。接下来,我们介绍两种构建格式化实例的主要方法(参见下图的示例),然后讨论实例构建的几个关键因素。

格式化现有数据集

在这里插入图片描述

在提出指令调整之前,一些早期的研究从各种任务(如文本摘要、文本分类和翻译)中收集实例,创建了受监督的多任务训练数据集。作为指令调整实例的主要来源,将这些多任务训练数据集以自然语言任务描述进行格式化是很方便的。

例如,在上图中,为每个问题回答任务添加了一个任务描述“请回答这个问题”。经过指令调整后,LLM可以通过遵循任务描述在其他未见任务上具有良好的泛化能力。

研究已经表明,指令是影响LLM任务泛化能力的关键因素:通过在去除任务描述的带标签数据集上对模型进行微调,会导致模型性能显著下降。为了更好地生成指令调整的标记实例,提出了一种众包平台PromptSource,有效地创建、共享和验证不同数据集的任务描述。为了丰富训练实例,一些研究还尝试使用特殊设计的任务描述反转现有实例的输入输出对进行指令调整。例如,给定一个问题-答案对,我们可以通过预测基于答案的问题(例如,“请根据答案生成一个问题:”)来创建一个新的实例。此外,一些研究还利用启发式任务模板将大规模未标记的文本转化为带标签的实例。

格式化人类需求

尽管已经使用指令格式化了大量训练实例,但它们主要来自公共NLP数据集,要么缺乏指令的多样性,要么与真实的人类需求不匹配。为了解决这个问题,InstructGPT提议将用户提交给OpenAI API的查询作为任务描述。用户查询以自然语言表示,非常适合引发LLM的指令遵循能力。此外,为了丰富任务的多样性,还要求人类标注者撰写实际生活任务的指令,包括开放式生成、开放式问答、头脑风暴和聊天等。然后,他们让另一组标注者直接回答这些指令作为输出。最后,将一个指令(即收集的用户查询)与预期的输出(即人工编写的答案)配对作为训练实例。值得注意的是,InstructGPT还使用这些以自然语言格式化的任务来进行对齐调整。

实例构建的关键因素

实例的质量对模型的性能有重要影响。下面讨论一些实例构建的关键因素。

  • 扩展指令:研究表明,增加任务数量可以大大提高LLM的泛化能力。随着任务数量的增加,模型性能最初呈连续增长的趋势,但当达到一定水平时,收益变得微不足道。一个合理的推测是,一定数量的代表性任务可以提供相对充足的知识,添加更多的任务可能不会带来额外的收益。此外,从多个方面(如长度、结构和创造力)增加任务描述的多样性也是有益的。至于每个任务的实例数,已经发现少量实例通常可以达到模型的泛化性能饱和点。然而,对于一些任务,将实例数量增加到很大数量(例如几百个)可能会导致过拟合问题,损害模型的性能。
  • 格式设计:自然语言格式的设计也对LLM的泛化性能产生重要影响。通常,我们可以将任务描述和可选示范添加到现有数据集的输入输出对中,其中任务描述是LLM理解任务的最关键部分。此外,适当数量的示范作为实例可以带来实质性的改进,同时减轻了模型对指令工程的敏感性。然而,将其他组成部分(例如避免事项、原因和建议)纳入指令可能对LLM的性能产生微不足道甚至相反的影响。最近,为了引发LLM的逐步推理能力,一些研究提出对一些推理数据集(如算术推理)包括思路链(CoT)示例,fine-tuning LLMs时使用CoT和非CoT示例可以在各种推理任务上取得良好的性能,包括需要多跳推理能力的任务(如常识问答和算术推理)以及不需要此类推理方式的任务(如情感分析和提取式问答)。

总之,似乎指令的多样性比实例的数量更重要,因为表现良好的InstructGPT和Alpaca使用的指令(或实例)比Flan系列LLM少但更多样。此外,邀请标注者撰写符合人类需求的任务比使用特定数据集的任务更有用。然而,目前缺乏人类需求实例的标注指南,使得任务构成在某种程度上具有启发性

5.1.2 指令(Instrcution)调整策略

与预训练不同,指令调整通常更加高效,因为只使用了适度数量的实例进行训练。由于指令调整可以被视为一种监督训练过程,其优化在几个方面与预训练不同,如训练目标(即序列到序列损失函数)和优化配置(例如更小的批量大小和学习率),这在实践中需要特别注意。除了这些优化配置,还有两个重要的方面需要考虑:

平衡数据分布

由于指令调整涉及不同任务的混合,因此在微调过程中平衡不同任务的比例非常重要。一个广泛使用的方法是示例比例混合策略,即将所有数据集合并,并从混合数据集中等概率采样每个实例。此外,根据最新的研究发现,增加高质量数据集(如FLAN 和P3 )的采样比例通常可以带来性能改进。然而,通常需要设置一个最大上限来控制在指令调整期间数据集可以包含的最大实例数,这样做是为了防止更大的数据集压倒整个分布。在实践中,根据不同的数据集,最大上限通常设置为几千或几万个实例。

结合指令调整和预训练

为了使调整过程更加有效和稳定,OPT-IML在指令调整期间将预训练数据纳入考虑,这可以看作是对模型调整的一种正则化。此外,一些研究尝试使用多任务学习从头开始训练模型,混合使用预训练数据(即纯文本)和指令调整数据(即格式化数据集),而不是使用独立的两阶段过程(先预训练,再指令调整)。具体而言,GLM-130B和Galactica将格式化的指令数据集作为预训练语料库的一小部分进行预训练,这在一定程度上同时实现了预训练和指令调整的优势。

5.1.3 指令调整的效果

在本部分,我们讨论指令调整对LLM的两个主要方面的影响。

性能改进

尽管仅对适度数量的实例进行微调,指令调整已经成为提高或解锁LLM能力的重要方式。最近的研究在多个规模(从77M到540B)上对语言模型进行了实验,结果显示不同规模的模型都可以从指令调整中受益,随着参数规模的增加,性能得到改善。此外,经过指令调整的较小模型甚至可以比没有进行微调的较大模型表现更好。除了模型规模,指令调整在各种模型架构、预训练目标和模型适应方法中都展示了一致的改进。在实践中,指令调整提供了一种改进现有语言模型能力的通用方法(包括小型PLMs)。此外,与预训练相比,指令调整的成本也要低得多,因为LLM所需的指令数据量明显小于预训练数据。

任务泛化

指令调整鼓励模型理解用于任务完成的自然语言指令。它赋予LLM遵循人类指令执行特定任务的能力(通常被视为一种新兴能力),即使在未见任务上也能够实现,甚至在没有演示的情况下。大量研究已经证实了指令调整在实现在已知和未知任务上的卓越性能方面的有效性。此外,指令调整还显示出有助于缓解LLM的几个弱点(如重复生成或补充输入而未完成特定任务),使LLM对解决现实世界任务的能力更加出色。此外,经过指令调整训练的LLM能够在不同语言之间进行相关任务的泛化。例如,BLOOMZ-P3基于BLOOM使用仅英文任务集合P3进行微调。

5.2 对齐调优

5.2.1 对齐的背景和标准

背景

LLM在各种自然语言处理任务中展现出了非凡的能力,但这些模型有时可能表现出意想不到的行为,例如捏造虚假信息、追求不准确的目标以及产生有害、误导和有偏见的表达。对于LLM来说,语言建模目标通过单词预测来预训练模型参数,但缺乏对人类价值观或偏好的考虑。为了避免这些意外行为,已提出人类对齐的概念,即使LLM的行为符合人类的期望。然而,与原始的预训练和适应调优(如指导调优)不同,这种对齐需要考虑非常不同的标准(如有用性、诚实性和无害性)。已经发现对齐可能在一定程度上损害LLM的普遍能力,这在相关文献中被称为对齐税。

对齐标准

最近,人们越来越关注开发多样化的标准来规范LLM的行为。在这里,我们以三个典型的对齐标准(即有用性、诚实性和无害性)为例进行讨论,这些标准已在现有文献中被广泛采用。此外,还有其他从不同角度对LLM进行对齐的标准,包括行为、意图、激励和内在方面,它们本质上是类似的(或至少具有类似的对齐技术)。根据具体需求,可以修改这三个标准,例如用正确性替换诚实性,或关注某些指定的标准。接下来,对这三个典型的对齐标准进行简要解释:

  • 有用性:为了有用,LLM应尽量简洁高效地帮助用户解决任务或回答问题。在更高层次上,当需要进一步澄清时,LLM应展现出通过相关问题提问来引出额外相关信息的能力,并展现出适当的敏感性、感知力和谨慎性。实现有用性对LLM来说是具有挑战性的,因为很难精确定义和衡量用户的意图。
  • 诚实性:在基本层面上,对齐为诚实性的LLM应提供准确的内容,而不是虚构信息。此外,LLM还应适当地表达其输出中的不确定度,以避免任何形式的欺骗或信息歪曲。这要求模型了解自己的能力和知识水平(例如,“知道自己不知道的”)。根据[223]中的讨论,诚实性是一个相对客观的标准,相比有用性和无害性,诚实性对人类努力的依赖可能较少。
  • 无害性:为了无害,模型产生的语言不应具有冒犯性或歧视性。在其能力范围内,模型应能够检测到旨在以恶意方式引诱请求的潜在努力。理想情况下,当模型被诱导执行危险动作(例如犯罪行为)时,LLM应礼貌地拒绝。然而,什么样的行为被认为是有害的,以及到什么程度在个人或社会之间存在差异,高度依赖于使用LLM的人、提出的问题类型和LLM使用的上下文(例如时间)。

正如我们所见,这些标准非常主观,是基于人类认知的。因此,很难将它们直接制定为LLM的优化目标。在现有的工作中,有许多方法可以在对齐LLM时满足这些标准。一种有希望的技术是红队测试,它使用手动或自动的方式以对抗性的方式探测LLM,生成有害的输出,然后更新LLM以防止此类输出的产生。

5.2.2 收集人类反馈

在预训练阶段,LLM使用语言建模目标在大规模语料库上进行训练。然而,它无法考虑人类对LLM输出的主观和定性评价(在本调查中称为人类反馈)。高质量的人类反馈对于将LLM与人类偏好和价值观对齐非常重要。在这部分中,我们讨论如何选择一组人类标注者来收集反馈数据。

人类标注者选择
现有工作中,人类注释是生成人类反馈数据的主要方法。选择合适的人类标注者非常重要,他们应具备合格的教育水平和优秀的英语能力。一些研究通过评估人类标注者与研究人员之间的一致性来筛选标注者,确保人类反馈的质量。另一些研究使用“超级评估员”来确保高质量的人类反馈。为了进一步规范标注者的注释,给予他们详细的说明和即时指导是有帮助的。

人类反馈收集

现有工作中,有三种主要方法用于从人类标注者那里收集反馈和偏好数据。这些方法包括基于排名的方法,基于问题的方法和基于规则的方法。

  • 基于排名的方法使用Elo排名系统比较候选输出,以得出偏好排名,指导模型生成更可靠和安全的输出。
  • 基于问题的方法通过回答设计的问题提供详细反馈,涵盖LLM的对齐标准和其他约束条件。
  • 基于规则的方法利用一系列规则测试模型生成的输出是否符合特定标准,包括有用性、正确性和无害性。这些方法可以获得不同类型的人类反馈数据,从而提高模型的性能和安全性。

接下来,我们将重点介绍一个著名的技术,即从人类反馈中进行强化学习(RLHF),它已被广泛应用于最近强大的LLM,如ChatGPT

5.2.3 从人类反馈中进行强化学习

为了使LLM与人类价值观对齐,已经提出了从人类反馈中进行强化学习(RLHF)的方法,通过使用收集到的人类反馈数据对LLM进行微调,从而改善对齐标准(例如有用性、诚实性和无害性)。RLHF利用强化学习算法(例如Proximal Policy Optimization (PPO))将人类纳入训练过程,以开发良好对齐的LLM,如InstructGPT的示例。

RLHF系统

RLHF系统主要由三个关键组件组成:待对齐的预训练LLM、从人类反馈中学习的奖励模型和用于训练LLM的强化学习算法。具体而言,预训练LLM通常是一个生成模型,使用现有的预训练LLM参数进行初始化。例如,OpenAI在其首个流行的RLHF模型InstructGPT 中使用了1750亿个参数的GPT-3,DeepMind在GopherCite模型中使用了2800亿个参数的Gopher。此外,奖励模型(RM)提供(学习到的)指导信号,反映了人类对LLM生成文本的偏好,通常以标量值的形式呈现。奖励模型可以采用两种形式:经过微调的LLM或使用人类偏好数据从头开始训练的LLM。现有的工作通常使用参数规模与对齐LLM不同的奖励模型。例如,OpenAI使用了60亿个参数的GPT-3,DeepMind使用了70亿个参数的Gopher作为奖励模型。最后,为了利用奖励模型的信号对预训练LLM进行优化,设计了特定的强化学习算法用于大规模模型调优。具体而言,Proximal Policy Optimization (PPO) 是现有工作中用于对齐的常用强化学习算法。

在这里插入图片描述

RLHF的关键步骤

上图展示了RLHF的整体三步过程,如下所介绍。

  • 监督微调:为了使LLM初始表现出期望的行为,通常需要收集一个包含输入提示(指令)和期望输出的监督数据集,用于对LLM进行微调。这些提示和输出可以由人类标注者针对特定任务编写,同时确保任务的多样性。例如,InstructGPT要求人类标注者撰写提示(例如“列出五个恢复职业热情的想法”)以及几个生成任务的期望输出,例如开放式问答、头脑风暴、聊天和改写。需要注意的是,第一步在特定的设置或场景中是可选的。
  • 奖励模型训练:第二步是使用人类反馈数据训练奖励模型。具体而言,我们使用LLM使用从监督数据集或人类生成的提示中采样的提示生成一定数量的输出文本。然后邀请人类标注者对这些配对进行偏好注释。注释过程可以采用多种形式,常见的方法是通过对生成的候选文本进行排名来进行注释,这可以减少注释者之间的不一致性。然后,训练奖励模型以预测人类偏好的输出。在InstructGPT中,标注者按照模型生成的输出从好到坏进行排名,然后训练RM(即60亿参数的GPT-3)以预测排名
  • 强化学习微调:在这一步中,将对齐(即微调)LLM形式化为强化学习问题。在这种设置下,预训练的LLM充当策略,接受提示作为输入并生成输出文本,其行动空间是词汇表,状态是当前生成的标记序列,奖励由奖励模型提供。为了避免与初始(调优之前)LLM显著偏离,通常在奖励函数中加入惩罚项。例如,InstructGPT使用PPO算法将LLM相对于奖励模型进行优化。对于每个输入提示,InstructGPT计算当前LLM生成结果与初始LLM之间的KL散度作为惩罚项。需要注意的是,第二步和最后一步可以进行多轮迭代,以更好地对齐LLM。

通过以上步骤,RLHF方法能够从人类反馈数据中学习并调整LLM,以更好地满足对齐标准,并使LLM的输出更加符合人类期望和偏好。

5.3 高效微调

在前面的内容中,我们讨论了指导微调和对齐微调的方法,以根据特定目标调整LLM。由于LLM包含大量的模型参数,进行全参数微调的代价较高。在本节中,我们将讨论如何对LLM进行高效微调。首先,我们将简要回顾几种用于Transformer语言模型的代表性高效微调方法,然后总结现有的参数高效微调的LLM研究工作。

5.3.1 参数高效微调方法

在现有文献中,参数高效微调是一个重要的研究课题,旨在减少可训练参数的数量,同时尽可能保持良好的性能。接下来,我们将简要介绍四种Transformer语言模型的参数高效微调方法,包括适配器微调、前缀微调、提示微调和LoRA。

适配器微调(Adapter Tuning)

适配器微调将小型神经网络模块(称为适配器)整合到Transformer模型中。为了实现适配器模块,提出了一种瓶颈架构,首先将原始特征向量压缩到较小的维度(然后进行非线性变换),然后将其恢复到原始维度。适配器模块通常被集成到每个Transformer层中,在两个核心部分(注意力层和前馈层)之后串行插入适配器模块。另外,也可以在Transformer层中使用并行适配器[235],其中两个适配器模块与注意力层和前馈层并行放置。在微调过程中,适配器模块根据特定的任务目标进行优化,而原始语言模型的参数在此过程中被冻结。通过这种方式,我们可以在微调过程中有效地减少可训练参数的数量。

前缀微调(Prefix Tuning)

前缀微调在语言模型的每个Transformer层之前添加一系列前缀,这些前缀是一组可训练的连续向量,可以被视为虚拟的令牌嵌入。为了优化前缀向量,提出了一种重新参数化技巧,通过学习一个将较小矩阵映射到前缀参数矩阵的MLP函数来实现,而不是直接优化前缀。这种技巧被证明对于稳定训练是有用的。优化完成后,映射函数将被丢弃,只保留派生的前缀向量以增强任务特定的性能。由于只有前缀参数会被训练,这可以导致参数高效的模型优化。类似于前缀微调,p-tuning v2专门为自然语言理解而将层级提示向量合并到Transformer架构中,还利用多任务学习共同优化共享的提示。研究表明,这对于改进不同参数规模的模型在自然语言理解任务上的性能是有用的。

提示微调(Prompt Tuning)

与前缀微调不同,提示微调要关注在输入层引入可训练的提示向量。基于离散提示方法,它通过包括一组软提示令牌(以自由形式或前缀形式)来扩充输入文本,然后将扩充后的输入用于解决特定的下游任务。在实现上,任务特定的提示嵌入与输入文本嵌入相结合,随后被输入到语言模型中。P-tuning提出了一种自由形式来结合上下文、提示和目标令牌的方法,适用于自然语言理解和生成的架构。他们还通过双向LSTM学习软提示令牌的表示。另一种代表性方法称为提示微调,直接在输入之前添加前缀提示。在训练过程中,只有提示嵌入会根据特定任务的监督进行学习。然而,由于此方法在输入层只包括少量可训练参数,因此发现性能高度依赖底层语言模型的模型容量。

低秩适应(LoRA)

LoRA [232]在每个密集层上采用低秩约束,以近似适应下游任务的参数更新矩阵,以减少可训练参数的数量。考虑优化参数矩阵W的情况,更新过程可以用一般形式表示为: W ← W + ∆ W W ← W + ∆W WW+W。LoRA的基本思想是在冻结原始矩阵 W ∈ R m × n W ∈ R^{m \times n} WRm×n的同时,通过低秩分解矩阵来近似参数更新 ∆ W ∆W W,即 ∆ W = A ⋅ B ⊤ ∆W = A · B^⊤ W=AB,其中 A ∈ R m × k A ∈ R^{m \times k} ARm×k B ∈ R n × k B ∈ R^{n \times k} BRn×k是用于任务适应的可训练参数, r ≪ m i n ( m , n ) r ≪ min(m, n) rmin(m,n)是降低的秩。LoRA的主要优点是它可以大大节省内存和存储使用(例如,VRAM)。此外,人们可以只保留一个大模型副本,同时保留一些用于适应不同下游任务的特定低秩分解矩阵。此外,还有几项研究讨论了如何更加合理地设置秩,例如基于重要性评分的分配和无搜索的最优秩选择。

除了上述方法,还有大量关于Transformer语言模型的高效微调研究。然而,更全面的高效微调讨论超出了本文的范围,可以在相关的研究论文中找到。

5.3.2 LLM的参数高效微调

随着LLM的兴起,高效微调引起了越来越多的研究关注,以开发一种更轻量级的下游任务适应方法。

特别是LoRA已广泛应用于开源LLM(如LLaMA和BLOOM)的参数高效微调。在这些研究尝试中,LLaMA及其变体在参数高效微调方面受到了广泛关注。例如,Alpaca-LoRA使用LoRA作为Alpaca (一种具有52K人类演示的7B LLaMA模型)的轻量级微调版本进行训练。对于不同的语言或模型大小,进行了广泛的Alpaca-LoRA研究探索,可以在相关页面上找到。此外,LLaMA-Adapter在每个Transformer层中插入可学习的提示向量,其中提出了零初始化注意力来改善训练,以减轻对欠拟合提示向量的影响。此外,他们还将这种方法扩展到多模态设置,例如视觉问答。

此外,一项实证对语言模型上不同微调方法的效果进行了研究。他们在三个开源LLM(GPT-J(6B)、BLOOM(7.1B)和LLaMA(7B))上比较了四种高效微调方法,包括串行适配器微调、并行适配器微调和LoRA。通过在六个数学推理数据集上的实验结果,他们发现这些高效微调方法在困难任务上表现不如参考基线模型GPT-3.5,但在简单任务上达到了可比的性能。总体而言,LoRA在这些比较方法中表现相对较好,同时使用了更少的可训练参数。

作为一个重要资源,PEFT库(代表参数高效微调)已在GitHub上发布。它包括几种广泛使用的高效微调方法,包括LoRA/AdaLoRA、前缀微调、P-Tuning和提示微调。此外,它支持多个语言模型,如GPT-2和LLaMA,还涵盖几种代表性的视觉Transformer模型(如ViT和Swin Transformer)。

猜你喜欢

转载自blog.csdn.net/weixin_42010722/article/details/131682333
今日推荐