大模型内容分享(十一):大模型高效微调(PEFT)方法大全

目录

PEFT分类

PEFT方法效率统计

具体方法具体介绍

3.1 Additive类:Adapters

3.2 Additive类:Soft Prompts

3.3 Selective类

3.4 Reparametrization-based类

3.5 Hybrid类

最后


PEFT分类

 

4ca394530382c20146f22661bb34d060.png

                                                        图1. PEFT分类

如上图1,按是否增加了额外参数,PEFT主要分为:

  • Additive类:在预训练模型基础上增加额外的参数或者网络层,微调训练的时候只训练这些新增的参数或层,包含两个子类:

1)Adapter--在Transformer子层后加入小的全连接层,微调只学习新加的全连接层参数。

2)Soft Prompts--常见的Prompts方法是在输入中构造Prompts模板,如何构造是一门学问,Soft Prompts直接在输入的embedding中加向量作为soft prompts,并对这些向量的参数进行微调,避免构造Prompts模板。

  • Selective类:选择模型中的部分层比如最后几层、或偏置项进行微调。

  • Reparametrization-based类:利用低秩表征(low-rank representations)来最小化可训练的参数,本质上就是认为大量的参数中,仅仅一部分起到关键作用,在这个起关键作用的子空间中去寻找参数进行微调。

  • Hybrid类:混合了多种类别的方法。

PEFT方法效率统计

参数效率(Parameter Efficiency,PE)从广泛的概念讲,包括存储、内存、计算和性能的效率,其中计算效率主要包括微调时反向传播的计算和推理的计算效率。下面是对已收集的方法(论文)从这几个维度进行的统计:

 

7f260f87913e8a4bcc1ac6c6c35c665b.png

                                                                表1. 各种方法的效率统计  

其中,Type表示该方法属于Additive、Selective、Reparametrization-based哪一类,Storage、Memroy表示该方法和全部参数微调比较是否节约了存储、内存。Backprop表示是否减小了反向传播计算开销,Inference overhead表示推理时是否增加了开销,比如常见的增加了全连接层。

具体方法具体介绍

按Additive、Selective、Reparametrization-based分类介绍,主要方法会介绍细节,其余方法一句话概括。

3.1 Additive类:Adapters

3.1.1 Adapters

论文《Parameter-Efficient Transfer Learning for NLP》,2019年

 

ebe2e3aa8f0950e3649183bdbc72364f.png

                                                图2. Adapter结构

结构简洁明了,在Transformer的前馈层后加入上图中右边所示的Adapter层,Adapter是一个bottleneck结构,先把d维特征映射为m维,然后通过一个非线性层,最后映射回d维特征,m<<d,即m远小于d,Adapter包括偏置项的参数量为2md+m+d,由于m很小,起到了限制参数量的作用。模型微调的时候,学习的参数包含上图绿色部分,除了Adapter,还有Transformer本身的Layer Norm层。

Adapters微调训练的参数量、全模型微调参数量和准确率关系如下图。总体上,在BERT Large模型上用0.5-5%的参数微调,基本达到全参数微调性能,差距仅1%以内。在GLUE上,用3.6%的参数微调和全参数微调性能差距仅0.4%

 

70737ffcb853f7909c9ae1c6db1083e3.png

                                                        图3. Adapters微调参数和性能关系

3.1.2 其他方法

AdaMix:使用 mixture-of-experts(MoE)思路,对多个adapters采用模型选择具体的expert adapter。

3.2 Additive类:Soft Prompts

3.2.1 Prefix-Tuning

论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》,2021年

一般的Prompts需要根据任务构造Prompt模板,同一任务不同的Prompts模板可能导致模型性能差别很大,Prefix-Tuning在模型的输入里直接加上前缀向量进行微调,功能类似加Prompts,但加的是向量,让这些向量自行训练,不用人为去构造各种模板。

 

078956f0d9ce09b9116dd9f58693f222.png

                                                                图4. Prefix-Tuning原理

图4中上面部分是以Transformer结构为例全参数微调的情况,下面部分是Prefix-Tuning的方法,在每层的开头加了Prefix向量,微调只训练这部分对应的参数,其余Transformer固有的参数冻结不变。

 

35c36ae9dac542c833fac21ff4b11deb.png

                                                图5. Prefix-Tuning添加Prefix的方法

借用稀土掘金社区文章的图5更进一步说明了每层添加Prefix的方法,同一个source经过MLP全连接网络得到Prefix加入每一Transformer block。

用伪代码表示就是:

 

b182da4f1965fb4a196fe75574ee26ad.png

 

