大模型微调介绍-Prompt-Tuning
提示微调入门
NLP四范式
第一范式
基于「传统机器学习模型」的范式,如TF-IDF特征+朴素贝叶斯等机器算法.
第二范式
基于「深度学习模型」的范式,如word2vec特征+LSTM等深度学习算法,相比于第一范式,模型准确有所提高,特征工程的工作也有所减少.
第三范式
基于「预训练模型+fine-tuning」的范式,如Bert+fine-tuning的NLP任务,相比于第二范式,模型准确度显著提高,模型也随之变得更大,但小数据集就可训练出好模型
第四范式
基于「预训练模型+Prompt+预测」的范式,如Bert+Prompt的范式相比于第三范式,模型训练所需的训练数据显著减少
回顾Fine-Tuning
Fine-Tuning属于一种迁移学习方式,在自然语言处理(NLP)中,Fine-Tuning是用于将预训练的语言模型适应于特定任务或领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它.
缺点
下游任务的目标和预训练的目标差距过大.可能导致过拟合.
微调过程中需要依赖大量的监督语料等等
解决办法
Prompt-Tuning, 通过添加模板的方法来避免引入额外的参数,从而让模型可以在小样本(few-shot)或者零样本(zero-shot)场景下达到理想的效果.
Prompt-Tuning介绍
原理
基于Fine-Tuning的方法是让预训练模型去迁就下游任务,而基于Prompt-Tuning的方法可以让下游任务去迁就预训练模型, 其目的是将Fine-tuning的下游任务目标转换为Pre-training的任务.
举例说明
定一个句子:[CLS] I like the Disney films very much. [SEP]
传统的Fine-tuning方法: 将其通过BERT模型获得 [CLS] 表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练.
Prompt-Tuning执行步骤
构建模板 (Template): 生成与给定句子相关的一个含有[MASK]标记的模板. 例如It was [MASK], 并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]. 将其喂入BERT模型中,并复用预训练好的MLM分类器,即可直接得到[MASK]预测的各个token的概率分布.
标签词映射 (Verbalizer): 因为[MASK]只对部分词感兴趣,因此需要建立一个映射关系(词典). 例如:正样本:{‘positive’:['great','good'...]}, 如果[MASK]预测的词是“great”, 'good'...,则认为是positive类,负样本词典:{‘negative’:['terrible','bad'...]}如果是'terrible','bad'...,则认为是negative类.
训练: 根据Verbalizer: 则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题
Prompt-Tuning方法
GPT3
GPT-3开创性的提出了In-context Learning的思想. 即无须修改模型即可实现few-shot、zero-shot的learning. 同时引入了Demonstrate Learning, 即让模型知道与标签相似的语义描述,提升推理能力.
存在问题:
•建立在超大规模的预训练语言模型上.模型参数数量通常超过100亿,在真实场景中很难应用.
•该方法应用于参数规模小的模型,效果会下降很多,因此后续提出Prompt-Tuning.
•GPT3中提供的prompt过于简单, 泛化性能低.
PET模型
组成部分PVP
Pattern(Template): 记作T, 即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern, 由于不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一.
Verbalizer: 记作V, 即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word).例如情感分析中,我们期望Verbalizer可能是 (positive和negative是类标签). 同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern, 因此如何构建Verbalizer是另一个研究挑战.
训练目标
目前基于PVP框架, 最需要关注的问题是如何选择或构建合适的Pattern和Verbalizer . 一种简单的方法是根据特定任务的性质和先验知识人工设计模板. 注意:在同样的数据集和训练条件下. 选择不同的Pattern和Verbalizer会产生差异很大的结果.
存在问题
-
采用人工构建的方法成本高,需要与领域任务相关的先验知识
-
人工设计的Pattern和Verbalizer不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大.
-
在预训练阶段MLM任务并非完全按照PVP的模式进行训练的,因此人工构建的Pattern和Verbalizer使得Prompt-Tuning与MLM在语义和分布上依然存在差异.
Prompt-Oriented Fine-Tuning
Prompt-Oriented Fine-Tuning训练方法的本质是将目标任务转换为适应预训练模型的预训练任务,以适应预训练模型的学习体系.
Hard Prompt
离散提示: 是一种固定的提示模板,通过将特定的关键词或短语(真实的文本字符串)直接嵌入到文本中,引导模型生成符合要求的文本.
特点: 提示模板是固定的,不能根据不同的任务和需求进行调整.
缺陷:依赖人工,改变prompt中的单个单词会给实验结果带来巨大的差异.
Soft Prompt
以bert为例子:固定encoder层的参数,微调Prompt的词向量表示(伪标记)部分
连续提示:是指通过给模型输入一个可参数化的提示模板,从而引导模型生成符合特定要求的文本.
特点: 提示模板中的参数可以根据具体任务和需求进行调整,以达到最佳的生成效果.
优点:不需要显式地指定这些模板中各个token具体是什么,而只需要在语义空间中表示一个向量即可.
★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
介绍原理
Prompt Tuning 是2021年谷歌在论文《The Power of Scale for Parameter-Efficient Prompt Tuning》中提出的微调方法,该方法基于T5模型(最大参数11B)为每一个输入文本假设一个固定前缀提示,该提示由神经网络参数化,并在下游任务微调时进行更新,整个过程中预训练的大模型参数被冻结.
步骤
-
给定 n个tokens, 记作x1, ...,xn, 通过一个预训练模型对应的embedding table,可以将n个token表示为一个向量矩阵(Xe->Rn*e).
-
将连续模板中的每个伪标记vi视为参数,可以通过另一个embedding table获得p个伪token标记为向量矩阵(Pe->Rp*e).
-
将文本和Prompt拼接获得新的输入[Pe:Xe]->R(p+n)*e.
-
新的输入喂入一个MLP获得新的表征. 注意,只有prompt对应的向量表征参数(Pe->Rp*e) 会随着训练进行更新.
优点
•大模型的微调新范式.
•模型参数规模大了之后,可以将大模型参数固定,指定附加参数来适配下游任务,而且适配性能基本和全参数微调相当.
缺点
•在小样本学习场景上表现不太行.
•收敛速度比较慢.
•调参比较复杂.
★P-Tuning V1
原理
P-Tuning 是2022年清华在论文《GPT Understands, Too》中提出的微调方法,P-Tuning V1方法的提出主要是为了解决这样一个问题:大模型的 Prompt 构造方式严重影响下游任务的效果.
P-Tuning 提出将 Prompt 转换为可以学习的 Embedding 层,只是考虑到直接对 Embedding 参数进行优化.
步骤
P-tuning 固定 LLM 参数, 利用多层感知机 (MLP)和 LSTM 对 Prompt 进行编码,编码之后与其他向量进行拼接之后正常输入 LLM. 注意,训练之后只保留 Prompt 编码之后的向量即可,无需保留编码器.
对比Prompt-Tuning
Prompt Tuning 是将额外的 embedding 加在开头,看起来更像是模仿 Instruction 指令;而 P-Tuning 的位置则不固定.
Prompt Tuning 加入 MLP 来参数初始化;而 P-Tuning 通过 LSTM+MLP 来初始化.
P-Tuning V2
P-Tuning v2 方法的核心思想:在模型的每一层都应用连续的 prompts, 并对 prompts 参数进行更新优化. 同时, 该方法也是针对 NLU 任务优化和适配的.
提示微调进阶
超大规模参数模型微调
介绍
Ø近两年来,随着Prompt-Tuning技术的发展,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning. 如GPT-3模型, 只需要设计合适的模板或指令即可以实现免参数训练的零样本学习.
Ø根本原因:模型参数量足够大,训练过程中使用了 足够多的语料,同时设计的 预训练任务足够有效.
大模型微调方法
-
上下文学习 In-Context Learning: 直接挑选少量的样本作为该任务的提示.
-
指令学习 Instruction-Tuning:构建任务指令集,促使模型根据任务指令做出反馈
-
思维链 Chain-of-Thought:给予或激发模型具有推理和解释的信息,通过线性链式的模式指导模型生成合理的结果.
上下文学习方法
指令学习方法
Instruction-Tuning和Prompt-Tuning的核心一样,就是去发掘语言模型本身具备的知识.
在对电影评论进行二分类的时候,最简单的提示模板(Prompt)是“. It was [mask].”,但是其并没有突出该任务的具体特性,我们可以为其设计一个能够突出该任务特性的模板(加上Instruction),例如“The movie review is . It was [mask].”,然后根据mask位置的输出结果通过Verbalizer映射到具体的标签上。这一类具备任务特性的模板可以称之为指令Instruction.
指令学习和提示学习的不同点:
-
Prompt是去激发语言模型的补全能力,比如给出上半句生成下半句、或者做完形填空
-
Instruction-Tuning则是激发语言模型的理解能力,通过给出更明显的指令/指示,让模型去理解并做出正确的action.
-
Promp-Tuningt在没有精调的模型上也能有一定效果,但是Instruct-Tuning则必须对模型精调, 让模型知道这种指令模式.
思维链接方法CoT
简单理解就是怎加了中间的推理过程
思维链(CoT,chain-of-thought)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理.
举例说明
Prompt:
可以看到模型无法做出正确的回答。但如果说,我们给模型一些关于解题的思路,就像我们数学考试,都会把解题过程写出来再最终得出答案,不然无法得分.
CoT Prompt:
可以看到,类似的算术题,思维链提示会在给出答案之前,还会自动给出推理步骤:
“罗杰先有5个球,2盒3个网球等于6个,5 + 6 = 11”
“食堂原来有23个苹果,用了20个,23-20=3;又买了6个苹果,3+6=9.
CoT分类
Few-shot CoT
ICL 的一种特殊情况,它通过融合 CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT, output〉
Zero-shot CoT
直接生成推理步骤,然后使用生成的 CoT 来导出答案.(其中 LLM 首先由 “Let's think step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式)
CoT特点
☆PEFT大模型微调原理
介绍
PEFT(Parameter-Efficient Fine-Tuning)参数高效微调方法是目前大模型在工业界应用的主流方式之一,PEFT 方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的 PEFT 技术也能实现了与全量微调相当的性能.
优势
该方法可以使 PLM 高效适应各种下游应用任务,而无需微调预训练模型的所有参数,且让大模型在消费级硬件上进行全量微调(Full Fine-Tuning)变得可行.
PEFT分类
Prefix/Prompt-Tuning
在模型的输入或隐层添加k个额外可训练的前缀 伪tokens,只训练这些前缀参数
Adapter-Tuning
将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数.
LoRA
通过学习小参数的低秩矩阵来近似模型权重矩阵 W 的参数更新,训练时只优化低秩矩阵参数.
Prefix-Tuning
2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法,该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix(任务指令),然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定.
总结
1.什么是Prefix Tuning?
答案:该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定..
Prefix-Tuning和P-Tuing的区别?
答案:1.Prefix-Tuning 是将额外的embedding加在开头,而P-Tuning 位置不固定;2.Prefix-Tuning 通过在每个层都添加可训练参数,通过MLP初始化,而P-Tuning只在输入的时候加入embedding, 并通过LSTM+MLP初始化.
Adapter
首先是一个 down-project 层(Linear)将高维度特征映射到低维特征.
然后过一个非线形层之后,再用一个 up-project (Linear)结构将低维特征映射回原来的高维特征
同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为identity(类似残差结构)
LoRA★
秩:最大线性无关组
低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换,也就是:通过一个较低维度的表示来近似表示一个高维矩阵或数据集.
原理
LoRA技术冻结预训练模型的权重,并在每个Transformer块中注入可训练层(称为秩分解矩阵),即在模型的Linear层(注意力中QKV)的旁边增加一个“旁支”A和B。其中,A将数据从d维降到r维,这个r是LoRA的秩,是一个重要的超参数;B将数据从r维升到d维,B部分的参数初始为0。模型训练结束后,需要将A+B部分的参数与原大模型的参数合并在一起使用