LLM中的微调演变

这篇具有很好参考价值的文章主要介绍了LLM中的微调演变。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微调演变

首先是任务驱动了微调的发展,GPT1和BERT遵循经典的预训练+微调范式,到GPT3时期,预训练任务表现为句子接龙,给定前文持续预测下一个word,当模型参数规模和训练数据增大后,GPT3面对few shot甚至是zero shot任务的表现都超越了原本的SOTA方法。

下面是几个关于zero shot,few shot,经典微调的例子(以机器翻译问题为例):
LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

  • 右侧是经典微调示例,预训练的模型通过特定任务数据集进行微调训练,其中会涉及梯度更新(gradient update),训练至收敛后的模型才具备良好的翻译能力。左侧是GPT3在零样本(只给出任务描述,task description),单样本(给出任务描述+一个样本),少样本(任务描述+少量样本)的情况下的工作流程。

不管是零样本,还是少样本,都没有要求更新参数,这也引发了In context learning的研究。

零样本或少样本任务看似美好,但却受task description和prompt有很大影响,因此,FLAN(Finetuned Language Models Are Zero-Shot Learners)重新利用微调,弱化task description和prompt的影响,发挥作用的就是指令微调(Instruction Fine-Tuning,IFT)。IFT数据由三个主要组成部分组成:指令、输入和输出,对于给定的指令(指令可以由人工编写),可以有多个输入和输出实例:
LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

相比于GPT-3和经典finetune范式,FLAN的核心思想是:

  • 当面对给定的任务A时,首先将模型在大量的其他不同类型的任务比如B、C、D上进行微调,微调的方式是将任务的指令与输入输出进行拼接(可以理解为一种新的prompt),有监督指令微调(Supervised Instruction Fine-Tuning,SIFT)后,给出任务A的指令和输入,直接进行推断。

这样做可以实现:当模型根据"指令"完成了微调阶段的各种任务后(将指令拼接在微调数据的前面),在面对从未见过的自然语言推理任务的指令比如"这段话能从假设中推导出来吗"时,就能更好地调动出已有的知识回答问题,其相当于通过指令微调之后,模型可以更好的做之前训练时没见过的新任务且降低了对prompt的敏感度(不需要再设计特定prompt也能激发模型更好地回答自然语言问题)。

为了让LLM具备更强的推理能力,在prompt learning的发展中出现了思维链(Chain-of-thought,CoT)。这是一种新的prompt机制,其本质是给模型看到推理步骤的prompt,让其模仿推理,从而求解简单的问题。
LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

  • 左边为标准的1-shot prompt,右边为加入CoT的1-shot prompt。注意,CoT和IFT并不冲突,CoT是在数据层面增加额外的句子,IFT则是在任务层面加上指令。

此后,CoT技术被应用到0-shot和few-shot任务中,并且在21年引出了"let’s think step by step"的新闻:
LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

InstructGPT的训练

LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

  • 其中,labeler为人工,即human。SFT,RM,PPO都是GPT3模型,但因为不同的训练方式,使其参数不同。

InstructGPT的训练包括3个阶段:

step 1,利用人类的问答对数据对GPT3进行有监督训练得到SFT模型,OpenAI设计了一个prompt dataset,里面有大量的提示样本,prompt为各种各样的问题描述,然后,找了一个团队对这个prompt dataset进行标注(本质就是人工回答问题,给每个prompt一个答案)。最终得到大小为13k的数据集,其中都是"问题-答案pair",用这个数据集有监督微调GPT3,得到SFT模型,其大小为175B。

step 2,用上一阶段的SFT模型初始化新的GPT3,叫做RM模型,继续从prompt dataset中采样prompt,注意这里是不需要step 1中的label的,具体做法上不止prompt dataset,还会扩展一些新的问题,只要问题即可。然后由SFT生成多个答案,比如4个。至于如何得到多个答案,原因在于模型每次预测一个词都有对应的概率,根据不同的概率大小可以采样出很多答案,比如通过beam search保留4个当前最优的答案(beam search相当于贪心算法的加强版,除了最好的答案外,还会保留多个比较好的答案供选择)。

接着人工(即labeler)对这4个回答的好坏进行排序(得到新的标注),排序的结果用来训练奖励模型RM,目的是学习排序结果从而理解人类的偏好。训练RM是有监督的,扩充问题并包括排序标注后的数据集大小为33k。

step 3,利用SFT模型初始化GPT3得到名称为PPO的模型,并新建一个大小为31k的只有问题的数据集,此时用PPO模型对每个问题生成4个答案,然后用RM模型进行排序(这里注意,排序结果对应一个得分,令ABCD为4个答案,比如D=C=A=B的得分是最高的,大于D>C>A>B,这个得分被称为奖励)。

通过不断更大化奖励从而优化生成策略(生成策略也就是PPO模型,生成策略更好,代表模型的回答会更好,得到的多个答案都符合人类偏好),策略优化的过程中使用PPO算法限制策略更新范围。根据优化后的策略再次生成→RM再评估→模型再优化后再生成,如此循环,直到策略最优为止。


PPO策略的目的是确保优化后的策略与优化前的策略差距不会太大,也就是让优化前后的回答差异不会太偏离,不至于step 3训练发散。

综上,step 1是SFT(有监督微调),step 2和step 3被称为RLHF,即具有人类反馈的强化学习。


