扳布的AI摘要
HunYuan-turbos

在说明什么是Prompt Tuning之前,先简单了解下NLP任务四范式

NLP任务四种范式

第一范式

基于「传统机器学习模型」的范式,如TF-IDF特征+朴素贝叶斯等机器算法

第二范式

基于「深度学习模型」的范式,如word2vec特征+LSTM等深度学习算法,相比于第一范式,模型准确有所提高,特征工程的工作也有所减少

第三范式

基于「预训练模型+fine-tuning」的范式,如Bert+fine-tuning的NLP任务,相比于第二范式,模型准确度显著提高,模型也随之变得更大,但小数据集就可训练出好模型

第四范式

基于「预训练模型+Prompt+预测」的范式,如Bert+Prompt的范式相比于第三范式,模型训练所需的训练数据显著减少

在整个NLP领域,整个发展历史都是朝着精度更高、少监督甚至无监督的方向发展,而 Prompt-Tuning 是目前学术界向这个方向进军最新也是最火的研究成果

Fine-Tuning

简单回顾下Fine-Tuning

Fine-Tuning属于一种迁移学习方式,在自然语言处理(NLP)中,Fine-Tuning是用于将预训练的语言模型适应于特定任务或领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它

这种方式的痛点在于:

  • 下游任务的目标和预训练的目标差距过大,可能导致过拟合
  • 微调过程需要依赖大量监督语料
  • 大语言模型参数量都极大,完全微调 Full 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]只对部分词感兴趣,因此需要建立一个映射关系. 例如如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类
  • 训练:根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题

挑战

不同的任务应该有不同的template和label word,因此如何最大化的寻找当前任务更加合适的template和labelword是Prompt-tuning非常重要的挑战

Prompt-Tuning发展历程

鼻祖 —— GPT3

GPT-3开创性的提出了In-context Learning的思想. 即无需修改模型即可实现few-shot、zero-shot的learning. 同时引入了Demonstrate Learning, 即让模型知道与标签相似的语义描述,提升推理能力

这种方法存在一些问题:

  • 其建立在超大规模预训练语言模型上,模型参数量通常超过10B,在真实场景中很难应用
  • 该方法应用于参数规模小的模型时,效果会下降很多,因此后续提出Prompt-Tuning
  • GPT3中提供的prompt过于简单,泛化性能低

因此,PET模型问世

PET模型

PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021),根据论文题目则可以看出,Prompt-Tuning启发于文本分类任务,并且试图将所有的分类任务转换为与MLM一致的完形填空.

PET模型设计了两个很重要的组件 → Pattern、Verbalizer 简称PVP(Pattern-Verbalizer-Pair)

  • Pattern(Template): 记作T, 即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern, 由于不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一
  • Verbalizer: 记作V, 即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word).例如情感分析中,我们期望Verbalizer可能是 (positive和negative是类标签). 同样,不同的任务有其相应的labelword,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern, 因此如何构建Verbalizer是另一个研究挑战

目前基于PVP框架, 最需要关注的问题是如何选择或构建合适的Pattern和Verbalizer . 一种简单的方法是根据特定任务的性质和先验知识人工设计模板. 注意:在同样的数据集和训练条件下. 选择不同的Pattern和Verbalizer会产生差异很大的结果

总结人工设计方法的缺陷:

  • 采用人工构建的方法成本高,需要与领域任务相关的先验知识
  • 人工设计的Pattern和Verbalizer不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大
  • 在预训练阶段MLM任务并非完全按照PVP的模式进行训练的,因此人工构建的Pattern和Verbalizer使得Prompt-Tuning与MLM在语义和分布上依然存在差异

Prompt-Oriented Fine-Tuning

面向Prompt的Fine Tuning,该训练方法的本质是将目标任务转换为适应预训练模型的预训练任务,以适应预训练模型的学习体系

以情感分析为例:

Fine-Tuning流程:将训练文本经过Bert编码后,生成向量表征,再利用

该向量表征,连接全连接层,实现最终的情感类别识别,这种方式存在一

个显式的弊端:预训练任务与下游任务存在gap

基本流程: 构建prompt文本:It was[MASK].,将prompt文本与输入text

