微调、训练大模型概念介绍及论文笔记:Tuning系列论文笔记
AI魔法学院
2023-07-12
分享海报

Tuning整体介绍

微调(Fine-tunning)

语言模型的参数需要一起参与梯度更新

轻量微调(lightweight fine-tunning)

冻结了大部分预训练参数,仅添加任务层,语言模型层参数不变

适配器微调 (Adapter-tunning)

Adapter在预训练模型每层中插入用于下游任务的参数,在微调时将模型主体冻结,仅训练特定于任务的参数,减少训练时算力开销

提示学习(Prompting)

任务输入前添加一个自然语言任务指令和一些示例,直接在预训练语言模型中统一建模,比如GPT2/GPT3

前缀微调(Prefix-tuning)

将prompt方式扩展到连续空间,在每层输入序列前面添加prompt连续向量【随机初始化,并不对应到具体的token】目前是将语言模型freeze后,仅微调prompt参数,在实验中是增加了一个MLP重参数化,确保效果,使用MLP后的结果做预测

提示微调(Prompt-tuning)

将prompt扩展到扩展到连续空间,但是仅在输入层加入prompt连续向量,且不固定,同时使用LSTM建模prompt向量之间的关联性

【P-tuning与Prefix-tuning】:

  • Prefix-tuning仅针对NLG任务生效,服务于GPT架构;P-tuning考虑所有类型的语言模型
  • Prefix-tuning限定了在输入前面添加,P-tuning则可以在任意位置添加
  • Prefix-tuning为了保证效果在每一层都添加,但p-tuning可以只在输入层添加

【P-tuning与fine-tuning】

P-tuning不改变预训练阶段模型参数,而是通过微调寻找更好的连续prompt提示,来引导已学习到的知识的使用;Fine-tuning可能在调整模型参数过程中,可能带来了灾难性遗忘问题

提示微调v2(Prompt-tuning)

在第一版基础上,将每层输入都添加上prompt连续向量,同时探索了prompt长度在不同规模的模型上的效果;去掉MLP层重参数化

指令微调(Instruct-tuning)

指令微调是会直接通过自然语言形式给出人类指令,是基于一组NLP任务集合上直接tuning的过程,它可以提高语言模型在未知任务上的效果,即zero-shot learning能力

【instruct-tuning 与 prompt-tuning】

  • 提示微调:"我带女朋友去桂林旅游" 的英文翻译是___
  • 指令微调:翻译这句话:输入:我带女朋友去桂林旅游,输出:_______

二者目的都是挖掘语言模型本身已掌握的知识,prompt是激发语言模型补全能力,是针对某特定任务而言,不同的任务需要给出不同的表达形式;instruct则是激发语言模型的理解能力,是针对任务集合而形成的指令,它能通过理解做什么任务,在未可见任务上泛化能力更强【zero-shot learning】

指令提示微调(Instruction Prompt tuning)

语境提示微调是指结合LLM的ICL能力和prompt-tuning结合到指令提示微调中,将检索到的上下文演示示例和可微调的prompt嵌入式表征进行拼接,能够让LLM在医学领域方面获得不错的应用效果

Large Language Models Encode Clinical Knowledge

指令提示微调 IPT的建模示意图

Lora微调

  • 前人研究发现模型是过参数化的,存在更小的内在维度,可以低秩分解的
  • 固定预训练语言模型的参数,额外增加新的参数,增加低秩分解的矩阵可以适配下游任务h=W0x+&#x0394;Wx=W0x+BAx,B&#x2192;(d,r),A&#x2192;(r,k),r&lt;&lt;mind(d,k)" role="presentation" style="display: inline-block; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;">=0+Δ=0+,(,),(,),<<(,)
  • 效果:训练参数量显著降低,显存需求减少(GPT-3 模型上能够把参数量降低到普通fine-tune的万分之一)
  • 相比Adapters, LoRA不增加推理延迟

Prefix-Tuning

