文章目录
-
- [4 Prompt-Tuning](#4 Prompt-Tuning)
-
- [4.1 NLP任务四种范式](#4.1 NLP任务四种范式)
- [4.2 Prompt-Tuning 提示微调](#4.2 Prompt-Tuning 提示微调)
- [4.3 PET模型](#4.3 PET模型)
- [4.4 Hard Prompt & Soft Prompt](#4.4 Hard Prompt & Soft Prompt)
- [4.5 Prompt Tuning](#4.5 Prompt Tuning)
- [4.6 P-tuning (NLU任务)](#4.6 P-tuning (NLU任务))
- [5 超大规模参数模型Prompt-Tuning方法](#5 超大规模参数模型Prompt-Tuning方法)
-
- [5.1 In-context Learning 上下文学习方法的应用](#5.1 In-context Learning 上下文学习方法的应用)
- [5.2 Instruction-Tuning 指令学习方法的应用](#5.2 Instruction-Tuning 指令学习方法的应用)
- [5.3 Chain-of-Thought cof 思维链](#5.3 Chain-of-Thought cof 思维链)
- [5.4 PERT 介绍](#5.4 PERT 介绍)
-
- [5.41 Prefix Tuning](#5.41 Prefix Tuning)
- [5.42 Adapter Tuning](#5.42 Adapter Tuning)
- [5.43 Lora 微调](#5.43 Lora 微调)
4 Prompt-Tuning
4.1 NLP任务四种范式
目前学术界一般将NLP任务的发展分为四个阶段,即NLP四范式:
- 第一范式:基于「传统机器学习模型」的范式
- 第二范式:基于「深度学习模型」的范式
- 第三范式:基于「预训练模型+fine-tuning」的范式
- 第四范式:基于「预训练模型+Prompt+预测」的范式
4.2 Prompt-Tuning 提示微调
-
通过让下游任务取迁就预训练模型,将fine-tuning的下游目标任务转换为pre-training的预训练任务
-
执行步骤:
-
构建模板(Template Construction): 通过人工定义,自动搜索,文本生成的方法,三个部分从与给定句子相关的一个含有[MASK]标记的模板,并拼接到原始文本中,获得输入:
- It was [MASK].
,并拼接到原始的文本中,获得Prompt-Tuning的输入:
[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]`。
并复用预训练好的MLM分类器,得到[mask]预测的各个token的概率分布
- It was [MASK].
-
标签词映射(Label Word Verbalizer): 建立映射关系,把[mask]的词分类
-
训练: 根据verbalizer 获得指定的lavel word 的预测概率分布,并采用交叉信息熵训练,。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题。
-
4.3 PET模型
PET模型提出两个很重要的组件:
- Pattern(Template) :记作T, 即上文提到的Template,其为额外添加的带有
[mask]
标记的短文本,通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]
标记)。由于不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一; - Verbalizer :记作V, 即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。例如情感分析中,我们期望Verbalizer可能是 (positive和negative是类标签)。同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern。因此 如何构建Verbalizer是另一个研究挑战 。
4.4 Hard Prompt & Soft Prompt
Hard Prompt (离散提示):是一种固定的提示模板,通过将特定的关键词或短语(真实的文本字符串)直接嵌入到文本中,引导模型生成符合要求的文本。这种提示方法的特点在于,提示模板是固定的,不能根据不同的任务和需求进行调整。
Soft Prompt (连续提示) :是指通过给模型输入一个可参数化的提示模板,从而引导模型生成符合特定要求的文本。这种提示方法的特点在于,提示模板中的参数可以根据具体任务和需求进行调整,以达到最佳的生成效果。
4.5 Prompt Tuning
Prompt Tuning 是2021年谷歌在论文《The Power of Scale for Parameter-Efficient Prompt Tuning》中提出的微调方法,该方法基于T5模型(最大参数11B)为每一个输入文本假设一个固定前缀提示,该提示由神经网络参数化,并在下游任务微调时进行更新,整个过程中预训练的大模型参数被冻结.
4.6 P-tuning (NLU任务)
P-Tuning 是2022年清华在论文《GPT Understands, Too》中提出的微调方法,该方法提出将 Prompt 转换为可以学习的 Embedding 层,只是考虑到直接对 Embedding 参数进行优化.
- p_tuning 和 prompt_tuning的区别
- Prompt Tuning 是将额外的 embedding 加在开头,看起来更像是模仿 Instruction 指令;而 P-Tuning 的位置则不固定.
- Prompt Tuning 需要加入 MLP 来参数初始化;而 P-Tuning 通过 LSTM+MLP 来初始化.
基本原理:
- P-tuning 固定 LLM 参数, 利用多层感知机 (MLP)和 LSTM 对 Prompt 进行编码,编码之后与其他向量进行拼接之后正常输入 LLM. 注意,训练之后只保留 Prompt 编码之后的向量即可,无需保留编码器.
P-Tuning V1 直接对 Embedding 参数进行优化会存在两个挑战:
- Discretenes(不连续性): 对输入正常语料的 Embedding 层已经经过预训练,而如果直接对输入的 prompt embedding进行随机初始化训练,容易陷入局部最优.
- Association(关联性分析):没法捕捉到 prompt embedding 之间的相关关系.
P-Tuning V2是升级版本,主要解决P-Tuning V1 在小参数量模型上表现差的问题.
核心思想:
- 在模型的每一层都应用连续的 prompts, 并对 prompts 参数进行更新优化. 同时, 该方法也是针对 NLU 任务优化和适配的.
5 超大规模参数模型Prompt-Tuning方法
- 上下文学习 In-context Learning
- 指令学习 Instruction-Tuning
- 思维链 Chain-of-Thought
5.1 In-context Learning 上下文学习方法的应用
- zero-shot 给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试.
- one-shot 给出任务的描述, 在进行新数据预测前, 插入一个样本做指导,相当于给一个例子让模型理解,然后再提供测试数据对其进行预测.
- few-shot 给出任务的描述, 在进行新数据预测前, 插入N个样本做指导. 相当于给N个例子让模型理解, 然后再提供测试数据对其进行预测.
5.2 Instruction-Tuning 指令学习方法的应用
Prompt VS Instruction:
Prompt为第一种模式,Instruction为第二种. 很明显:做判别比做生成更容易.
- Prompt是去激发语言模型的补全能力,比如给出上半句生成下半句、或者做完形填空
- Instruction-Tuning则是激发语言模型的理解能力,通过给出更明显的指令/指示,让模型去理解并做出正确的action.
- Promp-Tuningt在没有精调的模型上也能有一定效果,但是Instruct-Tuning则必须对模型精调, 让模型知道这种指令模式.
5.3 Chain-of-Thought cof 思维链
- 思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理
- 思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习(即通过x1,y1,x2,y2,...xtest作为输入来让大模型补全输出ytest),思维链多了中间的推导提示.
- COT分类:
- Few-shot Cot
- Zero-shot COT 直接生成推理步骤,然后使用生成的 CoT 来导出答案.(其中 LLM 首先由 "Let's think step by step" 提示生成推理步骤,然后由 "Therefore, the answer is" 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式)
- COT 特点:
- 思维链中的每个思考步骤都应该是有逻辑关系的,它们应该相互连接,从而形成一个完整的思考过程.
- 思维链应该尽可能地全面和细致地考虑问题,以确保不会忽略任何可能的因素和影响.
- 思维链中的每个思考步骤都应该是可行的,也就是说,它们应该可以被实际操作和实施.
- 思维链中的每个思考步骤都应该是可以验证的,也就是说,它们应该可以通过实际的数据和事实来验证其正确性和有效性
5.4 PERT 介绍
PEFT(Parameter-Efficient Fine-Tuning)参数高效微调方法是目前大模型在工业界应用的主流方式之一,PEFT 方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的 PEFT 技术也能实现了与全量微调相当的性能.
该方法可以使 PLM 高效适应各种下游应用任务,而无需微调预训练模型的所有参数,且让大模型在消费级硬件上进行全量微调(Full Fine-Tuning)变得可行.
5.41 Prefix Tuning
2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法,该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定.
相比较P-Tuning:
-
Prefix-Tuning 是将额外的embedding加在开头,看起来更像模仿Instruction指令,而P-Tuning 位置不固定.
-
Prefix-Tuning 通过在每个层都添加可训练参数,通过MLP初始化,而P-Tuning只在输入的时候加入embedding, 并通过LSTM+MLP初始化.
-
什么是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初始化.
-
Prefix-Tuning和Prompt-Tuing的区别?
- Prompt Tuning 方式可以看做是 Prefix Tuning 的简化,只在输入层加入 prompt tokens,并不需要加入 MLP 进行调整来解决难训练的问题
5.42 Adapter Tuning
不同于Prefix Tuning这类在输入前添加可训练 prompt参数,以少量参数适配下游任务,Adapter Tuning 则是在预训练模型内部的网络层之间添加新的网络层或模块来适配下游任务. 当模型训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调.
-
内部Adapter构造:
properties首先是一个 down-project 层将高维度特征映射到低维特征. 然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征 同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为identity(类似残差结构)
5.43 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部分的参数与原大模型的参数合并在一起使用。