9a4490040e0aee77e1cc6ec0aa41bec5.png

                        图6. 自回归和Encoder-Decoder结构的Prefix-Tuning例子

图6 是典型的自回归和Encoder-Decoder结构上进行Prefix-Tuning的方法示例。自回归在开头加上Prefix,输出就是正常的输出,Encoder-Decoder在输入加上Prefix,输出有对应的内容。

微调训练过程中模型原有的损失函数定义不变,不同的任务训练其特有的Prefix,推理时用自己训练得到的Prefix。

作者实验了只在输入的embedding层加入Prefix,性能下降明显。

 

5014663651155d77bcd67c0408727eed.png

                                                表2. Prefix-Tuning实验结果

表2是Prefix-Tuning在不同任务上微调0.1%参数的效果,和Adapters方法进行比较,同等训练0.1%参数量的情况下,普遍优于Adapters。

总体上,只用微调占模型0.1%的参数,就能得到和全参数微调的媲美的效果。

3.2.2 Prompt Tuning

论文《The Power of Scale for Parameter-Efficient Prompt Tuning》,2021年

一句话概括的话就是上面讲的Prefix-Tuning的简化版,碰巧和Prefix-Tuning同时做的工作,只把soft prompts加到模型的输入,作者研究表明只加到输入层效果就不错了,不必加到中间层。

 

3c04aaa297216656a3a5aae7645dcc94.png

                                                图7. Prompt Tuning

伪代码如下:

 

2f87a2a7afa43631f1ea32abb30f65af.png

Prompt Tuning是以把各种任务都归纳到text-to-text的T5模型基础上研究的,文章花了很多功夫比较soft prompts的不同初始化方法、不同的prompt长度、不同的预训练方法、不同的LM adaption步数。LM adaption指的是在T5模型上用自监督方法继续训练额外的少量步数。 比较结果如图8。

 

f5f9dbe67e4a7e86e5fb04bc92fab064.png

                                                图8. 不同因素对结果的影响

文章还探索了Prompt Ensembling,Ensembling是机器学习里常用的一个方法,即把多个方法集成在一起,可是使用投票、算平均值等多种方式使用各个方法的结果。即图7所示,同一batch里同时训练多个任务,不同任务当然是用其自身的prompt,但即使是同一个任务,也使用多个prompts。预测的时候用简单的投票方式选prompt,实验表明Ensembling方法好于单个prompt的平均性能,好于或者持平单个prompt的最好性能。

3.2.3 其他方法

Intrinsic Prompt Tuning (IPT):用自编码器压缩和解压soft prompts。

3.3 Selective类

3.3.1 BitFit

论文《BitFit: Simple Parameter-efficient Fine-tuning for Transformer-based Masked Language-models》,2022年

BitFit十分简洁明了,在Transformer结构中只微调所有偏置项bias参数。

具体而言,Transformer过程如下,先是Q、K、V的计算:

 

53f98d837ec2d7289cf2d939274363b4.png

然后根据Q、K、V计算attention:

 

a77c5253342f5f37e3751010c23e2c76.png

然后做Layer-Norm:

 

290798461fd4670406dfaf263e381915.png

上面的红色部分就是所有的bias项,只选择(Selective)这些bias项参数进行微调。

 

12fafea31b870955a4b871c6c0802c10.png

表3. BitFit性能对比

表3显示GLUE上基于BERT Large基座模型,BitFit和全参数训练、Adapters、Diff-Prune(另一个selective方法)性能比较,部分任务上能达到最优。另外,在BERT Base和RoBERT Base上也是同样的趋势。

3.3.2 其他方法

DiffPruning:模型微调的时候学习参数的掩码mask。

3.4 Reparametrization-based类

3.4.1 LoRA

论文《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》,2021年

重点来了,LoRA可能是目前最流行的PEFT方法,受欢迎必须要效果好,而且好懂易用!效果好体现在论文直接在流行的RoBERTa、DeBERTa、GPT-2、GPT-3模型上实验显示微调性能优于或持平全参微调,GPT-3 175B模型参数够大,给大家提前趟水吃个定心丸。后续大家陆续在LLaMA等模型上微调,不仅速度快而且效果好。

 

de2a04e4153dafe503a22ec9f76d6c09.png

                                                                图9. LoRA原理

LoRA的想法很巧妙,如图9,对一个预训练的模型有h=Wx,其中x为输入,W为预训练权重,h为输出。LoRA认为,如果要在特定任务上进行微调,也就是要改变模型的参数权重W,这个改变的部分

