《Prompt-Tuning方法》
1 Prompt-Tuning方法入门
1.1 NLP任务四种范式
目前学术界一般将NLP任务的发展分为四个阶段,即NLP四范式:
在整个NLP领域,整个发展历程是朝着精度更高、少监督,甚至无监督的方向发展的。而 Prompt-Tuning是目前学术界向这个方向进军最新也是最火的研究成果。
1.2 Fine-Tuning技术发展介绍
Fine-Tuning属于一种迁移学习方式,在自然语言处理(NLP)中,Fine-Tuning是用于将预训练的语言模型适应于特
定任务或领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。
解决方法:Prompt-Tuning, 通过添加模板的方法来避免引入额外的参数,从而让模型可以在小样本(few-shot)或者零样本(zero-shot)场景下达到理想的效果。
(1) Prompt-Tuning技术
基于Fine-Tuning的方法是让预训练模型去迁就下游任务,而基于Prompt-Tuning的方法可以让下游任务去迁就预训练模型, 其目的是将Fine-tuning的下游任务目标转换为Pre-training的任务。
那么具体如何工作呢?我们接下来将以一个二分类的情感分析为例子,进行简单理:
(2) Prompt-tunning技术发展历程
不同的句子应该有不同的template和label word,因此如何最大化的寻找当前任务更加合适的template和label word是Prompt-tuning非常重要的挑战.
1.3 Prompt-Tuning主要方法
(1) Prompt-Tuning的鼻祖----GPT
GPT-3开创性的提出了In-context Learning的思想. 即无须修改模型即可实现few-shot、zero-shot的learning. 同时引入了Demonstrate Learning, 即让模型知道与标签相似的语义描述,提升推理能力。
(2) PET模型
PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and
Natural Language Inference》(EACL2021),根据论文题目则可以看出,Prompt-Tuning启发于文本分类任务
,并且试图将所有的分类任务转换为与MLM一致的完形填空.
PET模型提出两个很重要的组件(简称PVP):
基于Pattern-Verbalizer-Pair(PVP)组件训练目标:
PET模型人工设计方法缺陷:
1、采用人工构建的方法成本高,需要与领域任务相关的先验知识。
2、人工设计的Pattern和Verbalizer不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大。
3、在预训练阶段MLM任务并非完全按照PVP的模式进行训练的,因此人工构建的Pattern和Verbalizer使得Prompt-Tuning与MLM在语义和分布上依然存在差异。
因此如何能够自动地挑选合适的PVP? 本次课程主要着重介绍构建Pattern的方法:Prompt-Tuning. 接下来我们根据使用场景的不同,分别介绍几种成熟的Prompt-Tuning方法。
(3)Prompt-Oriented Fine-Tunin
Prompt-Oriented Fine-Tuning训练方法的本质是将目标任务转换为适应预训练模型的预训练任务,以适应预训练模型的学习体。
情感分析任务为例:
Prompt-Oriented Fine-Tuning方法中,预训练模型参数是可变的, 本质是Prompt-Tuning+Fine-Tuning的结合体.。该方法在Bert类相对较小的模型上表现较好,但是随着模型越来越大,如果每次针对下游任务,都需要更新预训练模型的参数,资源成本及时间成本都会很高,因此后续陆续提出了不更新预训练模型参数,单纯只针对prompt进行调优的方法。
针对Prompt调优方法的分类:Hard Prompt 和 Soft Prompt
常见下游任务的Prompt设计:
模板类:
(4)Soft Prompt理解
基于Soft Prompt, 不同的任务、数据可以自适应地在语义空间中寻找若干合适的向量,来代表模板中的每一个词,相较于显式的token,这类token称为 伪标记(Pseudo Token) .下面给出基于连续提示的模板定义:
- 假设针对分类任务,给定一个输入句子x,连续提示的模板可以定义为T=[x],[v1],[v2],…,[vn][MASK]:其中[vn]则是伪标记,其仅代表一个抽象的token,并没有实际的含义,本质上是一个向量。
总结来说:Soft Prompt方法, 是将模板变为可训练的参数,不同的样本可以在连续的向量空间中寻找合适的伪标记,同时也增加模型的泛化能力。因此, 连续法需要引入少量的参数并在训练时进行参数更新,但预训练模型参数是不变的,变的是prompt token对应的词向量(Word Embedding)表征及其他引入的少量参数。
接下来,我们将基于Prompt-Tuning讲解三种典型方法。
1.4 基于Prompt-Tuning的三种典型方法
(1)Prompt Tuning方法 (NLG任务)
Prompt Tuning 是2021年谷歌在论文《The Power of Scale for Parameter-Efficient Prompt Tuning》中提出的微调
方法,该方法基于T5模型(最大参数11B)为每一个输入文本假设一个固定前缀提示,该提示由神经网络参数化,并在下游任务微调时进行更新,整个过程中预训练的大模型参数被冻结。
Prompt Tuning方法的特点
- 优点
1、大模型的微调新范式.
2、模型参数规模大了之后,可以将大模型参数固定,指定附加参数来适配下游任务,而且适配性能基本和全参数微调相当。 - 缺点
1、在小样本学习场景上表现不太行。2、收敛速度比较慢。3、调参比较复杂。
(2) P-Tuning V1方法(NLU任务)
P-Tuning 是2022年清华在论文《GPT Understands, Too》中提出的微调方法,P-Tuning V1方法的提出主要是为了解决这样一个问题:大模型的 Prompt 构造方式严重影响下游任务的效果。
解决方法: P-Tuning 提出将 Prompt 转换为可以学习的 Embedding 层,只是考虑到直接对Embedding 参数进行优化。
P-Tuning V1 直接对 Embedding 参数进行优化会存在两个挑战:
- Discretenes(不连续性): 对输入正常语料的 Embedding 层已经经过预训练,而如果直接对输入的 prompt embedding进行随机初始化训练,容易陷入局部最优。
- Association(关联性分析):没法捕捉到 prompt embedding 之间的相关关系。
P-Tuning与Prompt-Tuning的区别: - Prompt Tuning 是将额外的 embedding 加在开头,看起来更像是模仿Instruction 指令。
- 而 P-Tuning 的位置则不固定。
(3)P-Tuning V2
P-Tuning V2是升级版本,主要解决P-Tuning V1 在小参数量模型上表现差的问题。详细信息可参考《[P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》。
P-Tuning v2 方法的核心思想:在模型的每一层都应用连续的 prompts, 并对 prompts 参数进行更新优化. 同时, 该方法也是针对 NLU 任务优化和适配的。
2 Prompt-Tuning方法进阶
2.1 超大规模参数模型Prompt-Tuning方法
近两年来,随着Prompt-Tuning技术的发展,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning. 如GPT-3模型, 只需要设计合适的模板或指令即可以实现免参数训练的零样本学习。
根本原因:模型参数量足够大,训练过程中使用了 足够多的语料,同时设计的 预训练任务足够有效。
面向超大规模的模型的Prompt-Tuning方法:
1、上下文学习 In-Context Learning:直接挑选少量的训练样本作为该任务的提示。
2、指令学习 Instruction Tuning:构建任务指令集,促使模型根据任务指令做出反馈。
3、思维链 Chain-of Thought:给予或激发模型具有推理和解释的信息,通过线性链式的模式指导模型生成合理的结果。
2.2 上下文学习方法的应用
In-Context learning(ICL)最早在GPT3中提出, 旨在从训练集中挑选少量的标注样本,设计任务相关的指令形成提示模板,用于指导测试样本生成相应的结果:
- zero-shot learning:给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试。
- one-shot learning:给出任务的描述, 在进行新数据预测前, 插入一个样本做指导,相当于给一个例子让模型理解,然后再提供测试数据对其进行预测。
- few-shot learning:给出任务的描述, 在进行新数据预测前, 插入N个样本做指导. 相当于给N个例子让模型理解, 然后再提供测试数据对其进行预测。
2.3 指令学习方法的应用
Instruction-Tuning: 其实Prompt-Tuning本质上是对下游任务的指令,简单的来说:就是告诉模型需要做什么任务,输出
什么内容. 上文我们提及到的离散或连续的模板,本质上就是一种对任务的提示。因此, 在对大规模模型进行微调时, 可以为各种类型的任务定义指令, 并进行训练,来提高模型对不同任务的泛化能力。
Prompt VS Instruction:
Prompt为第一种模式,Instruction为第二种. 很明显:做判别比做生成更容易。
(1)Instruction-Tuning和Prompt-Tuning的核心一样,就是去发掘语言模型本身具备的知识。
Instruct-Tuning的形式(以电影评论二分类举例):
(2)如何实现Instruction-Tuning?
(3)指令学习和提示学习的不同点:
- Prompt是去激发语言模型的补全能力,比如给出上半句生成下半句、或者做完形填空。
- Instruction-Tuning则是激发语言模型的理解能力,通过给出更明显的指令/指示,让模型去理解并做出正确的action。
- Promp-Tuningt在没有精调的模型上也能有一定效果,但是Instruct Tuning则必须对模型精调, 让模型知道这种指令模式。
2.4 思维链方法的实现
思维链 (Chain-of-thought,CoT) 的概念是在 Google 的论文 “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” 中被首次提出。
- 思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理。
- 思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习(即通过x1,y1,x2,y2,…xtest作为输入来让大模型补全输出ytest),思维链多了中间的推导提示。
求解一个数学题为例, 理解cof思想:
(1)Chain-of-Thought分类:
1、Few-shot CoT:ICL 的一种特殊情况,它通过融合CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT, output〉。
2、Zero-shot CoT:直接生成推理步骤,然后使用生成的CoT 来导出答案.(其中 LLM 首先由“Let’s think step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式)
(2)Chain-of-Thought特点:
- 逻辑性:思维链中的每个思考步骤都应该是有逻辑关系的,它们应该相互连接,从而形成一个完整的思考过程。
- 全面性:思维链应该尽可能地全面和细致地考虑问题,以确保不会忽略任何可能的因素和影响。
- 可行性:思维链中的每个思考步骤都应该是可行的,也就是说,它们应该可以被实际操作和实施。
- 可验证性:思维链中的每个思考步骤都应该是可以验证的,也就是说,它们应该可以通过实际的数据和事实来验证其正确性和有效性。
2.5 PEFT大模型参数高效微调方法原理
PEFT(Parameter-Efficient Fine-Tuning)参数高效微调方法是目前大模型在工业界应用的主流方式之一,PEFT 方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的 PEFT 技术也能实现了与全量微调相当的性能。
PEFT的优势: 该方法可以使 PLM 高效适应各种下游应用任务,而无需微调预训练模型的所有参数,且让大模型在消费级硬件上进行全量微调(Full Fine-Tuning)变得可行。
(1)PEFT分类:
1、Prefix/Prompt-Tuning: 在模型的输入或隐层添加k个额外可训练的前缀 伪tokens,只训练这些前缀参数。
2、Adapter-Tuning: 将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数。
3、LoRA: 通过学习小参数的低秩矩阵来近似模型权重矩阵 W 的参数更新,训练时只优化低秩矩阵参数。
2.5.1 Prefix Tuning 方法
2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法,该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定。
(1)Prefix-Tuning任务形式:
(2)Prefix-Tuning特点:
对比之前的微调方式:
2.5.2 Adapter Tuning
2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对BERT 的 PEFT微调方式,拉开了 PEFT 研究的序幕。
不同于Prefix Tuning这类在输入前添加可训练 prompt参数,以少量参数适配下游任务,Adapter Tuning 则是在预训练模型内部的网络层之间添加新的网络层或模块来适配下游任务. 当模型训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调。
(1)Adapter Tuning 模型结构:
2.5.3 LoRA
低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换,也就是:通过一个较低维度的表示来近似表示一个高维矩阵或数据集.
LoRA的产生:上述Adapter Tuning 方法在 PLM 基础上添加适配器层会引入额外的计算,带来推理延迟问题;而 Prefix
Tuning 方法难以优化,其性能随可训练参数规模非单调变化,更根本的是,为前缀保留部分序列长度必然会减少用于处理下游任务的序列长度. 因此微软推出了LoRA方法。
(1)LoRA 原理:
(2)LoRA 伪代码实现: