预训练语言模型的发展将自然语言处理领域的研究提是升到了一个新的阶段,预训练语言模型从海量的语料中学习到通用的语言表示,并能够显著提升下游任务的完成质量。预训练任务可以分为三大类:
(1)Supervised Learning:学习一个将输入映射到对应输出的映快射函数;
(2)Unsupervised Learning:从无标签数据中学习出内在的知识:
(3)Self-Supervised Learning:监督学习和无监督学习的综合合。自监督学习的学习过程和监督学习几乎相同,不同之处在于其训练数据通常为自动生成的无标签数据,其关键在于能够使用输入的一部分数据来预须测另一部分数据,典型有语言模型相关任务,BERT、GPT等都属于自监督学习模型。
微调
预训练语言模型的知识面广泛,但最终需要落地到特定领域的应用中,针
对这些特定领域而提出的任务,叫作”下游任务”。通常预i训练任务和下游任
务之间都存在差别,为了让预训练语言模型在具体领域的下游应用中有更好的
表现,通常会针对下游任务为模型重新设计目标函数,让模型在现有基础下进
步学习特定领域的知识,即微调(Fine-Tune)。
传统的微调即全参数微调,需要单独为每个下游任务对预训:练语言模型的
所有参数进行更新和存储,对于规模较大的模型,这需要强大的算力和存储空
间进行支撑,这限制了其在低资源场景下的广泛应用。
预训练语言模型逐渐成为众多自然语言处理任务的基础架构并且越大的
模型往往会带来越好的性能。但如果对模型的所有参数都进行微调并存储,过
高的计算和存储成本也会限制其落地应用和发展,而且在多任务场景下还需要
维护多份模型版本。对此,目前有两类应用较为广泛的解决方式,分别是
Prompt Learning 和 Delta Tuning。
提示学习 prompt learning
提示学习(Prompt Learning)被称为是自然语言处理的新范式,旨在解决
传统Fine Tuning预训练和微调阶段目标差距大、耗费资源多,样本有限的情
况下容易过拟合的的问题。
提示学习首先通过人工定义、自动搜索、文本生成等方法,生成与给定句
子相关的一个含有[MASK]标记的模板,并拼接到原始的文本中,作为输入进行
训练,并将标签映射为标签词语,以获得获得指定标签词的预测测概率分布。
Prompt由GPT-3等工作提出,在不显著改变预训练语言模型结构型结构构和参数的情况
下,提示学习通过向输入增加”提示信息”、将下游任务改为文本生成任务。
Prompt Learning通过生成提示让模型能够很好地完成Few-Shot甚至Zero
Shot的学习,减少上下游任务之间的降低语义差异,从而应对下游任务标签数
据少的情况,适用于标注成本高、标注样本较少的场景,大大降低了预训练模
型在下游任务微调时存储和运算的资源使用,提升模型在下游任务中的表现。
Prompt Tuning
Prompt Tuning是一种简单而有效的机制,用于学习软提示(soft)
prompt)以微调冻结的语言模型来执行特定的下游任务。提示微调在Prompt中插入针对特殊任务的可以微调的token,将Prompt变成可学学习的向量,而不是
GPT-3里的短语句子;固定预训练模型的参数,只微调Prolmpt 来适配下游任务
研究表明,预训练语言模型的参数规模越大,Prompt Tuninng的性能和全参数
微调越接近。但在小样本场景下,Prompt Tuning和全参数微调的性能差异较
大,并且收敛较慢。
Pretrained Prompte
由于Prompt Tuning在样本较少时难以学习到好的SoftPirompt,提示预训
练在提示微调的基础上,以预训练的Prompt作为初始化来进行下游任务的提示
微调,从而得到合理的Soft Prompt的初始化来缩小参数搜索空间。
Pretrained Prompt缓解了Prompt Tuning收敛慢的问题,并强化了其应对各
种任务场景的能力。
Pretrained Prompt与Prompt Tuning的区别
增量微调(Delta Tuning)
另一种解决方式是增量微调(Delta Tuning),相比于全参数微调,这是一
种参数高效的微调方法(Parameter-Efficient Tuning),冻结大部分预训练
模型的参数,并使用一个小训练模块来增强预训练模型。它只调整大模型参数中的一小部分参数,保持绝大部分参数不动,却可以实现与传统Fine Tuning
相当甚至更好的性能。现有的增量微调方法包括AdapterTurning, LoRA,
Prefix Tuning, Mask Tuning等等。
Adapter Tuninge
Adapter-Tuning在预训练模型某些层中添加Adapter模块,微话调时冻结预
训练模型,在微调时由Adapter模块学习特定下游任务的知识、只更新
Adapter的参数。Adapter首先通过全连接对原输入进行降约维进一步缩小参数
量,再在输出阶段将维度还原,仅需添加2-4%的特定任务的参数,大大减少
了微调阶段需要更新和保存的参数量。
在AdapterTuning的基础上,Adapter Fusion提出当下游存不在多个任务的
时候,使用两阶段的微调:第一阶段在预训练大模型基础」上加上每个任务的
Adapter进行微调,将原本预训练模型的参数固定;第二阶段,同时固定和第
一阶段训练的Adapter模型参数,学习Adapter Fusion模型,从多个Adapter
的信息中进行选择和融合,实现下游多任务之间的信息共享。
Adapter结构
Adapter Fusion
Side-Tuning
Side-tuning在原来的预训练模型基础上,增加一个规模很小的根据任务的
难易程度调整复杂度的Side-network,将其输入和预训练相模型的输入进行融
合。在训练过程中只更新Side-network部分的参数,预训:练模型则不会进行更
新。Side-Tuning和Adapter-Tuning都是利用一个附属的/小模型在大规模预训
练模型上进行针对下游任务的调整。
LoRA
LORA(Low-RankAdaptation)灵感来源于”大模型是过参数化化的,有更小
的内在维度”这一研究结果,假设模型在任务适配过程中的改变量是低秩的,
固定大模型,增加模块去学习改变量,即增加低秩分解的矩阵来适配下游任务,一个中心模型服务多个下游任务,使训练参数量显著降低,显存需求减
小,并且在推理阶段不引入额外的计算量,只需要把改变量)放回原模型就不会
有额外的延时。在GPT-3上的实验显示,LORA相比其他的参数高效微调方法,
在参数量增大的情况下收敛性一直比较稳定。
PrefixTuning
运用PrefixTuning方法可以使模型仅学习0.1%的参数就取得和传统微调
相当的效果,并且在少样本任务上效果优于传统微调。将预训练的
Transformer模型参数整体冻结,当输入文本序列的时候,右最前端添加前缀
id,每一个前缀ID都对应一个随机初始化的Embedding,不同的任务则对应不
同的前缀ID,Prefix代表某个对应具体任务的上下文信息。在Prefix Tuning
过程中,模型的其他参数都固定,只微调Prefix的Embedding以及Prefix后
面的全连接层,调整的参数量远小于其他的微调方法。