79c48843e29bae1912bed844b0ac36c6.png

本质上可以压缩到一个很小的子空间,有:

 

b24aa3b30b1c063f35eb0d1d5d1b0272.png

其中,

9d6a763e241f78218d728f759a47d950.png

是预训练模型的权重,微调时保持不变,

79c48843e29bae1912bed844b0ac36c6.png

是微调时要学习的权重,可以分解为两个低维(低秩)的矩阵B和A,维度关系为:

 

f933f4fb74b1cf12d6b6b25182cfbf26.png

06b670272181f949a2a4ab00fcac9342.png

这也是论文为啥叫Low Rank的原因,一般情况下r<<min(d,k)。用深度学习的思路,我们不会真正通过矩阵分解得到矩阵B和A,而是通过数据驱动,用梯度下降反向传播方法计算得到。论文使用随机高斯分布初始化A,B初始化为0,对不同大小的r做了实验对比。

LoRA和之前主要方法比较的优势:

  • 和Prefix-Tuning比,由于不用在输入上加额外的prompts,能支持更长的输入;

  • 和Adapters比,增加的参数和基座模型计算是并行的,不像Adapters是在网络中加了串行的层,所以推理时没有增加额外的延迟。在生产环境部署时,可以先计算好

    aa849266fd7cc266836ea401a4aa7937.png

    ,W的维度没有变化,推理时和原来基座模型计算开始是一样的。对不同的任务,替换对应的

    b02786d748f50db0aff17f5e5ab25470.png

    即可,也很方便。

     

LoRA应用到Transformer时,只尝试了对计算注意力机制和MLP中的权重进行微调。论文对RoBERTa、DeBERTa、GPT-2、GPT-3都做了实验对比,这里我们只列出最大的GPT-3看看:

 

c87c2db39364ee51111004d1f83e8235.png

表4. GPT-3上不同方法微调参数、性能数据对比

 

00ed5464a2d51dd99248f0131a96cc0a.png

图10. GPT-3上不同方法微调参数、性能可视化对比

一句话总结,就是不仅微调参数小,而且性能还好。

对Transformer不同权重、不同r的情况对比结果如下,说明微调的权重越多越好,但r并不是越大越好。

 

18e867a16cbae25ef52ca5f7d519dc35.png

表5. Transformer上微调不同权重、不同r值的性能比较

最后说一句,LoRA也有劣势,就是不能在同一个batch里训练多个任务的A和B。

3.4.2 其他方法

KronA:和LoRA比,使用Kronecker内积分解矩阵,

dcd9e33eeb9c4396a98d95e86f8af7d5.png

,内积定义如下:

 

06a579288431b2a485f6e4ad08eb19a6.png

3.5 Hybrid类

只简略说一下主要方法都混合使用了哪些方法。

MAM Adapters:联合了并行的adapters和soft prompts,伪代码如下:

 

85a7c2343440db20c529f23940590764.png

UniPELT:联合了LoRa, Prefix-tuning, and Adapters.

最后

PEFT目前总体就这些了,我还对LoRA最近业界使用的情况、大家总结的经验、通过Huggingface使用PEFT等感兴趣,后续继续学习和实践。

 

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在实战操作中,PEFT库可以用来微调BERT模型,以进行文本情感分类任务。首先,我们需要准备一个包含大量文本和标签的数据集,用于训练和验证BERT模型。然后,我们需要利用PEFT库中提供的工具和接口,将数据集转换成BERT模型可接受的格式,并进行数据预处理,如分词和填充等操作。 接着,我们可以利用PEFT库中提供的预训练模型,加载BERT模型的参数和网络结构,并在数据集上进行微调微调的过程中,我们可以通过调整学习率、批大小和训练轮数等超参数,来优化模型的性能。在每个训练轮数结束后,我们可以利用PEFT库中的评估工具对模型进行评估,以了解模型在验证集上的性能表现。 最后,当模型在验证集上的性能达到满意的水平后,我们可以使用PEFT库提供的保存模型工具,将微调后的BERT模型保存下来,以备在实际应用中使用。通过PEFT库的实战操作,我们可以有效地利用BERT模型进行文本情感分类任务,提高模型的准确性和泛化能力,从而更好地满足实际应用的需求。 PEFT库的实战操作不仅帮助我们更好地理解和使用BERT模型,也为我们提供了一套完整的工具和流程,使得模型训练和应用变得更加简单和高效。 PEFT库实战(一): lora微调BERT(文本情感分类) 的操作流程清晰,易于上手,为我们在文本情感分类任务中的应用提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值