文本text = The film isattractive.拼接生成: It was[MASK].The film is attractive.,

输入至预训练模型中,训练任务目标和MLM任务的目标一致,即识别被[MASK]掉的词

Prompt-Oriented Fine-Tuning方法中,预训练模型参数是可变的, 本质是Prompt-Tuning+Fine-Tuning的结合体.

该方法在Bert类相对较小的模型上表现较好,但是随着模型越来越大,如果每次针对下游任务,都需要更新预训练模型的参数,资源成本及时间成本都会很高,因此后续陆续提出了不更新预训练模型参数,单纯只针对prompt进行调优的方法

针对Prompt调优方法的分类:Hard PromptSoft Prompt

常见下游任务Prompt设计:

模板类别:

离散提示: 是一种固定的提示模板,通过将特定的关键词或短语(真实的文本字符串)

直接嵌入到文本中,引导模型生成符合要求的文本.

特点: 提示模板是固定的,不能根据不同的任务和需求进行调整.

缺陷:依赖人工,改变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(NLG任务)

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) 会随着训练进行更新

Prompt Tuning方法特点

  • 优点
    • 大模型的微调新范式
    • 模型参数规模大了之后,可以将大模型参数固定,指定附加参数来适配下游任务,而且适配性能基本和全参数微调相当
  • 缺点
    • 在小样本学习场景上表现不太行
    • 收敛速度比较慢
    • 调参比较复杂

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 之间的相关关系
  • 用 MLP + LSTM 的方式来对 prompt 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是升级版本,主要解决P-Tuning V1 在小参数量模型上表现差的问题

P-Tuning v2 方法的核心思想:在模型的每一层都应用连续的 prompts, 并对 prompts 参数进行更新优化. 同时, 该方法也是针对 NLU 任务优化和适配的

超大规模参数Prompt-Tuning方法

近两年来,随着Prompt-Tuning技术的发展,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning. 如GPT-3模型, 只需要设计合适的模板或指令即可以实现免参数训练的零样本学习

根本原因:模型参数量足够大,训练过程中使用了 足够多的语料,同时设计的 预训练任务足够有效

In-Context Learing

上下文学习In-Context learning(ICL)最早在GPT3中提出, 旨在从训练集中挑选少量的标注样本,设计任务相关的指令形成提示模板,用于指导测试样本生成相应的结果

zero-shot learning

  • 给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试

one-shot learning

  • 给出任务的描述, 在进行新数据预测前, 插入一个样本做指导,相当于给一个例子让模型理解,然后再提供测试数据对其进行预测

few-shot learning

  • 给出任务的描述, 在进行新数据预测前, 插入N个样本做指导. 相当于给N个例子让模型理解, 然后再提供测试数据对其进行预测

Instruction Learning

指令学习Instruction-Tuning和Prompt-Tuning的核心一样,就是去发掘语言模型本身具备的知识

  • 其实Prompt-Tuning本质上是对下游任务的指令,简单的来说:就是告诉模型需要做什么任务,输出什么内容. 上文我们提及到的离散或连续的模板,本质上就是一种对任务的提示
  • 因此, 在对大规模模型进行微调时, 可以为各种类型的任务定义指令, 并进行训练,来提高模型对不同任务的泛化能力

Prompt

带女朋友去了一家餐厅,她吃的很开心,餐厅,她吃的很开心, 这家餐厅太_了!

Instruction

判断这句话的情感:带女朋友去了一家餐厅,她吃的很开心。选项:A=好,B=一般, C=差

对比Prompt

  • Prompt是去激发语言模型的补全能力,比如给出上半句生成下半句、或者做完形填空
  • Instruction-Tuning则是激发语言模型的理解能力,通过给出更明显的指令/指示,让模型去理解并做出正确的action
  • Promp-Tuningt在没有精调的模型上也能有一定效果,但是InstructTuning则必须对模型精调, 让模型知道这种指令模式

Chain-of-Thought

思维链 (Chain-of-thought,CoT) 的概念是在 Google 的论文 “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” 中被首次提出

  • 思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理
  • 思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习(即通过x1,y1,x2,y2,….xtest)作为输入来让大模型补全输出test),思维链多了中间的推导提示

用一个逻辑推理来简单理解什么是CoT

题目:

桌上有三个盒子:红盒子、蓝盒子、绿盒子。
红盒子里一定不是金币;蓝盒子可能有金币;
如果绿盒子里没有金币,那么蓝盒子一定有金币。
问:如果蓝盒子没有金币,金币在哪里?

不用思维链

模型可能乱猜:

绿盒子

用思维链

让模型“说思考过程”:

  1. 假设蓝盒子没有金币
  2. 那么根据题意“若绿盒子没有金币,则蓝盒子一定有金币”,此时蓝盒子没有金币 → 绿盒子不可能没有
  3. 所以绿盒子里必须有金币
  4. 红盒子不可能有金币(题意说明)
    因此金币在绿盒子里

通过链式推理,模型能得到正确答案

CoT分类

Few-shot CoT

  • ICL 的一种特殊情况,它通过融合CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT,output〉

Zero-shot CoT

  • 直接生成推理步骤,然后使用生成的 CoT来导出答案.(其中 LLM 首先由 “Let’sthink step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式)

PEFT

PEFT(Parameter-Efficient Fine-Tuning)参数高效微调方法是目前大模型在工业界应用的主流方式之一,PEFT 方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的 PEFT 技术也能实现了与全量微调相当的性能

PEFT的优势:

  • 该方法可以使 PLM 高效适应各种下游应用任务,而无需微调预训练模型的所有参数,且让大模型在消费级硬件上进行全量微调(Full Fine-Tuning)变得可行,这里的全量微调并不是真的全参数更新,只是能达到与之接近的效果

Prefix Tuning

2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法,该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定

任务形式

  • Prefix-Tuning 在输入前添加前缀,即z=[Prefix,x,y] ,Pidx为前缀序列的索引, |Pidx|为前

    缀的长度。前缀索引对应着由θ参数化的向量矩阵 Pθ, 维度为|Pidx|×dim(hi).

  • 注意:由于直接更新 Prefix 的参数会导致训练不稳定,作者在 Prefix 层前面加了 MLP 结构(相当于将Prefix

    分解为更小维度的 Input 与 MLP 的组合后输出的结果),训练完成后,只保留 Prefix 的参数.

对比

对比P-Tuning

  • Prefix-Tuning 是将额外的embedding加在开头,看起来更像

    模仿Instruction指令,而PTuning 位置不固定.

  • Prefix-Tuning 通过在每个层都添加可训练参数,通过MLP初始化,

    而P-Tuning只在输入的时候加入embedding, 并通过LSTM+MLP初始化.

对比Prompt-Tuning

  • Prompt Tuning 方式可以看做是Prefix Tuning 的简化,只在输入层

    加入 prompt tokens,并不需要加入MLP 进行调整来解决难训练的问题.

Adapter Tuning

2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对BERT 的 PEFT微调方式,拉开了 PEFT 研究的序幕

不同于Prefix Tuning这类在输入前添加可训练 prompt参数,以少量参数适配下游任务,Adapter Tuning则是在预训练模型内部的网络层之间添加新的网络层或模块来适配下游任务. 当模型训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调

模型结构

  • 首先是一个 down-project 层将高维度特征映射到低维特征.

  • 然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征

  • 同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为identity(类似残差结构)

LoRA

低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换,也就是:通过一个较低维度的表示来近似表示一个高维矩阵或数据集

LoRA的产生:

  • 上述Adapter Tuning 方法在 PLM 基础上添加适配器层会引入额外的计算,带来推理延迟问题;而Prefix Tuning 方法难以优化,其性能随可训练参数规模非单调变化,更根本的是,为前缀保留部分序列长度必然会减少用于处理下游任务的序列长度. 因此微软推出了LoRA方法

LoRA技术冻结预训练模型的权重,并在每个Transformer块

中注入可训练层(称为秩分解矩阵),即在模型的Linear

层的旁边增加一个“旁支”A和B。其中,A将数据从d维降

到r维,这个r是LoRA的秩,是一个重要的超参数;B将数据

从r维升到d维,B部分的参数初始为0。模型训练结束后,

需要将A+B部分的参数与原大模型的参数合并在一起使用

PEFT发展时间线

2019 -- Adapter 系列(PEFT 的起点)

