当前位置:   article > 正文

大语言模型(LLMs)综述调研_大语言模型数据预处理

大语言模型数据预处理

大语言模型

why ?->当模型参数超过一定规模时,大模型不仅取得了显著性能提升,并表现出了一些小规模语言模型不具备的特殊能力(emergent abilities

LLM->显著规模的PLM

LLM的四个阶段:预训练、调优、使用、评估

  • pre-training: how to pre-train a capable LLM
  • adaptation tuning: how to effectively adapt pre-trained LLMs for better use
  • utilization: how to use LLMs for solving various downstream tasks
  • capacity evalution: how to evaluate the abilities of LLMs and existing empirical findings

区别于小型PLMs,访问LLM的主要方式是通过prompting interface(e.g. API)

LLMs的发展限制:

  • 关于仅出现在LLMs中的emergent abilities 缺乏解释性
  • capable LLMs很难培养。LLMs需要巨大的计算需求,带来了昂贵的成本
  • LLMs业内培训细节并未公开(如数据收集、数据清洗等)
  • LLMs alignment具有挑战性

(本文内容来源于论文A Survey of Large Language Models 部分内容阅读笔记,如有阅读不理解之处可参照原论文arxiv地址

Database

现有LLMs主要利用多种公众文本数据集混合作为预训练语料
数据源比例

现有LLMs预训练数据中各种数据源的比例

现有预训练语料数据集大致可分为两种类型:通用数据与专业数据

  • 通用数据:网页、书籍、会话文本(优势:庞大、多样、易获取,增强模型泛化能力)
    • 网页文本:质量参差不齐,既包含优质文本,又包含无意义的低质量文本,故对网页进行过滤和处理对提高数据质量至关重要
    • 会话文本:用于增强LLMs的会话能力。但是当把对话数据过度整合到语言模型中时陈述性指令或直接的疑问句错误地识别成对话的开始,从而导致指令有效性下降
    • 书籍:提供正式的长文本来源,帮助模型学习语言知识、建模长期依赖关系,生成叙事性和连贯长文本
  • 专业数据:多语言数据、科学数据、代码等(优势:赋予LLMs解决特定性专业任务的能力)
    • 小语种文本:增强模型在翻译、多语种摘要和多语种问答方面的能力
    • 科学文本:增强模型对科学知识的理解能力。目前科学技术数据的主要来源一般是arxiv论文、科学教材、教学网页等。(预处理:由于科学领域中数据的复杂性(数学符号、蛋白质序列等),需要通过特定标记与预处理来把这些数据进行格式转换)
    • 代码:数据来源一般有两种,一是编程社区(如Stack Exchange),二是来自Github等公共软件库。代码是一种具备远程依赖关系与精确执行逻辑的文本,所以也有研究推测在代码上进行训练可能是模型复杂推理能力的来源,也有研究表明将推理任务格式化为代码可以帮助LLMs生成更准确的结果

数据预处理

数据预处理

大语言模型数据预处理pipeline

一般包括去噪、降低冗余、去除不相关内容、删除潜在有害数据

  • 数据集过滤:一般有基于分类器的方法和基于启发式的方法来进行数据过滤。
    • 分类器的方法一般是基于一个高质量文本来训练一个选择分类器,从而利用它来识别低质量数据并进行剔除。坏处是这种方法可能会造成一些方言、口语等高质量文本被删除,造成语料偏见,并降低语料多样性
    • 启发式的方法一般是通过一组精细设置的规则来消除低质量文本。这种规则一般大致可分类为基于语种的过滤、基于指标的过滤(生成文本的评价指标,如困惑度)、基于统计特征的过滤(比如标点符号分布、符号词比、句子长度等)和基于关键词的过滤(如html标签、超链接、攻击性词语等)
  • 数据集去重:重复数据会导致在建模过程中引入重复模式,降低语言模型多样性,也可能使训练过程变得不稳定。去重手段的区分主要是不同细粒度,包括句子级别、文档级别和数据集级别的去重
    • 文档层面一般是依赖文档间的表面特征重叠率来进行去重
    • 数据集层面的去重主要是为了避免数据集污染问题,一般是通过从训练集中移除可能的重复文本来防止训练集与验证集的重合。
  • 隐私修正:因为大部分预训练文本来自网络,包括用户生成的涉及敏感或个人信息的内容,可能会增加隐私泄露的风险,故需要剔除个人身份信息
    • 基于规则的方法来检测与修正:一般是关键词检测,用于移除姓名、地址、电话号码等
    • 去重:有研究表明LLMs在隐私攻击中的脆弱性主要可归因于预训练语料中存在的重复PII(personally identifiable information)数据
  • tokenization:主要的分词方法有BPE tokenization、WordPiece tokenization、Unigram tokenization。虽然使用现有的分词器较为方便,但如果能专门地针对预训练语料来设置分词器能达到更好的效果。目前LLMs多使用SentencePiece库来专门为预训练语料训练定制专门的tokenizer,这个库包括BPE tokenization 和Unigram tokenization。不过定制化tokenizer也是有副作用的,如一个专门针对英文文本训练的tokenizer在处理别的语种时会表现较差
    • BPE tokenization(Byte-Pair Encoding tokenization): 它从一组基本符号(例如,字母表和边界字符)开始,迭代地将语料库中连续两个tokens的频繁对组合为新的token(称为合并)。对于每一次合并,选择标准是基于两个相邻的tokens的共现频率:顶端的频繁对将被选择。合并过程一直持续到它达到预定义的大小。通过将字节作为合并的基本符号,字节级BPE被用于提高多语种语料库(如包含非ASCII字符的文本)的标记化质量。采用这种标记化方法的代表性语言模型包括GPT - 2、BART和LLaMA
    • WordPiece tokenization: WordPiece通过迭代合并连续的tokens,与BPE有着非常相似的思想,但对合并采取了略有不同的选择标准。为了进行合并,它首先训练一个语言模型并使用它对所有可能的对进行评分。然后,在每次合并时,它选择导致训练数据的可能性增加最多的一对。由于Google尚未发布WordPiece算法的官方实现,HuggedFace在其在线NLP课程中给出了一个更为直观的选择衡量标准:基于训练语料,通过将共现次数除以词对中两个标记出现次数的乘积来对词对进行评分。
    • Unigram tokenization: 与BPE和WordPiece不同,单元词特征标记化从语料库中足够大的一组可能的子串或子标记开始,迭代地移除当前词汇表中的tokens,直到达到预期的词汇量。作为选择准则,它通过假设从当前词汇中删除一些tokens来提升训练语料的似然概率。该步骤基于训练好的单元词特征语言模型进行。为了估计单元词特征语言模型,它采用了期望最大化( EM )算法:在每次迭代中,我们首先在旧语言模型的基础上找到当前最优的词标记化,然后重新估计单元词特征的概率来更新语言模型。在这个过程中使用Viterbi算法在给定语言模型的基础上找到最优的单词分解方法

预训练语料的质量与分布对LLM的性能影响

  • 混合数据源:LLMs的预训练数据来自不同领域不同场景,基于这样的数据进行预训练能扩大LLMs的知识范围,增强模型的泛化能力。在进行数据混合时,需尽量包含高质量数据源,并仔细设置预训练数据的分布。如果来自某个领域的数据过多,可能会影响LLMs在其他领域的泛化能力
  • 预训练数据规模:随着LLM中参数规模的不断增大,也需要更多的数据来训练模型,在数据规模中也有类似的缩放规律。
  • 预训练数据质量:低质量、冗余、有害的语料会降低模型的表现能力

Architecture

architecture

三种主流架构的比较
其中蓝色、绿色、黄色和灰色圆角矩形分别表示前缀标记之间的注意力、前缀与目标标记之间的注意力、目标标记之间的注意力和掩蔽注意力

encoder-decoder

vanilla transformer:

  • encoder由多头自注意力层堆叠而成,用于对输入编码生成latent representation
  • decoder由交叉注意力层组成,用于处理latent representation并自动生成目标序列

decoder-only:一般包括causal decoder与prefix decoder,但是一般说起decoder-only模型时,一般指的是causal decoder

  • causal decoder

    使用单向注意力掩码,输入的每个token只能关注过去的token和本身。输入和输出tokens通过decoder以相同的方式进行处理。

  • prefix decoder

    对causal decoder的掩码机制进行修改,使其能对前置tokens使用双向注意力,并对生成的tokens使用单项注意力。在实际训练中可先训练causal decoder,再把它转换成prefix decoder来加速收敛。

Transformer的归一化、位置嵌入、激活函数、注意力偏置

下表展示了这几项配置的种类及其对应的计算方式

tr设置

综合上表得到的结论是:在训练LLMs时建议选择Pre RMSNorm进行归一化、选择SwiGLU或GeGLU作为激活函数。此外,LN在嵌入层后可能不会立即使用,这很可能导致性能下降。对于位置嵌入,RoPE或ALiBi更好,因为它们在长序列上表现更佳。

预训练任务

一般有语言建模和去噪自编码两种任务

语言建模(Language Modeling):一般是only-decoder最常用的目标。对于一个给定的tokens序列x = {x_1,x_2,…,x_n},LM任务旨在根据之前的token(x_<i)自回归预测目标token x_i。一般训练目标是最大化以下似然概率:

L L M ( x ) = ∑ i = 1 n l o g P ( x i ∣ x < i ) L_{LM}(x) = \sum ^n _{i=1}logP(x_i|x_{<i}) LLM(x)=i=1nlogP(xix<i)
去噪自编码(denoising autoencoding task, DAE):DAE任务的输入x \ ~x 是随机替换跨度的损坏文本。然后,训练语言模型来恢复替换的token ~x。DAE的训练目标表示如下

L D A E ( x ) = l o g P ( x ~ ∣ x x ~ ) L_{DAE}(x)=logP(\tilde{x}|x_{ \tilde{x}}) LDAE(x)=logP(x~xx~)
由于DAE在执行上比LM更为复杂,所以并没有被广泛应用于LLMs的训练

混合去噪器(Mixture-of-Denoisers, MoD):也被称为UL2 loss,它被引入作为预训练语言模型的统一目标。MoD把LM与DAE都视作不同类型的去噪任务,其中S-denoiser->LM, R-denoiser->DAE, short span and low corruption, X-denoiser->DAE,long span or high corruption

对于这三种去噪器,S-denoiser与LM目标类似,R-denoiser 和X-denoiser与DAE类似,只不过二者在文本的跨度长度和损坏文本的比例上有细微不同。对于使用不同的特殊token([R]、[S]、[X])开始的输入语句将使用相对应的去噪器对模型进行优化

总结

架构选择

  • 使用LM目标进行预训练时,casual decoder架构可以实现出色的零样本和少样本泛化能力,并表现出优于其他架构的零样本性能。此外,指令调整和对齐调整已经被证明可以进一步增强大型casual decoder模型的能力。

  • 根据scaling law,选择更大模型与更大的数据集能获得更好的表现能力

  • LLMs支持长文本上下文建模,主要原因可归结于以下两点

    • Extrapolation capability: LLM编码较长文本的能力。一些位置嵌入方法(如RoPE、T5 bias)已经被验证具有一定的Extrapolation capability。具体来说,配备ALiBi的语言模型已经被证明能在序列上保持相对稳定的困惑度,甚至比用于训练的语言模型长10倍。也有学者通过改进旋转矩阵的设计来增强RoPE的外推能力(xPos)
    • efficiency:主要指一些为了降低二次计算成本的高效注意力方法。除去常见的几种高效注意力,FlashAttention从系统级的角度(GPU内存和IO效率)提高注意力效率。其他还有一些利用非transformer的新架构来进行语言建模,例如参数化的状态空间模型

模型训练

优化器设置

  • Batch Training: 对于目前LLMs的训练,Batch size一般会设计成一个较大的值(比如2048 examples或者是4M个tokens)以提高训练稳定性和模型吞吐量。在GPT-3和PaLM中引入了在训练过程中动态增加batch size大小的策略,最终达到百万规模,这种策略能使得训练过程更加稳定
  • Learning Rate:现有的LLMs通常采用与预训练中的warm-up和衰减策略类似的学习速率调度。具体来说,在初始的0.1 %到0.5 %的训练步中,采用线性的warm-up逐步增加学习速率,使其达到最大值,其范围大约为5 × 10-5到1 × 10 - 4(例如GPT - 3为6 × 10 - 5)。然后,在后续步骤中采用余弦衰减策略,将学习率逐渐降低到其最大值的10 %左右,直到训练损失收敛。
  • Opimizer:Adam优化器和Adam W优化器被广泛用于训练LLMs (例如GPT3),它们基于低阶矩的自适应估计进行一阶梯度优化。通常,其超参数设定如下:β1 = 0.9,β2 = 0.95和ε = 10 - 8。同时,Adafactor优化器也被用于训练LLMs (如PaLM和T5),它是Adam优化器的一个变体,专门为在训练过程中保存GPU内存而设计。Adafactor优化器的超参数设置为:β1 = 0.9,β2 = 1.0-k-0.8,其中k表示训练步数。
  • stable training:为了防止在训练过程中遇到模型崩溃的问题,一般会使用权重衰减梯度裁剪的方法。现有的研究通常将梯度裁剪的阈值设置为1.0,权重衰减率设置为0.1。然而,随着LLMs的缩放,训练损失尖峰也更容易出现,导致训练不稳定。为了缓解这个问题,PaLM和OPT 使用了一种简单的策略,即在尖峰出现之前从较早的检查点重新启动训练过程,并跳过可能导致问题的数据。另外,GLM 发现嵌入层的异常梯度通常会导致锋电位,并提出收缩嵌入层梯度来缓解锋电位。

训练技巧:

两个主要问题:提高训练吞吐量&将大模型加载到GPU内存中

  • 3D Parallelism:三维并行主要由三种训练策略组成,分别是数据并行、pipeline并行、和张量并行

    • data parallelism: 数据并行是增加训练吞吐量的方法之一。数据并行是把model paramenters 和optimizer states跨多个GPU进行复制,然后再把整个训练语料分发到这些GPU中,每个GPU只处理分配给自己数据并获得梯度,然后再进一步聚合获得整个批次的梯度用于更新所有GPU中的模型

    • Pipeline parallelism: pipeline并行主要是把LLM的不同层分布到多个GPU中,对于transformer来说,pipeline并行是把连续的层加载到同一个GPU中来降低GPU之间传输计算隐藏状态或梯度的成本。由于每个GPU都需要等待上一个GPU来完成计算,pipeline并行化可能会导致GPU利用率降低,从而导致不必要的bubbles overhead。为了减少pipeline并行中的这些气泡,有方法提出了多批次数据填充和异步梯度更新技术来提高流水线效率

      bubbles overhead:在计算机科学和工程领域,“bubbles overhead"指的是资源(GPU、CPU或内存)的浪费,因为系统中存在不必要的空闲,故降低了系统的效率。

    • tensor parallelism: 区别于pipeline并行,张量并行侧重于分解LLM中的张量(参数矩阵)。对于LLM中的矩阵乘法运算Y = XA,参数矩阵A可以按列拆分为A1和A2两个子矩阵,可以表示为Y = [ XA1、XA2]。通过将矩阵A1和A2放置在不同的GPU上,矩阵乘法运算将在两个GPU上并行调用,最后通过跨GPU通信将两个GPU的输出进行合并得到最终结果。

  • ZeRO:ZeRO主要是针对数据并行中的内存冗余问题。在模型训练过程中,并不是所有数据都需要保存在每个GPU上(比如某个时刻只需要调用某一小部分数据),故导致了内存冗余。ZeRO技术的目标是在每个GPU上只保留一小部分数据,而其余的数据可以在需要时从其他GPU中检索。

    具体而言,ZeRO提供了3种解决方案,这取决于数据的3个部分是如何存储的,即优化器状态划分、梯度划分和参数划分。实验结果表明,前两种方案并没有增加通信开销,第三种方案增加了约50 %的通信开销,但节省了与GPU数量成正比的内存。PyTorch实现了与ZeRO类似的技术,称为FSDP

  • mixed precision trainning:在以往的PLMs中,FP32(32位浮点数)主要用于预训练。为了降低大模型训练的开销,会使用FP16来进行训练,且NVIDIA GPUs的FP16计算单元数量是FP32的两倍,故计算效率会进一步提高。但是单使用FP16会造成一定的精度损失从而影响模型性能,为了缓解这种情况,一种叫做brain floating point( BF16 )的替代品被用于训练,它比FP16分配更多的指数位和更少的有效位,在预训练阶段,BF16在表示精度上总体表现优于FP16。

在实际的应用中,通常联合使用上述训练技术来进行训练,例如,研究人员将8路数据并行、4路张量并行和12路流水线并行结合起来,实现了在384个A100 GPU上训练BLOOM。目前,Deep Speed、Colossal - AI、Alpa等开源库可以很好地支持这3种并行训练方法。此外也可以利用BF16混合精度训练来提高效率。

由于训练大型模型是一个时间密集型的过程,因此在早期阶段预测模型性能和发现异常问题是非常有用的。为此,GPT-4最近引入了一种建立在深度学习堆栈上的可预测缩放的新机制,实现了用更小的模型预测大模型的性能,这对于开发LLMs可能非常有用。在实践上,可以进一步利用主流深度学习框架的支撑训练技术。例如,PyTorch支持数据并行训练算法FSDP (fully sharded data parallel),该算法允许在需要时将训练计算部分卸载到CPU。

adaptation tuning

为了使得LLMs能针对具体目标获得更优的能力,一般有两种调优方式,分别是指令调优(instructoin tuning)和对齐调优(alignment tuning)

  • instruction tuning:增强LLMs的能力

    从本质上说,指令微调是以自然语言的形式在格式化实例集合(collection of formatted instances)上对预训练的LLM进行微调的方法,与有监督的微调和多任务提示训练高度相关。

    为了进行指令调优,我们首先需要收集或构造指令格式化的实例。然后,我们使用这些格式化的实例以监督学习的方式(例如,使用序列到序列的损失进行训练)对LLM进行微调。经过指导语调优后,LLMs即使在多语言环境下也能表现出泛化到看不见的任务的卓越能力。

    • 格式化实例构建

      • 构成:一个指令格式的实例由任务描述(称为指令)、可选输入、对应输出和少量演示(可选)组成

      • 任务数据集的格式化:在提出指导语调优之前,一些早期的研究从不同范围的任务(如文本摘要、文本分类和翻译等)中收集实例,以创建有监督的多任务训练数据集。它们是指令调优实例的主要来源,用自然语言任务描述来格式化这些多任务训练数据集是很方便的

        众包平台:PromptSource 用于有效地创建、共享和验证不同数据集的任务描述以更好地生成用于指令调优的标注实例

      • 日常聊天数据格式化:增强模型的指令多样性&匹配真实人类多样性。InstructGPT把真实用户提交给OpenAI API的查询用做任务描述来激发LLM的指令跟随能力。具体来说,为了丰富任务的多样性,人类标注者被要求编写真实任务的指导语,包括开放式生成、开放式问答、头脑风暴和聊天等。然后,他们让另一组标注者直接回答这些指令作为输出。最后,将一条指令(即收集到的用户查询)和期望输出(即人类书写的答案)配对作为训练实例。另外,GPT-4也设计了潜在高风险指令,并通过针对安全问题的有监督微调来引导模型拒绝这些指令

      • 合成数据格式化:该方法主要是为了减少人工标注或降低人工收集的负担而提出的半自动化构建方法。主要是将已有的实例输入LLMs来合成多样化的任务描述和实例。Self - Instruct方法只需要100个左右的实例作为初始任务池,然后再从池中随机选择几个实例作为示范,并提示LLM生成新的指令和相应的输入输出对。经过质量和多样性过滤后,新生成的实例将被添加到任务池中。因此,该合成方法是生成大规模LLM指令数据的一种有效且经济的方法

      • 实例构建的关键要素

        • 指令定量:缩减任务数量能在很大程度上增强LLMs的泛化能力。有研究表明随着任务数量的增加,模型性能最初呈现持续增长的模式,当达到一定量时,增益变得微乎其微,而且在某些任务上实例数量剧增可能会带来过拟合
        • 格式化设计:在数据集的输入输出对中添加任务描述和可选演示。任务描述是LLMs理解任务中最关键的部分,同时适当数量的指令示例作为示范能为模型带来实质性的改进
    • 指令微调策略:指令微调可以看作一个有监督的训练过程,相较预训练来说,指令微调的训练目标和优化配置都是不一样的。另外,在指令微调中需要特别关注以下两个问题:

      • 平衡数据分布:由于指令微调涉及不同任务的混合,因此在微调过程中平衡不同任务的比例非常重要。

        • 样例比例混合策略(examples-proportional mixing stratege):合并所有的数据集并从混合数据集中均匀地采样每个样例。

          根据最近的研究结果,增加优质实例集合(例如FLAN 和P3 )的抽样比例通常可以带来性能的提高。此外,在指令调优过程中,通常会设置一个最大上限来控制数据集所能包含的最大样例数,以防止更大的数据集压倒整个分布。在实际应用中,通常根据不同的数据集,将最大上限设置为几千或几万

      • 指令调优与预训练结合:

        • 把预训练数据看作正则化加入指令调优过程。
        • 不使用两阶段,而是把预训练数据与指令调优数据混合使用多任务学习从头开始训练。

    指令调优在不同规模的模型上都体现了普适性,基本都能带来性能提升。此外,指令调优大大增强了大模型的任务泛化能力,在跨语言任务中也表现良好。指令调优还能增强模型在某特定领域的专业能力(如金融、医学、法律等)。

    实验:

    下表展示了基于LLaMA ( 7B )模型在聊天和QA设置下的指令调整实验结果(均为单话轮会话)。在Self - Instruct - 52K数据集上采用了4种指令改进策略,即增强复杂度( w /复杂度)、增加多样性( w /多样性)、平衡难度( w /难度)和缩放指令数量( w /缩放)

    LLaMA - 7B是一种流行的LLM主干,已被广泛用于指令调优

    Chat:

    AlpacaFarm: 一个评价集,用于对聊天设置进行评价

    w->win rate: 来自两个比较模型的响应哪个更适合用户查询

    QA: 基于MMLU和BBH3k两个基准通过启发式规则来解析来自LLM答案的准确性

    MMLU:

    BBH3k: Yu-Lan Chat 发布的BBH基准的一个子集

    结论:

    • Task-formatted 指令相较Chat更适合QA

    • 多种指令混合使用对于提高LLMs的综合能力很有帮助

    • 增加指令的复杂性和多样性会造成模型性能提升

    • 单纯增加指令数量或对指令难度进行均衡不一定能带来比较好的性能提升

      作者关于指令调优的建议:

      为了对LLMs进行指令调优,可以根据上表中关于所需GPU数量和调优时间的基本统计信息来准备计算资源。在搭建好开发环境后,我们推荐初学者遵循Alpaca Reposita的代码进行指令调优。随后,我们应该选择基本模型并构建本节中讨论的指令数据集。当用于训练的计算资源受到限制时,用户可以利用LoRA进行参数高效的调优。在推理方面,用户可以进一步使用量化方法在更少或更小的GPU上部署LLM

      instruction tuning suggestions

  • alignment tuning:将LLMs与人类价值观或偏好对齐

1、alignment training

对齐训练的核心思想是通过引入对齐信息来指导模型的学习过程,主要是在模型训练过程中对输入和输出之间的对应关系进行建模,以便能更好地捕捉输入与输出之间的关联

human alignment被引入使得LLMs的行为符合人类的预期(减少虚假有害信息、符合人类偏好)

alignment tax:alignment可能会在一定程度上损害LLMs的一般能力

三种代表性的人工对齐指标:

  • helpful:引导LLMs尽可能以简洁高效的方式来帮助用户解决任务或回答问题
  • honest:引导LLMs向用户提供准确的内容而非编造信息,另外LLMs需要学会在输出中传达适当程度的不确定性,以避免欺骗或误导,这需要模型知道自身的能力与知识水平
  • harmless:规范LLMs产生的语言不具备攻击性或歧视性,在最佳的情况下模型能够检测出一些以恶意回答为目的的隐蔽提问(避免被诱导回答危险信息)

Human Feedback的选取:

目前还是主要依赖人工标注来生成反馈数据,所以如何选取human labelers至关重要。

现在一般来说为了获取高质量的feedback会要求人工标注者需要具备合适的教育水平与英语数量程度。同时需要尽量保证人工标注者和研究者之间意图的一致性。(目前一致性的保证主要是通过研究者先对少量数据进行标注,再衡量自己的标注与其他人工标注者之间的一致性来对人工标注者进行筛选。或者是研究者选择一批"super raters"(一批具有良好性能的人工标注者)来为其他人工标注人员提供说明与指导)

Human Feedback的收集:

  • 基于排序的方法:引入Elo评分系统通过比较候选输出得到偏好排序
  • 基于问题的方法:human labelers通过回答研究人员设计的某些问题来提供更加详细的反馈(对齐标准、附加约束)
  • 基于规则的方法:在选择标注者最好的响应的基础上使用一系列规则来测试模型生成的响应是否符合对齐标准。(Sparrow)

RLHF(Reinforcement learning from human feedback, 基于人类反馈的强化学习)在LLMs中的应用

定义:RLHF使用强化学习(RL)算法通过学习一个奖励模型来使得LLMs适应人类的反馈

  • RLHF System = a pre-trained LM to be aligned + a reward model learning from human feedback + RL training the LM
    • 预训练LM:一般是由一个已有的预训练LM参数初始化的生成模型
    • 奖励模型(RM):提供了反映人类对LM生成的文本偏好的(学习到的)指导信号,通常以标量值的形式出现。RM一般有两种形式:微调的LM或使用人类偏好数据从头训练的LM。目前的工作通常采用与对齐LM不同参数规模的模型来用作奖励模型
    • RL算法:近似策略优化(PPO)是目前工作中最为广泛使用的对齐RL算法
  • RLHF的关键步骤:
    • 有监督微调:通过监督数据集(包含输入与期望输出)对LM进行微调
    • RM的训练:使用LM采样提示作为输入生成一定量输出,再依赖人工标注者对这些配对的偏好进行标注,基于此训练RM预测符合人类偏好的输出
    • RL微调:把alignment LM看作RL问题。预训练的LM充当策略,作为输入提示符并返回输出文本,其动作空间为词汇表,状态为当前生成的token序列,奖励由RM提供。为了避免显著偏离初始(调优前) LM,惩罚项通常被纳入到奖赏函数中。

RLHF

参数高效微调办法(Parameter-Efficient Fine-Tuning,PEFT):

  • Adapter Tuning:指将小型神经网络(adapter)纳入transformer模型。通常是在一个transformer层的两个核心部分(注意力层和前馈层)之后的串行插入,也可以在transformer层中使用并行adapter,将其与注意力层与前馈层并行放置。在微调过程中原始语言模型中的参数会被冻结,只adapter的参数根据目标进行迭代优化
  • Prefix Tuning:前缀调优是指在语言模型的每个Transformer层上预先加载一系列的前缀,这些前缀是一组可训练的连续向量。这些前缀向量是任务特定的,可以被认为是虚拟token嵌入。在调优时也只有这个prefix得到更新和优化
  • Prompt Tuning:在输入层融入可训练提示向量。主要基于离散提示方法通过增加一组软提示tokens(自由形式或前缀形式存在)对输入文本进行增强,基于增强的输入来解决特定的下游任务。实现上特定任务的提示嵌入与输入文本嵌入结合,随后输入到语言模型中
  • Low-Rank Adaptation(LoRA):LoRA通过在每个dense layer上施加低秩约束来逼近更新矩阵,从而减少可训练参数以适应下游任务。

参数微调

四种参数调优方法(其中MSA和FFN分别表示transformer中的多头注意力和前馈神经网络)

有实证研究表明,LoRA在所有的调优方法中表现相对较好,使用的可训练参数明显较少

LoRA:对于一个优化参数矩阵W,它的更新过程可以表示为W<–W+ΔW,LoRA的基本思想是将原始矩阵W∈Rmxn冻结,同时用低秩分解矩阵近似参数更新ΔW,,即∆W = A · B⊤,其中A∈Rm × k和B∈Rn × k为任务自适应的可训练参数,k⋅min( m , n)为降秩。LoRA的主要优点是可以在很大程度上节省内存和存储使用量(VRAM)。此外,为了适应不同的下游任务,只能保持单个大的模型拷贝,同时保持多个特定任务的低秩分解矩阵。

在LLMs的训练中,应该对transformer中的哪些权重矩阵应用LoRA->适配更多的权重矩阵比适配具有较大秩的单一类型矩阵更可取(适配{Wq, Wv}比只适配Wq更有竞争力)

LoRA的最佳秩->LoRA在一个很小的r下已有很好表现了,增加秩并不一定能够覆盖一个更有意义的子空间,所以一个低秩的适配矩阵就足够

矩阵的秩&低秩近似

矩阵的秩:矩阵中线性无关的列(列秩)或行(行秩)的数量

低秩近似:用秩小于原始矩阵M的矩阵M *来表示M信息的过程。为了达到降低M *秩的效果,可以尝试将矩阵进行分解,即M = LRT ≈ LkRTk ≈M *。这样的变换能使得一个通常由m×n表示的矩阵可以由k(m+n)个值表示。当矩阵M中包含可以忽略的信息时,低秩近似通常有用。

构造低秩近似矩阵的方法最常用的为奇异值分解

将矩阵M进行奇异值分解,有M = USVT = (US)VT = LRT,其中L=(US), R=V

不局限于矩阵的精确分解,使用Uk、Sk、Vk分别替换上述方程中的U、S、V(只使用分解矩阵的前k列,k<r):M ≈ UkSkVkT ≈M *

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/809123
推荐阅读
相关标签
  

闽ICP备14008679号