网上大模型微调的资料非常多,但大多数材料只涉及如何调用成熟的依赖包,没有讲清楚为什么这样干以及微调的由来。下来我将通过尽量通俗的易懂的话,阐述大模型微调的由来,带你系统性入门大模型微调。
首先要明白在ChatGPT出来之前,GPT
这套技术方案并不是行业主流。各大公司都在使用Google提出的BERT
作为预训练模型。
那么GPT
和BERT
有什么区别呢?
GPT的训练目标是做词语接龙。其在预训练阶段的目标很简单:根据上文序列预测下一个词(token)。具体示意图如下所示。
BERT的训练目标是做完形填空。BERT在预训练阶段使用了两个任务:遮挡语言模型(MLM)和下一句预测(NSP)。MLM任务通过在输入文本中随机遮挡一些词汇,将遮挡的词汇重置为[MASK]
,并预测[MASK]
,帮助模型学会理解双向上下文。NSP任务则让模型学会判断两个句子是否是连续的。
GPT、BERT预训练完成后,还需适配下游任务。比如我想将BERT预训练模型用于垃圾广告分类,需在输入[CLS]token,对应输出位置1处,额外配置一个Classifer网络用于分类。具体示意图如下所示。
图2
如果你对BERT不了解,可以看下面这个链接。
https://jalammar.github.io/illustrated-bert/
从上面的区别可以看出,BERT适用于各种自然语言理解(NLU)任务,如情感分析、命名实体识别、问答等。它通常作为一个特征提取器来为下游任务提供表示。而GPT由于其“词语接龙”的特性,更擅长文本生成。
在OpenAI尚未大力出奇迹的时候,行业内的通识均是“特征提取+下游任务适配”,并不相信GPT大量“词语接龙”会产生“智能涌现”。
具体大模型微调思维导图如下所示。
1.全参数微调
顾名思义,大模型所有参数都要参加微调。看图2这个例子。如果需要全参数微调,BERT+Classifer中所有参数均参加反向传播。因为全参数微调更新力度大,计算成本高,且效果未必有保障,所以固定大部分预训练参数,只微调少数参数的部分微调是目前更为热门的选择。
2.部分微调
2.1 传统微调
如图2所示,更新Classifer中的参数即可。当然图2只是举一个分类的例子,传统微调在NLU任务中应用不仅仅包含分类任务,还有文本匹配、实体识别、摘要生成等。均可通过“预训练模型+下游任务适配器”这种模式,预训练模型参数不动,更新适配器中的参数来完成对下游任务迁移。GPT2早期也是“预训练模型+下游任务适配器”这种模式。
但是这种微调方式,存在一个很严重的问题:小样本场景过拟合。因此引入了Prompt-Tuning。
2.2 Prompt-Tuning(广义上的)
大家都了解提示工程,一个好的提示工程模板,能够最大限度激发大模型的潜力。
而Prompt的目的是将下游任务目标转换为预训练的任务。
如何理解这句话呢?
我们依然以二分类的垃圾邮件分类作为例子,描述Prompt-tuning的工作原理。给定一个句子[CLS] I like the Disney films verymuch.[SEP]
传统的Fine-tuning方法是将其通过BERT的Transfomer获得[CLS]表征之后再引入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练。
而Prompt-Tuning则执行如下步骤:
1.构建模板(Template construction)
通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板。例如 It was [MASK].
,并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS]I like the Disney films verymuch.[SEP]It was [MASK].[SEP]
。将其喂入BERT模型中,并复用预训练好的MLM分类器,即可直接得到[MASK]预测的各个token的概率分布;
2.标签词映射(Label Word Verbalizer)
因为[MASK]部分我们只对部分词感兴趣,因此需要建立一个映射关系。例如如果[MASK]预测的词是“great”,则认为是positive类;如果是“terrible”,则认为是negative类。
因此在prompt-tuning中,如何构建模板(pattern)以及如何构建标签词映射(Verbalizer)是研究的热点,也衍生出许多研究方向。
2.2.1与pattern相关的方法:
2.2.1.1 手动构造pattern
现在大模型许多提示工程模板设计,均是利用手动构造pattern。比如,我想要求大模型写一篇小说,我会生成一个让大模型角色扮演小说家的模板。例如 我想让你扮演一个小说家。您将想出富有创意且引人入胜的故事,可以长期吸引读者。
,并拼接到原始的文本中,获得大模型输入:我想让你扮演一个小说家。您将想出富有创意且引人入胜的故事,可以长期吸引读者。主题为:一个历史学家穿越到秦朝的故事
。将其喂入大模型中。
不过需要注意的是,目前大模型参数数量通常超过100亿。在Language Models are Few-Shot Learners这篇论文系统论证了,扩展大语言模型参数可以大大提高与任务无关的少样本性能,有时甚至可以与之前最先进的微调方法相媲美。
因此现在大模型很多情况下都是手动构造pattern就能取得很好的效果。但是之前模型参数量比较小的时候,prompt直接用效果会下降,因此还需要考虑微调。
prompt-tuning可以分为三大块分别为启发式构造pattern、自动生成pattern和伪标记法构造pattern。重点为伪标记法构造pattern,其中涉及Prompt-Tuning、P-tuning、prefix tuning、P-Tuning v2。
2.2.1.2 启发式构造pattern
启发式法一般是采用规则、正则化模板的方法自动构建出相应的Pattern,或者直接通过启发式搜索的方法获得Pattern。这一类方法在程序设计时只需要编写规则和少量的模板即可快速的获得Pattern。
比如PTR(PTR: Prompt Tuning with Rules for Text Classification),在分类任务中,可以实现定义很多个子模板,然后根据句子中的任务,向模板中填充相关实体。
个人比较感兴趣的是AutoPrompt,具体原理如下图所示。人为构造prompt满足了人类自然语言的需求,但是从机器运算的角度来看,是否一定是最优解呢?答案是否定的。所以AutoPrompt采用一种一阶近似的方法来自动构建prompt,也就是设计一种算法自动填充下图中的[T](假设词表大小为V,[T]的个数为N个,我也可以排列组合种方式挨个计算在下游任务上的准确率,不过这样做太耗时了,论文中采用了一阶近似的方法,来降低搜索耗时),从而构建出template。
2.2.1.3 自动生成pattern
手动构造pattern和启发式构造pattern虽然设计了规则,引入了一阶近似梯度下降。但本质上还是所有输入共用一个模板(这个模板高度依赖于人类的先验知识,比如AutoPrompt中[T]数量设定),并没有根据输入的实际情况,从多个模板中做选择。
所以这个时候有人思考,是否能够让模型自动生成多个templates,并从中挑选最优templte。
所以有了[LM-BFF],论文地址:Making Pre-trained Language Models Better Few-shot Learners
它的主要思想为:将输入与prompt拼接输入T5,预测X和Y,形成多个templates。最后遍历templates,寻找能在下游任务中表现最好的template。
2.2.1.4 伪标记法构造pattern
手动构建、启发式构建、自动生成三大类构造pattern的方法被称为离散模板构建法(Hard prompt),通常情况下,离散法不需要引入任何参数。
伪标记法也被称为连续模板构建法(Soft Prompt),连续法需要引入少量的参数并让模型在训练时进行参数更新。
为了更好的介绍伪标记法,我们将模型的输入标准化成三部分:输入的句子,任务提示词部分, 以及 mask 部分,处输出的 token 记作。如果是分类任务,我们期待是类别的名称。如果是 knowledge probing,我们期待输出相关的知识。我们用 表示标准答案。有了和,就可以计算loss值了。
最开始会设计成人类语义上可理解的模板,不过渐渐地研究人员发现不一定要设计成人类可理解,比如AutoPrompt在情感分类任务中,自动搜索生成的为atmosphere alot dialogue Clone totally
,中文意思为:气氛很多对话完全克隆,完成不属于人类可理解语言范畴。
大家都知道,输入的句子,任务提示词部分,都需经过tokenizer形成embedding向量。假设输入的句子,经过tokenize,生成;输入的任务提示词,经过tokenize,生成。既然提示词可以不属于人类可理解范畴,那么我能否能够无需完成 -> ,只需将设定为可学习的参数,它可以不代表词表中任意一个token,只需是一个伪标记即可。最后按照梯度下降的模式,更新。这就是伪标记法构造pattern的核心思想。
所以按照伪标记的思路,形成了Prompt-Tuning、P-tuning、prefix tuning、P-Tuning v2等方法。
Prompt-Tuning是最原始的方法,中每个伪标记均是独立的,没有时序关系的。
P-Tuning算prompt tuning的一种改动。其区别在于,是可训练的,但中每个伪标记不是单独训练,而是借助一个prompt encoder间接的训练,是希望能学到伪标记之间的关系。另一个区别在于prompt可以插入输入的任何位置。
相比较Prompt-Tuning和P-Tuning仅在输入层引入伪标记(soft prompt),prefix tuning、P-Tuning v2在所有层引入soft prompt。
具体细节大家可以看原论文。去年chatglm6B刚出来的时候,P-Tuning等伪标记法都是大模型主流微调方法。
2.2.2与verb相关的方法:
除了Template以外,Verbalizer是直接关系到预测的结果是什么,不同的Verbalizer会对最终预测效果产生较大的影响,不同的任务会有不同的合适的label word。例如在电影评论任务中,positive类别的label word比比较合适的是wonderful,而在美食点评任务中,positive比较合适的是testy。因此label word的选择也是PromptTuning中关键的部分。
传统的方法是人工设计(Manual Design),即可以根据对每个任务的经验来人工指定这些label word。但是人工设计需要依赖大量的人力,且对于一些具有专业性的任务还需要依赖于专家,使得Prompt-Tuning的效率很低。为了缓解这个问题,一些工作开始研究如何根据不同的任务自动地选择合适的label word。受到Template的离散和连续两种类型优化的启示,Verbalizer也可以分为离散和连续两种类型。本文分别介绍两个具有代表性的工作:
- 离散
KPT:Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classification
- 连续
ProtoVerb:Prototypical Verbalizer for Prompt-based Few-shot Tuning
3.低秩矩阵
网上有许多关于Lora的文章,我挑选几篇写得比较好的文章:
从梯度的视角分析LoRA
https://kexue.fm/archives/9590/comment-page-1
LoRA介绍
https://zhuanlan.zhihu.com/p/646831196
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)
👉4.大模型落地应用案例PPT👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)
👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