● 2019.06 — Adapter-BERT
论文:Parameter-Efficient Transfer Learning for NLP

核心思想:

  • 在 Transformer 每层插入一个小瓶颈网络(Adapter)
  • 冻结原模型,只训练 Adapter

影响:

  • 开启“只训练少量参数”的 PEFT 思路

● 2019.12 — AdapterFusion
论文:AdapterFusion: Non-destructive Task Composition…

作用:

  • 可以组合多个任务的 Adapter
  • 实现多任务知识融合
2020 -- Prompt 化 + 连续 Prompt 开始出现

● 2020.12 — Prompt Tuning(离散提示)
背景:

  • GPT-3 展示了 Prompt Learning 的强大能力
  • 人工设计 Prompt 不稳定,激发对可训练提示的需求

意义:

  • 连续 Prompt(Soft Prompt)的研究开始萌芽
2021 -- Prompt 变成可训练向量(Soft Prompt 时代)

● 2021.02 — GPT Prompt Tuning(Soft Prompt)
论文:The Power of Scale for Parameter-Efficient Prompt Tuning

创新:

  • 引入可训练的 Prompt Embedding(虚拟 token)
  • 只训练几十个 embedding 即可完成新任务

意义:

  • 计算成本极低
  • Soft Prompt 方法正式确立

● 2021.04 — P-Tuning v1
论文:P-Tuning: Prompt Tuning Can Be Comparable to Finetuning

核心创新:

  • 使用“可训练连续 embedding + LSTM”生成 Prompt
  • 在 BERT 类 encoder 模型上效果稳定

意义:

  • Soft Prompt 被扩展到更多模型

● 2021.09 — Prefix Tuning(Prefix-Tuning)
论文:Prefix-Tuning: Optimizing Continuous Prompts for Generation

特点:

  • 给 Transformer 所有层加入训练前缀参数
  • 性能优于浅层 Soft Prompt

用途:

  • 翻译、摘要、生成任务

● 2021.10 — P-Tuning v2
论文:P-Tuning v2: Prompt Tuning Can Be Comparable to FT on Large Models

特点:

  • Prefix Prompt + 深层结构统一框架
  • 性能接近 Full Fine-Tuning
  • 适配 GPT / BERT / T5

行业影响:

  • Prompt-based PEFT 的黄金版本
2021-2022 -- 真正的大爆发:LoRA

● 2021.12(发布)/2022.02(论文)— LoRA
论文:LoRA: Low-Rank Adaptation of Large Language Models

核心思想:

  • 将权重增量参数化为低秩分解:W + BA
  • 冻结原模型,只训练 A、B

效果:

  • 训练成本降低 100 倍
  • 性能接近全参数微调

意义:

  • LoRA 成为 LLM 时代最主流的 PEFT 方法
2022 -- Prompt/Adapter/LoRA 多方法融合与优化

● 2022.05 — IA3
论文:IA3: Efficient Adaptation of Pretrained Transformers

方法:

  • 为每层仅加入缩放向量(gating-like)
  • 参数量比 LoRA 更小

● 2022.07 — 大模型(LLaMA/BLOOM/GLM)兴起
影响:

  • LoRA 成为这些模型的事实标准微调方式
2023 -- SFT 大模型时代,新型 PEFT

● 2023.03 — QLoRA
论文:QLoRA: Efficient Finetuning of Quantized LLMs

创新:

  • 在 4-bit 量化模型上使用 LoRA
  • 显著节省显存,同时保持 Full FT 性能

意义:

  • 单卡 3090/A10 就能训练 7B/13B 模型
  • PEFT 真正走向大众

● 2023.08 — PETL(PEFT)系统性综述
论文:Parameter-Efficient Transfer Learning: A Survey

意义:

  • 首次完整整理所有 PEFT 方法
2024 -- LLM 后时代的 PEFT 优化方向

● 2024 — DoRA(Decomposition of Rank-3)

  • LoRA 改进版,分解矩阵 + 方向
  • 稳定性更高、训练更可控

● 2024 — AdaLoRA

  • 动态调整 LoRA 的秩
  • 提升参数效率

● 2024 — LongLoRA

  • 针对长上下文模型的 LoRA 改进
  • 大幅提升长序列训练表现