Prefix-Tuning: Optimizing Continuous Prompts for Generation

Prefix-tunning 前缀学习将prompting扩展到连续空间,无需one-hot查找,而是初始化为一组自由参数,然后进行优化 -> 主要针对NLG任务

论文核心点

其实就是类似于GPT2的方式,在输入前面【固定位置】添加一个任务名的位置向量,在接入下游任务时候,freeze其他部分的参数,训练该位置向量即可

1 评估的任务

  • table-to-text任务:语言模型GPT-2
  • 摘要任务:BART模型
  • GPT类的自回归模型上采用[PREFIX, x, y],
  • T5类的encoder-decoder模型上采用[PREFIX, x, PREFIX', y]

2 模型细节

  • 把预训练大模型freeze住,因为大模型参数量大,精调起来效率低,毕竟prompt的出现就是要解决大模型少样本的适配
  • 作者发现直接优化Prompt参数不太稳定,加了个更大的MLP,训练完只保存MLP变换后的参数就行了
  • 实验证实只加到embedding上的效果不太好,因此作者在每层都加了prompt的参数,改动较大,可能起到了类似残差的效果

Prompt Tuning

The Power of Scale for Parameter-Efficient Prompt Tuning

论文核心内容

1 设计一种前缀prompt方法,在输入词嵌入之前添加前缀prompt,区别于人工prompt方式,其输入的前缀可以不token化, 神经网络直接表征

2 在微调的时候,固定上游模型的参数,只微调prompt的参数,相当于对每一个下游任务,只需要额外训练一个独立的prompt参数即可

对比实验

  • prompt长度实验:越长的prompt能带来越好的效果,但模型规模足够大,长度影响就很小 【可能是因为越长的prompt对应越长的参数表达空间,效果自然会变好,但模型规模足够大,则这部分的参数占比可能就不明显】
  • prompt初始化策略:随机初始化 < 最长词汇初始化 < 标签字符串初始化,但是模型规模变大后,则初始化策略也无关重要【整体上就是大力出奇迹,几乎可以忽略所有的超参数细节】
  • Domain-shit跨域实验,prompt方法会比微调模型效果更优泛化效果,尤其域间数据差异越大,效果越明显【这主要反映的是prompt方式在下游任务使用中通用性更强,调整下游任务时候,损失的语言模型本身能力较小】

点评

这篇论文主要是针对T5模型为backbone,提出prompt微调方式训练下游任务 ;与prefix-tuning相比,主要是实验的模型架构不同,并设计了多重对比实验,探索了不同初始化方式,不同prompt对语言模型微调的影响,最终整体的结论:

随着模型规模变大,prompt的初始化和长度对效果影响很小,鲁棒性和泛化能力也有比较好的提升 整体论文没啥创新点,主要实验多

P-tuning

GPT Understands, Too

Motivation

1 GPT系列AR建模在自然语言理解NLU任务上效果不好,与BERT双向语言模型相比有明显差距

2 之前的研究表明GPT3使用prompt训练方式可以显著提升few-shot 和 zero-shot的效果

3 传统的prompt方法存在明显缺陷:

  • 人工制定prompt模板, 需要大量的验证集校验
  • 神经网络本身就是连续型建模,离散的prompts始终都只能是局部最优解

Experiment

  • LAMA:固定模型参数后,GPT能够提升26.2%~41.1%
  • SuperGLUE:GPT模型比BERT模型效果要好

Conclusion

  • GPT在自然语言理解任务上也可以达到与BERT相似的效果,这说明GPT在自然语言理解方向是存在潜力,这种AR单向语言模型架构在NLU和NLG任务都有效,是自然语言建模可以统一的框架[chatGPT的效果足以说明GPT在语义理解层面的确是有能力的]
  • 将本文的P-tuning方法应用到BERT模型架构,也使其在few-shot任务上有明显效果提升

P-tuning v2

P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks

背景

1 在NLU场景下,prompt tuning方法目前在常规尺寸的预训练语言模型上应用效果不佳【across scales

2 prompt tuning方法很难处理比较难的序列标注任务,缺乏普适性【across tasks

论文核心点

1 Deep Prompt Encoding:采用 Prefix-tuning 的做法,在输入前面的每层加入可微调的参数。

2 None-reparameterization:对pseudo token,不再增加其他网络结构进行表征(如用于 prefix-tuning 的 MLP),且不再替换pre-trained model word embedding,取而代之的是直接对pseudo token对应的深层模型的参数进行微调。

3 Multi-task learning:对于pseudo token的continuous prompt,随机初始化比较难以优化,因此采用multi-task方法同时训练多个数据集,prefix continuous prompt共享。

4 在[CLS]部分输出sentence-level class,以及每个token位置上输出token-level class,可以解决一些没有语义标签的问题。

论文其实就是借鉴了prefix-tuning的方式,在每层都添加了prompts提升在不同规模,不同类型的任务上的普适性效果

Instruct-tuning

Fine-tuned Language Models Are Zero-Shot Learners

论文核心点

针对prompt学习方式的zero-shot learning 效果差,这篇论文提出了一个指令学习的概念,基于一组NLP任务提炼出来一种形如指令的自然语言,可以激发语言模型对任务的理解能力,通过直接在不同的任务上进行instruct-tuning,可以在任务层面有更强的泛化能力,zero-shot learning场景下能有显著的任务提升

【常识推理等多个任务上instruct-tuning】-&gt; 【自然语言推理】泛化
Fine-tune, 提示学习,指令微调的区别

消融实验中,在instruction-tuning中增加任务数量可以提高未知任务上的效果,而且指令学习的增益仅仅在足够大的模型规模上才会出现【模型规模足够大的时候,语言理解能力才足够强】

Instruction Prompt-tuning

How Does In-Context Learning Help Prompt Tuning?

这篇研究主要针对“指令提示调整”(IPT)方法进行拆解,分析语境学习在prompt-tuning上是如何工作的,在五项任务实验中整体观察到的结论:

  • PT和IPT的效果在5个任务中始终优于ICL, 这说明域外任务至少需要少量参数的训练
  • PT和IPT的性能并没有绝对优劣,性能很大程度上取决于任务和实验配置,比如可调嵌入的数量。IPT如果演示示例在语义上与测试输入相似度较高,会带来PT效果提升
  • PT方法不稳定,方差高,但是与ICL结合使用后,可以降低方差,比PT更少依赖于可调嵌入的数量
  • 通过PT方式在特定任务上学到的prompt效果,当结合语境学习后,可以迁移到其他任务上,并且这种迁移效果比直接在ICL演示中结合源任务和目标任务的演示示例的方法效果还要好

数据集

  • data-to-text generation: DART, ToTTo, 输出短句子,评估指标为BLEU
  • semantic parsing: Spider, MTOP, 评估指标Exact-Match Acc
  • logic-to-text generation: Logic2Text, 评估指标BLEC

语言模型

这里论文还提出使用In-context demonstration retrieval选择最佳的演示示例,具体使用了FASIS工具

实验结果

这里贴部分主要的实验结果

  • PT和IPT的效果在5个任务中始终优于ICL, 但IPT和PT的性能没有绝对优劣
  • 单独的PT方法直接迁移到其他任务效果效果不是很高,但是增加ICLS示例后,迁移效果显著提升
  • 在检索到的上下文演示的输入与测试输入非常相似的示例中,IPT 比 PT 表现更好

Lora-Adapters

LoRA: Low-Rank Adaptation of Large Language Models

核心内容

  • 灵感:前人一些 intrinsic dimension(固有维度),模型是过参数化的,存在更小的内在维度,可以低秩分解
  • 思路:固定预训练语言模型的参数,额外增加新的参数,增加低秩分解的矩阵来适配下游任务h=W0x+&#x0394;Wx=W0x+BAx,B&#x2192;(d,r),A&#x2192;(r,k),r&lt;&lt;mind(d,k)" role="presentation" style="display: inline-block; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;">=0+Δ=0+,(,),(,),<<(,)
  • 效果:训练参数量显著降低,显存需求减少(GPT-3 模型上能够把参数量降低到普通fine-tune的万分之一)
  • 相比Adapters, LoRA不增加推理延迟
LoRA 和 大模型共享相同的输入,并行计算MLP,将两个并行的结果想加作为输出
B是全0初始化的,LoRA的右路的结果会接近0, 微调的初始状态和原模型保持一致
在多个attention的矩阵上分别放置低秩一点的LoRA效果好 比 在其中一个矩阵上放一个更高秩的矩阵 更好
将秩设置到和原来的参数矩阵维度一样大,则和全参数微调没区别,一般秩=8微调性能已经接近全微调效果;对于预训练阶段和下游任务差异较大时,继续增加秩的大小仍然可以提高性能

PEFT

Towards a Unified View of Parameter-Efficient Transfer Learning

论文主要针对目前三类SOTA的参数微调策略进行拆解,提出一种统一的参数高效迁移学习框架,并从四个维度(∆h的函数计算,微调参数插入形式,隐层表征修改,h和△h函数组合方式)对方法进行拆解和分析,并由此提出了一些新的变体,通过对比实验验证了一些设计会更优,论文设计的最优变体MAM adapter(Mix-And-Match adapter)在仅用了6.7%参数量的情况下,在Xsum和MT这两个task上达到了和full fine-tuning相近的效果

核心思路

固定住Pretrain Language model的大部分参数,仅调整模型的一小部分参数来达到与Full fine-tuning接近的效果(调整的可以是模型自有的参数,也可以是额外加入的一些参数)

具体内容

对prefix-tuning, lora 和 adapters进行公式分解,本质都是对原本的h进行了修改,不同的是Adapters是串行的,Prefix Turing 和LoRA 是并行的

三种微调模式的对比

实验设计

从四个维度对已有的方法进行总结,并以此提出新的变体,设计了相关的实验进行效果验证

  • Functional Form : 计算∆h的函数
  • Insertion Form:插入形式,并行还是串行
  • Modified Representation:待修改的隐层表示
  • Composition Function:组合函数,h和△h怎么组合在一起,直接相加还是门控相加

实验结论

1 Prefix tuning 只作用于attention
2 Adapter 既可以作用于attention 又可以作用于FFN
3 LoRA作用于attention , 也可以作用于FFN
4 所有方法作用于FFN比所用方法attention表现更优。
5 Prefix tuning 只能作用于attention head ,相比Adapter 和 LoRA有天然的弊端。
6 并行的结果要优于串行的结果

最优化的设计 Mix-And-Match adapter (MAM Adapter).

  • Insertion Form:采取并行结构的Adapter并且设计成multi-head的形式;
  • Modified Representation:将0.1%的参数分配到multi-head结构的attn上面,其余的参数量配置在ffn上
  • Composition: 采用LoRA的设计方式,加一个超参数s
实验结果:MAM adapter在仅用了6.7%参数量的情况下,在Xsum和MT这两个task上达到了和full fine-tuning相近的效果
Comparison of various parameter-efficient tuning methods and the proposed variants
注意:self-attention的模型参数是对q, k, v进行线性变换的映射矩阵 以及 输出变换的映射矩阵 WQ(dmodel&#x2217;dq),WK(dmodel&#x2217;dk),WV(dmodel&#x2217;dv),WO(dv&#x2217;dmodel)" role="presentation" style="display: inline-block; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;">(),(),(),() q, k, v是输入数据,在微调过程中仅改变输入的序列长度并不会改变权重矩阵

推荐材料

Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning

© THE END

转载请联系本网站获得授权

投稿或版权问题请加微信:skillupvip