上面的策略可以让GPT在单轮对话上具有出色的表现,对于多轮对话,则存在某一轮对话中的词指向上一轮对话中的某个人或物的可能,简单的解决方案是:

  • 在回答用户问题的过程中,每段对话都是一个序列,把之前的对话内容(需要对历史对话数据的规模做个限制,比如限制在8k大小,比如GPT4可以处理的上下文大小最高可达32k)都保存下来,和当前的输入一起作为新的输入给模型;得益于Transformer的自注意力机制,使得模型能够理解不同对话历史之间的依赖关系,并在生成回答时考虑到之前的对话历史,此外,模型还使用位置编码来区分每个对话历史的位置,确保模型可以正确地捕捉到对话历史的顺序信息。

参考:https://blog.csdn.net/v_JULY_v/article/details/128579457

LLM的架构分类

主流的预训练LLM框架主要有三种:

  • autoregressive自回归模型,也称为decoder-only:代表为GPT,LLaMA和PaLM,预训练任务通常是Next word prediction,这种方式又被称为Causal language modeling。对于decoder,它在训练时是无法看到全文的。通常用于生成式任务,在长文本生成方面取得了巨大的成功,比如自然语言生成(NLG)领域的任务:摘要、翻译或问答。当扩展到十亿级别参数时,表现出了零样本学习能力。缺点是单向注意力机制,在NLU(自然语言理解)任务中,无法完全捕捉上下文的依赖关系。
  • autoencoding自编码模型,也称为encoder-only:代表为BERT,预训练任务通常是破坏一个句子,然后让模型去预测或填补。即通过某个降噪目标(比如MLM)训练双向文本编码器。编码器会产出适用于NLU任务的上下文表示,但无法直接用于文本生成。这类模型擅长进行文本表示,适用于做文本的分类、实体识别、关键信息抽取等任务。
  • Seq2seq模型,也称为encoder-decoder:代表作T5。编码器采用双向注意力机制,解码器则单向注意力,通常用于条件生成任务,比如文本摘要、机器翻译等。

这三种预训练框架各有利弊,没有一种框架在以下三种领域的表现最佳:自然语言理解(NLU)、无条件生成以及条件生成。T5曾经尝试统一上述框架,然而自编码和自回归的目标天然存在差异,需要大量参数才能实现一定性能。因此出现了GLM(General Language Model)。

GLM基于autoregressive blank infilling,按照自编码的思想,从输入文本中随机剔除连续跨度的tokens,并按照自回归预训练的思想训练模型顺序重建spans。虽然这种autoregressive blank infilling思想已在T5中用于文本到文本的预训练,但GLM提出了两种改进,即spans shuffling和2D位置编码

在GLM中,将输入[x1, x2, x3, x4 ,x5, x6]分成了2个部分:

  • Part A:[x1, x2, M, x4, M] ,和Bert的mask输入一样。只是mask可能是一个token,也可能是一个span(持续片段);
  • Part B:[x5, x6, x3],注意,Part A中的mask答案被打乱顺序,并不一定是x3,x5,x6这样按原顺序来的。每个句子采用了随机打乱的策略,然后选择了一种组合;

LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

  • a:原始输入序列。b:采样出两个spans [x3] 和 [x5, x6],将Part A中采样的spans用[M]替换,并打乱Part B中的spans。c:GLM自回归生成Part B。每个spans以[S]作为输入,并附加[E]作为输出。2D位置编码表示spans间和spans内的位置。d:自注意力mask,灰色区域被mask了。Part A的tokens可以关注自己,但Part B的tokens不能关注自己,Part B的tokens只能关注Part A的tokens和Part B前面的tokens。

GLM的下游微调:

  • 1.分类任务,表述为空白生成任务,给一个labeled example ( x , y ) (x, y) (x,y),通过包含单个mask token的模式将输入文本 x x x 转换为完形填空题 c ( x ) c(x) c(x)。该模式是用自然语言编写的,用于表示任务的语义。例如,情感分类任务可以公式化为“{SENTENCE}. It’s really [MASK]”
    候选标签 y ∈ Y y∈Y yY映射到完形填空的答案,称为动词化符 v ( y ) v(y) v(y)。在情感分类中,标签“positive”和“negative”被映射到单词“good”和“bad”。给定 x x x预测得到 y y y的概率为: p ( y ∣ x ) = p ( v ( y ) ∣ c ( x ) ) ∑ y ′ ∈ Y p ( v ( y ′ ) ∣ c ( x ) ) p(y|x)=\frac{p(v(y)|c(x))}{\sum_{y'\in Y}p(v(y')|c(x))} p(yx)=yYp(v(y)c(x))p(v(y)c(x))其中 Y Y Y是标签集。因此,句子为正或负的概率与预测空白处的“good”或“bad”成正比。然后,用交叉熵损失来微调GLM(见下图)。
    LLM中的微调演变,生成式AI,人工智能,语言模型,gpt

  • 2.生成任务,只需要将mask添加到输入的句子Part A的结尾即可,然后利用自回归方式生成Part B的token。可以看到GLM具备生成能力,其实可以处理零样本任务。

GLM与T5相比,T5属于Encoder-Decoder架构,实际上,Encoder和Decoder分别算是两个Transformer,即T5分别使用两个transformer实现单向和双向注意力。GLM也使用两个transformer学习单向和双向的注意力,但通过共享参数使其比Encoder-Decoder更有效。T5在编码和解码阶段使用不同的位置编码,GLM的2D位置编码更合理。


GLM恢复空白即让模型学习了理解能力,也学习了生成能力,对于随机打乱spans,则是为了在预训练时考虑Part B中各spans之间相互影响关系,即捕捉spans之间的相互依赖性。文章来源地址https://www.toymoban.com/news/detail-626673.html


到了这里,关于LLM中的微调演变的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包