赞
踩
背景
Pre-training + Fine-tuning 模式:先在Pre-training阶段通过一个模型在大规模无监督语料上预先训练一个预训练语言模型(Pre-trained Language Model,PLM)(e.g. GPT、EMLO、BERT),然后在Fine-tuning阶段基于训练好的语言模型在具体的下游任务上再次进行微调(Fine-tuning),以获得适应下游任务的模型。 缺陷:在大多数的下游任务微调时,下游任务的目标与预训练的目标差距过大导致提升效果不明显,微调过程中依赖大量的监督语料等。一般任务在Fine-tuning阶段几乎都涉及在模型头部引入新参数的情况,且都存在小样本场景过拟合的问题。
Prompt-Tuning微调范式——Prompt-Tuning,其旨在通过添加模板的方法来避免引入额外的参数,从而让语言模型可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果。如GPT-3、PET。
Prompt的目的是将Fine-tuning的下游任务目标转换为Pre-training的任务。
Prompt-Tuning旨在解决传统Fine-tuning的两个痛点:
降低语义差异(Bridge the gap between Pre-training and Fine-tuning):预训练任务主要以Masked Language Modeling(MLM)为主,而下游任务则重新引入新的训练参数,因此两个阶段的目标通常有较大差异。因此需要解决如何缩小Pre-training和Fine-tuning两个阶段目标差距过大的问题;
避免过拟合(Overfitting of the head):由于再Fine-tuning阶段需要新引入额外的参数以适配相应的任务需要,因此在样本数量有限的情况容易发生过拟合,降低了模型的泛化能力。因此需要面对预训练语言模型的过拟合问题。
Prompt Learning 和 Fine-tuning 的范式区别
Fine-tuning 是使得预训练语言模型适配下游任务
Prompting 是将下游任务进行任务重定义,使得其利用预训练语言模型的能力,即适配语言模型
现代 NLP 第四范式
Prompting 方法是现在NLP的第四范式。其中现在NLP的发展史包含
Feature Engineering:即使用文本特征,例如词性,长度等,在使用机器学习的方法进行模型训练。(无预训练语言模型)
Architecture Engineering:在W2V基础上,利用深度模型,加上固定的embedding。(有固定预训练embedding,但与下游任务无直接关系)
Objective Engineering:在bert 的基础上,使用动态的embedding,在加上fine-tuning。(有预训练语言模型,但与下游任务有gap)
Prompt Engineering:直接利用与训练语言模型辅以特定的prompt。(有预训练语言模型,但与下游任务无gap)
在四个范式中,预训练语言模型,和下游任务之间的距离,变得越来越近,直到最后Prompt Learning是直接完全利用LM的能力。
面向预训练语言模型的Prompt-Tuning技术发展历程
Prompt-Tuning自从GPT-3被提出以来,从传统的离散、连续的Prompt的构建、走向面向超大规模模型的In-Context Learning、Instruction-tuning和Chain-of-Thought。
Prompt-Tuning
Prompt-tuning的工作原理
以二分类的情感分析作为例子,给定一个句子[CLS] I like the Disney films very much. [SEP] 传统的Fine-tuning方法是将其通过BERT的Transformer获得 [CLS]表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练。
Prompt-Tuning则执行如下步骤:
构建模板(Template Construction):通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板。例如It was [MASK].,并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]。将其喂入BERT模型中,并复用预训练好的MLM分类器(在huggingface中为BertForMaskedLM),即可直接得到[MASK]预测的各个token的概率分布;
标签词映射(Label Word Verbalizer):因为[MASK]部分我们只对部分词感兴趣,因此需要建立一个映射关系。例如如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类。
训练:根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题
因此如何最大化的寻找当前任务更加合适的template和label word是Prompt-tuning非常重要的挑战。
Prompt-Tuning—GPT-3
Prompt-Tuning起源于GPT-3的提出《Language Models are Few-Shot Learners》(NIPS2020),其认为超大规模的模型只要配合好合适的模板就可以极大化地发挥其推理和理解能力。
In-context Learning:即无须修改模型即可实现few-shot/zero-shot learning,是Prompt的前身。其通过从训练集中挑选一些样本作为任务的提示提示(Natural Language Prompt),来实现免参数更新的模型预测;
Demonstration Learning:即让模型知道与标签相似的语义描述,提升推理能力。添加一些新的文本作为提示。例如在对“I like the Disney film. It was [MASK]”进行情感分析时,可以拼接一些相似场景的ground-truth文本“I like the book, it was great.”、“The music is boring. It is terrible for me.”等。此时模型在根据新添加的两个样例句子就可以“照葫芦画瓢”式地预测结果了。
ICT工作原理:下图给了ICT的工作原理,挑选了 K = 3 个训练样本作为Demonstration(黄色部分),指令模板则是换行符“\n”,旨在区分样本的句子和标签。在预测时,不断地更换测试样本(绿色部分),并在末尾留出空间让模型生成。
示例:
In-context Learning:将语料中比如含差、无聊等负面词作为label,相应的片段作为prompt,进行预测。
Demonstration Learning:人工加一些相似表达。
小规模的语言模型(BERT)上的prompt——PET模型
PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021),Prompt-Tuning启发于文本分类任务,并且试图将所有的分类任务转换为与MLM一致的完形填空。PET详细地设计了Prompt-Tuning的重要组件——Pattern-Verbalizer-Pair(PVP),并描述了Prompt-tuning如何实现Few-shot/Zero-shot Learning,如何应用在全监督和半监督场景(iPET)。
PET设计了两个重要组件:
Pattern(Template):记作 T ,即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]标记)。
Verbalizer:记作 V ,即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。例如情感分析中,我们期望Verbalizer可能是 V ( positive ) = great,V ( negative ) = terrible(positive和negative是类标签)。同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern。
上述两个组件被称为Pattern-Verbalizer-Pair(PVP),一般记作 P = ( T , V )。不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一。构建Verbalizer是另一个研究挑战。
训练目标:可以形式化描述
Prompt-Tuning的集成
为一个句子设计多个不同的PVP。
Patterns Ensembling:同一个句子设计多个不同的pattern,例如It was [mask].,I think it is [mask].,This comment denotes as [mask]. 等,此时,原先只有一个句子,却可以生成多个不同的样本,也变相起到数据增强的作用。在训练时,可以当作单独的样本进行训练,推理时,则可以对所有Pattern的结果进行投票或加权。
Verbalizers Ensembling:同样,在给定的某个Pattern下,并非只有1个词可以作为label word。例如positive类,则可以选择“great”、“nice”、“wonderful”。当模型预测出这三个词时,均可以判定为positive类。在训练和推理时,可以对所有label word的预测概率进行加权或投票处理,并最后获得概率最大的类。
PVPs Ensembling(Prompt Ensembling):Pattern和Verbalizer均进行集成,此时同一个句子有多个Pattern,每个Pattern又对应多个label word。在训练时可以采用加权,在推理时可以采用加权或投票法:
半监督的学习方法——iterative PET(iPET)。 先从预训练模型开始,初始化多个不同的模型(图中1步骤),在有标注的少量样本上进行Prompt-Tuning,然后通过多个不同的PVP训练得到多个不同的模型(图中a步骤),每个模型在无标注数据上进行推理打标,并根据置信度筛选(图中b步骤),根据新标注的数据与原始标注数据融合后,再重新进行Prompt-Tuning(图中c步骤),重复abc三个步骤多次后,获得每个模型后,在测试时进行集成投票(图中2、3步骤)。
Pattern和Verbalizer的设计和选择
根据特定任务的性质和先验知识人工设计模板。但是在同样的数据集和训练条件下,选择不同的Pattern和Verbalizer会产生差异很大的结果。有时候,即便是人类理解的相似的模板,也会对模型预测结果产生很大差异。在相同Pattern时,选择不同的label word对结果影响很大,同理,不同的Pattern对结果影响也很明显,并不能充分发挥Prompt简单快捷的优势。
缺陷:成本高;不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大;在预训练阶段MLM任务并非完全按照PVP的模式进行训练的(比如MLM训练通常都是长文本,mask的数量也并非只有1个,预测的概率分布也并非是有限的),与MLM在语义和分布上依然存在差异。
如何挑选合适的Pattern?
离散的模板构建法(人工构建;启发式法;生成),其旨在直接与原始文本拼接显式离散的字符,且在训练中始终保持不变(这些离散字符的词向量在训练过程中保持固定)。通常情况下,离散法不需要引入任何参数。
连续的模板构建法(连续提示;如词向量微调和伪标记),其旨在让模型在训练过程中根据具体的上下文语义和任务目标对模板参数进行连续可调。这套方案的动机则是认为离散不变的模板无法参与模型的训练环节,容易陷入局部最优,而如果将模板变为可训练的参数,那么不同的样本都可以在连续的向量空间中寻找合适的伪标记,同时也增加模型的泛化能力。因此,连续法需要引入少量的参数并让模型在训练时进行参数更新。
人工构建(Manual Template)
如前文
启发式法(Heuristic-based Template)
一般是采用规则、正则化模板的方法自动构建出相应的Pattern,或者直接通过启发式搜索的方法获得Pattern。
如清华大学刘知远团队提出的PTR(PTR: Prompt Tuning with Rules for Text Classification)利用启发式的规则定义若干子模板(sub-prompt),并通过若干子模板的组合来形成最终的Pattern。根据不同的实体而相应改变模板的字符序列。
AutoPrompt则是另一种典型的方法,其由加州大学提出《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts(EMNLP2021),给定原始的输入,额外定义若干离散的字符作为trigger,并组成Template,喂入MLM中预测对应label word的概率。而这些trigger最终通过梯度搜索的方法进行挑选。
生成(Generation)
直接让模型来生成合适的模板:根据给定的任务训练数据(通常是小样本场景),生成出合适的模板。
陈丹琦团队提出LM-BFF则作为该类方法的典范,其出自于《Making Pre-trained Language Models Better Few-shot Learners》(ACL2021)。LM-BFF首先定义一个Template的母版(有点类似于PTR中的含有占位符的子模板),将这些母版与原始文本拼接后喂入T5模型(T5模型属于自回归式的生成模型)后在<X>和<Y>占位符部分生成相应的字符,最终形成对应的Template。然后再基于生成的Template和label word进行训练。
前面提到的模板都是可读的离散的token(或Hard Prompt),很难寻找到最佳的模板。
连续提示——Continuous/Soft Prompt
词向量微调(Word Embedding):显式地定义离散字符的模板,但在训练时这些模板字符的词向量参与梯度下降,初始定义的离散字符用于作为向量的初始化;伪标记(Pseudo Token):不显式地定义离散的模板,而是将模板作为可训练的参数。
将模板转换为可以进行优化的连续向量,换句话说,我们不需要显式地指定这些模板中各个token具体是什么,而只需要在语义空间中表示一个向量即可,这样,不同的任务、数据可以自适应地在语义空间中寻找若干合适的向量,来代表模板中的每一个词,相较于显式的token,这类token称为 伪标记(Pseudo Token)。
假设针对分类任务,给定一个输入句子 x ,连续提示的模板可以定义为:
T = = [x][v_1][v_2]...[v_m][mask]
其中[v_i]是伪标记,其仅代表一个抽象的token,并没有实际的含义,本质上是一个向量。
基于连续提示的Prompt-Tuning的实现方法
Prompt Tuning
《The Power of Scale for Parameter-Efficient Prompt Tuning》率先提出了伪标记和连续提示的概念,以让模型在能动态地对模板在语义空间内进行调整,使得模板是可约的(differentiate)。
形式化的描述如下:给定 n 个tokens,记作x_1, ..., x_n ,一个预训练模型对应的embedding table,通过这个table,可以将每个token表示为一个embedding。连续模板中的每个伪标记v_i可以视为参数,也可以视为一个token,因此,可以通过一个embedding table获得每个伪标记的向量v_i,然后喂入一个MLP获得新的表征。最后,对于预训练模型的输入则是同时包含 x_i和v_i。
每个伪标记的初始化可以有下列几种情况:
最简单的是随机初始化:采用正态分布或者均匀分布随机初始化一个面向所有伪标记的embedding table;
每个token使用预训练模型已有的embedding table进行初始化,每一个伪标记先随机指定词表中的一个词,并取对应词的embedding作为这个伪标记的初始化;
在分类任务上,使用label word(verbalizer)对应的embedding作为初始化,可以有效限制模型输出的是预设的输出类对应的word。
在训练过程中,每个伪标记以及对应的MLP参数都可以得到训练,对于不同的输入句子 x ,这些伪标记对应的embedding也各不相同,达到了预期的目的。
P-tuning
《GPT Understands, Too》在Prompt Tuning方法上主要做出几个改进(图中的 [p_i]等价于上文的[v_i],表示伪标记)。
考虑到这些伪标记的相互依赖关系:认为 [v_1]与[v_2]是有先后关系的,而transformer无法显式地刻画这层关系,因此引入Prompt Encoder,实际过程中采用一层RNN;
指定上下文词:如果模板全部是伪标记,在训练时无法很好地控制这些模板朝着与对应句子相似的语义上优化,因此选定部分具有与当前句子语义代表性的一些词作为一些伪标记的初始化(例如上图中“capital”、“Britain”等);
重参数(Reparameterization):具体到代码实现上,P-tuning先通过一个Prompt Encoder表征这些伪标记后,直接将这些新的表征覆盖到对应的embedding table上,换句话说,Prompt Encoder只在训练时候会使用到,而在推理阶段则不再使用。
混合提示(Hydride Prompt):将连续提示与离散token进行混合,例如 [x][it][v_1][mask].
PPT(Pre-trained Prompt Tuning)
《PPT: Pre-trained Prompt Tuning for Few-shot Learning》PPT旨在通过先让这些连续提示在大量无标注的预训练语料进行预训练,然后将其加载到对应下游任务的PLM上进行训练,如下图所示(图中的 P 即连续的提示模板,<x> 表示为mask token):
首先在大量无标注语料上进行预训练,获得训练好的连续提示;对下游任务(是非问答、NLI、文本匹配等),加载这些训练好的提示之后,进行微调,或者直接进行zero-shot预测。
几种template优化对比
如何挑选合适的Verbalizer?
不同的Verbalizer会对最终预测效果产生较大的影响,不同的任务会有不同的合适的label word。例如在电影评论任务中,positive类别的label word比较合适的是wonderful,而在美食点评任务中,positive比较合适的是testy。
人工设计(Manual Design)
即可以根据对每个任务的经验来人工指定这些label word。
KPT(Knowledgeable Prompt Tuning)
领域知识指导搜索离散的label word:《Knowledgeable Prompt-tuning:Incorporating Knowledge into Prompt Verbalizer for Text Classification》
ProtoVerb
原型网络动态生成label representations:《Prototypical Verbalizer for Prompt-based Few-shot Tuning》。同连续的模板一样,为了让label word也可以自适应的变化,提出连续的label word。ProtoVerb巧妙的运用了原型网络(Prototypical Network)的思路,将每个类别的所有样本的表征的期望作为该类的原型向量,并使用该原型向量代替连续的label word。
以新闻分类为例,首先定义固定的模板“A [mask] news.”,并拼接到原始的输入句子上。喂入BERT模型中,获得 [mask] 位置的表征向量代表句子向量。在训练过程中的label是已知的,所以可以求得同一label对应所有句子向量的均值来表示这个label的表征(图中的五角星)。在测试阶段,则只需要计算测试句子的表征与各个类别的原型向量的相似度,并取最大相似度对应的label作为预测结果。
参数有效性学习(Parameter-Efficient Learning,PEL)
旨在确保模型效果不受太大影响的条件下尽可能地提高训练的时间和空间效率。
参数有效性训练:在参数有效性学习过程中,大模型中只需要指定或额外添加少量的可训练参数,而其余的参数全部冻结,这样可以大大提高模型的训练效率的同时,确保指标不会受到太大影响。
Adapter-Tuning
Adapter-Tuning在2019年提出,其面向预训练语言模型的参数有效性学习。为了提高效率,该方法提出固定Transformer的全部参数,然后在Transformer的每一个Block里嵌入一些新初始化的Adapter Network。
Adapter位于Feed-Forward Layer之后、残差连接之前。Adapter本质上就是两层MLP,分别负责将Transformer的表征降维和升维,只需要添加不到5%的可训练参数,即可以几乎达到全参数训练的效果,在训练过程中大大节省了训练时间,做到时间有效性。不同的任务我们不需要重新对整个预训练模型进行微调,只需要保存Adapter,而预训练模型的其他参数都是原始预训练的,这样就做到了空间的有效性。
Prefix-Tuning
Prompt-Tuning的本质是参数有效性学习,是因为整个预训练模型参数可以全部固定,只需要对Template对应的少量参数(例如连续模板的Prompt Encoder、伪标记对应的Embedding等){这样伪标记就带上了任务输入内容的关联语义}进行训练。
Prefix-Tuning受到Prompt-Tuning的启发,则是除了对输入层添加模板外,还对Transformer的每一层添加“模板”。该方法保持预训练语言模型参数固定(frozen),而只需要在task-specific vector(称为prefix)上进行优化。即只需要少量(约0.1%)的优化参数,即可以在量和小量数据上达到不错的效果。Prefix-Tuning是面向文本生成领域。
Prefix-Tuning与传统Fine-tuning的对比:
P-Tuning v2
P-tuning V2基于P-tuning和Prefix-tuning,拓展提出p-tuning的V2版本模型。p-tuning-v2的主要贡献是在原本的输入前添加自定义长度的layer prompts,在后续针对下游任务的训练中冻结BERT模型的所有参数而只训练这些prompts。左图表示的是基于连续提示的Prompt-Tuning(例如P-tuning),我们可以发现只有输入层对应模板部分的Embedding和MLP参数是可训练的,右图部分表示Prefix-Tuning(P-tuning V2),Transformer的每一层的前缀部分也是可训练的,可以抽象的认为是在每一层添加了连续的模板。 P-tuning V2面向自然语言理解。
实际上,Prefix-Tuning或者P-tuning V2并不是真正的在每一层添加模板,而是通过HuggingFace框架内置的past_key_value参数控制。其本质上与Adapter类似,是在Transformer内部对Key和Value插入可训练的两个MLP。比如Prefix-Tuning中的prefix是对模型的每一层增加可以调节的参数,具体表现为扩展注意力中的键值对,即模型会把prefix输入的key和value与本身用hidden_states得到的key和value拼接起来。
[P-tuning-v2源码][记录一次对past_key_values用法的理解 - 知乎]
无额外推理延迟的LORA方法
[LLM:参数有效性学习——LoRA模型]
UniPELT框架
《UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning》对Adapter、Prefix-Tuning、LoRA等参数有效性学习进行了集成,因为这些参数有效性学习方法本质上都是插入少量的新的参数,这些新的参数可以对预训练模型起到提示作用,只不过并不是以人类可读的离散的模板形式体现而已。
[参数有效性学习]
对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至是零样本的性能也能够极大地被激发出来,得益于这些模型的参数量足够大,训练过程中使用了足够多的语料,同时设计的预训练任务足够有效。最为经典的大规模语言模型则是2020年提出的GPT-3,其拥有大约1750亿的参数,且发现只需要设计合适的模板或指令即可以实现免参数训练的零样本学习。
In-Context Learning(上下文学习)
对于[ICL]有实验表明挑选不同的样本对ICL的性能影响不同,而同样的样本不同的排列也会产生很大的差异,最大准确率的差异超过了40%,验证了ICL的性能对样本的选择和排列很敏感,完全随机的样本挑选和排列使得ICL性能不稳定、方差大。
这样就有了一些改进工作:
KATE《What Makes Good In-Context Examples for GPT-3?》;
Fantastically《Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity》
引入自监督(Self-supervised ICL)
《Improving In-Context Few-Shot Learning via Self-Supervised Training》
In-Context Tuning方法
《Meta-learning via Language Model In-context Tuning》
MetaICL方法
《MetaICL: Learning to Learn In Context》
Instruction-tuning(指令学习)
指示学习和提示学习的目的都是去挖掘语言模型本身具备的知识。不同的是Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。
提示学习:给女朋友买了这个项链,她很喜欢,这个项链太____了。
指示学习:这句话的情感是非常正向的:给女朋友买了这个项链,她很喜欢。
指示学习的优点是它经过多任务的微调后,也能够在其他任务上做zero-shot,而提示学习都是针对一个任务的。泛化能力不如指示学习。
模型微调,提示学习,指示学习三者的异同
假设是一个Question Generation任务,那么可以为这个任务定义一些指令,例如:
Title:任务的名称;
Definition:任务的定义,说明这个任务的本质和目的;
Things to avoid:说明这个任务的注意事项,例如需要避免什么等等;
Positive / Negative Examples:给出正确和错误的例子,作为提示;
Prompt:当前任务的提示信息;
当许多任务都按照这种模式定义好模板,让模型在指令化后的数据上进行微调,模型将可以学会如何看到指令做预测。
LaMDA模型
谷歌提出的LaMDA模型(Bard大模型则是基于LaMDA微调的模型),其完全采用自回归生成式模型,并在大量的对话语料上进行预训练,得到137B的大模型。为了提高模型的安全性和事实性,LaMDA涉及到两个微调策略,一个是通过人工标注形式标注一些存在安全隐患的数据。
LaMDA采用如下几个指标对生成模型进行评估:Quality, Safety 与 Groundedness。
1 quality打分是Sensibleness, Specificity, Interestingness (SSI) 3个指标的平均值:
Sensibleness: measures whether a model’s responses make sense in context and do not contradict anything that was said earlier. 衡量回复是否符合逻辑,且与上下文不冲突。
Specificity: measure whether a response is specific to a given context. For example, if a user says "I love Eurovision" and the model responds "Me too," then it would score 0 on specificity, since this response could be used in many different contexts. 符合上下文。衡量回复是否足够具体,与上下文非常契合。举极端的例子,一个对话系统只回复"OK"或"I don't know",据之前的实验结果,Sensibleness 可以有 70%,但对话体验肯定好不了。
Interestingness: the response is likely to “catch someone’s attention” or “arouse their curiosity”, or if it is unexpected, witty, or insightful. 有创造力。要求就更高些,衡量回复是否有趣以及能引起用户的注意或兴趣,属于饱暖之上更高的要求。
2 Safety: avoid unintended results that create risks of harm, and to avoid creating or reinforcing unfair bias 是否有风险、不公正
3 Groundedness: the percentage of responses containing claims about the external world that can be supported by authoritative external sources 在知识型问答中,是否包含真实的信息、并引用相关链接。 同时crowdworker还要指明是否知道该回复内容,如果3个不同的标注都知道,则认为这条回复是常识,无须借助检索。此外,crowdworker要根据检索的内容改写模型回复。
微调策略引入互联网搜索机制,提高模型生成结果的事实性:
OpenAI——InstructionGPT
[InstructGPT: Training language models to follow instructions with human feedback]
InstructGPT/ChatGPT都是采用了GPT-3的网络结构,通过指示学习构建训练样本来训练一个反应预测内容效果的奖励模型(RM),最后通过这个奖励模型的打分来指导强化学习模型的训练。[ChatGPT/InstructGPT详解 - 知乎]
Step1:先采样一些demonstration数据,其包括prompt和labeled answer。基于这些标注的数据,对GPT-3进行fine-tuning,得到SFT(Supervised Fine-tuning);即使用采集的新数据,按照GPT-3的训练方式对GPT-3进行微调。(此时的SFT模型在遵循指令/对话方面已经优于 GPT-3,但不一定符合人类偏好。)
SFT数据一部分来自使用OpenAI的PlayGround的用户,另一部分来自OpenAI雇佣的40名标注工(labeler)。并且他们对labeler进行了培训。在这个数据集中,标注工的工作是根据内容自己编写指示,并且要求编写的指示满足下面三点:简单任务:labeler给出任意一个简单的任务,同时要确保任务的多样性;Few-shot任务:labeler给出一个指示,以及该指示的多个查询-响应对;用户相关的:从接口中获取用例,然后让labeler根据这些用例编写指示。
Step2:Fine-tuning完之后,再给一个prompt让SFT模型生成出若干结果(可以通过beam search等方法),通过人工为其排序,可以得到标注的排序pair;基于标注的排序结果(来自于Human Feedback),训练一个Reward Model;具体为:对多个排序结果,两两组合,形成多个训练数据对。RM模型接受一个输入,给出评价回答质量的分数。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高。
奖励模型的损失函数:最大化labeler更喜欢的响应和不喜欢的响应之间的差值。
Step3:继续用生成出来的结果训练SFT,并通过强化学习的PPO方法,最大化SFT生成出排序靠前的answer。即使用第二步训练得到的 reward model 和 PPO 强化学习算法,对第一步的模型进行 fine-tune.
[ChatGPT 背后的“功臣”——RLHF 技术详解]
PPO-ptx模型训练目标:
随着模型的更新,强化学习模型产生的数据和训练奖励模型的数据的差异会越来越大。作者的解决方案是在损失函数中加入KL惩罚项 来确保PPO模型的输出和SFT的输出差距不会很大。
只用PPO模型进行训练的话,会导致模型在通用NLP任务上性能的大幅下降,作者的解决方案是在训练目标中加入了通用的语言模型目标 ,这个变量在论文中被叫做PPO-ptx。
初始化时,期望在训练πϕ时能够最大化reward的得分。
评价
1.3B 参数 InstructGPT 模型的输出优于 175B GPT-3 的输出,尽管参数少了 100 多倍。
InstructGPT/ChatGPT的效果是非常棒的,尤其是引入了人工标注之后,让模型的“价值观”和的正确程度和人类行为模式的“真实性”上都大幅的提升。
优点
InstructGPT/ChatGPT的效果比GPT-3更加真实:这个很好理解,因为GPT-3本身就具有非常强的泛化能力和生成能力,再加上InstructGPT/ChatGPT引入了不同的labeler进行提示编写和生成结果排序,而且还是在GPT-3之上进行的微调,这使得我们在训练奖励模型时对更加真实的数据会有更高的奖励。作者也在TruthfulQA数据集上对比了它们和GPT-3的效果,实验结果表明甚至13亿小尺寸的PPO-ptx的效果也要比GPT-3要好。
InstructGPT/ChatGPT在模型的无害性上比GPT-3效果要有些许提升:原理同上。但是作者发现InstructGPT在歧视、偏见等数据集上并没有明显的提升。这是因为GPT-3本身就是一个效果非常好的模型,它生成带有有害、歧视、偏见等情况的有问题样本的概率本身就会很低。仅仅通过40个labeler采集和标注的数据很可能无法对模型在这些方面进行充分的优化,所以会带来模型效果的提升很少或者无法察觉。
InstructGPT/ChatGPT具有很强的Coding能力:首先GPT-3就具有很强的Coding能力,基于GPT-3制作的API也积累了大量的Coding代码。而且也有部分OpenAI的内部员工参与了数据采集工作。通过Coding相关的大量数据以及人工标注,训练出来的InstructGPT/ChatGPT具有非常强的Coding能力也就不意外了。
缺点
InstructGPT/ChatGPT会降低模型在通用NLP任务上的效果:我们在PPO的训练的时候讨论了这点,虽然修改损失函数可以缓和,但这个问题并没有得到彻底解决。
有时候InstructGPT/ChatGPT会给出一些荒谬的输出:虽然InstructGPT/ChatGPT使用了人类反馈,但限于人力资源有限。影响模型效果最大的还是有监督的语言模型任务,人类只是起到了纠正作用。所以很有可能受限于纠正数据的有限,或是有监督任务的误导(只考虑模型的输出,没考虑人类想要什么),导致它生成内容的不真实。就像一个学生,虽然有老师对他指导,但也不能确定学生可以学会所有知识点。
模型对指示非常敏感:这个也可以归结为labeler标注的数据量不够,因为指示是模型产生输出的唯一线索,如果指示的数量和种类训练的不充分的话,就可能会让模型存在这个问题。
模型对简单概念的过分解读:这可能是因为labeler在进行生成内容的比较时,倾向于给给长的输出内容更高的奖励。
对有害的指示可能会输出有害的答复:例如InstructGPT/ChatGPT也会对用户提出的“AI毁灭人类计划书”给出行动方案(图5)。这个是因为InstructGPT/ChatGPT假设labeler编写的指示是合理且价值观正确的,并没有对用户给出的指示做更详细的判断,从而会导致模型会对任意输入都给出答复。虽然后面的奖励模型可能会给这类输出较低的奖励值,但模型在生成文本时,不仅要考虑模型的价值观,也要考虑生成内容和指示的匹配度,有时候生成一些价值观有问题的输出也是可能的。
ChatGPT 为什么不用 Reward-Model 的数据直接 fine-tune,而用 RL
用 supervised finetune(sft)很容易做到返回“我不知道”,但是很难让模型不去编内容。或者说,在标注的时候,对于一个模型不会的问题,标注员应该要标注为“不知道”,而不是给一个回答,不然 sft 的时候相当于训练模型怎么编答案。
我们最好划出一个边界,哪些是模型不知道的,哪些是知道但是不确定的,哪些是知道的,并通过训练加强这些不同分类的分界,让模型能稳定回答它明确知道的东西,让模型不要回答它不知道的/错误的内容,这样才能保持或提升模型的 factual truthfulness;
如果我们可以有一个 reward model,他根据这个边界返回 reward 就好了,这样的话模型的训练就能集中于我们上面描述的目标。这也是为啥他们要用 RL。但是实际上 InstructGPT 里的 loss 也并不是以找到这个边界为指标,而是优化正例和负例之间的差别。这使得当前的 reward model 没有做到预期的效果,还有优化的空间。
[ChatGPT 为什么不用 Reward-Model 的数据直接 fine-tune,而用 RL? - 知乎]
‘instruction-style’的user prompts示例
Use Case Example
brainstorming
What are 4 questions a user might have after reading the instruction manual for a trash compactor?
{user manual}
1.
classification
Take the following text and rate, on a scale from 1-10, how sarcastic the person is being (1 = not at all, 10 = extremely sarcastic). Also give an explanation
{text}
Rating:
{java code}
What language is the code above written in?
extract
Extract all course titles from the table below:
| Title | Lecturer | Room |
| Calculus 101 | Smith | Hall B |
| Art History | Paz | Hall A |
Given the following list of movie titles, write down any names of cities in the titles.
{movie titles}
generation
Write a creative ad for the following product to run on Facebook aimed at parents:
Product: {product description}
Write a short story where a brown bear to the beach, makes friends with a seal, and then return home.
Here’s a message to me: — {email} —
Here are some bullet points for a reply: — {message} —
Write a detailed reply
rewrite
Translate this sentence to Spanish:
<English sentence>
Rewrite the following text to be more light-hearted:
— {very formal text}—
hatZ
The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.
Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: I’d like to cancel my subscription.
AI:
closed qa
Help me answer questions about the following short story:
{story}
What is the moral of the story?
Answer the following question:
What shape is the earth?
A) A circle
B) A sphere
C) An ellipse
D) A plane
open qa
I am a highly intelligent question answering bot. If you ask me a question that is rooted in truth, I will give you the answer. If you ask me a question that is nonsense, trickery, or has no clear answer, I will respond with "Unknown".
Q: What is human life expectancy in the United States?
A: Human life expectancy in the United States is 78 years.
Q: Who was president of the United States in 1955?
A:
How do you take the derivative of the sin function?
summarization
Summarize this for a second-grade student:
{text}
{news article}
Tl;dr:
other start with where
Look up "cowboy" on Google and give me the results.
less ‘instruction-style’式的GPT-3 user prompts示例
[InstructGPT]
Chain-of-Thought(思维链)
思维链(A chain of thought is a series of intermediate natural language reasoning steps that lead to the final output, and we refer to this approach as chain-of-thought prompting.)在2022年初由谷歌团队提出,其旨在进一步提高超大规模模型在一些复杂任务上的推理能力。
思维链是一种特殊的In-Context Learning,对于每个挑选的In-Context Example,除了给出Input-Output Mapping外,还需要给出一个推理过程,称为Relationale或Reasoning Path,其是一个具有逻辑推理过程的短文本。
[Least-to-Most Prompting Enables Complex Reasoning in Large Language Models]尝试将一个复杂的任务分解为若干简单的子任务。在对每个子问题进行预测时,是一个渐近的过程。
第一个子问题是最简单的;
解决第二个子问题时,会将上一个子问题以及答案附加在当前子问题的前面,而且第二个子问题会比第一个子问题难;
最后一个子问题就是原始的问题,此时其会有前面所有子问题的解答作为提示。
最简单的情况,就是将一个问题分解为两个子问题,前面所有的子问题可以作为后面子问题的in-context demonstration。
from: -柚子皮-
ref: [【NLP】Prompt Learning 超强入门教程 - 知乎]
[Prompt-Tuning——深度解读一种新的微调范式]*
[ChatGPT/InstructGPT详解 - 知乎]
————————————————
版权声明:本文为CSDN博主「-柚子皮-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pipisorry/article/details/130331260
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。