大模型高效微调(PEFT)方法大全

据报道,截止10月份国内已经发布了238个大模型,而6月份的时候才79个。这个数字除了说明目前大模型的狂热,有点上个世纪大炼钢的感觉,砸锅卖铁都要把模型训练起来,但同时,数量多了,质量肯定参差不齐,绝大多数模型将是昙花一现,世界不需要这么多大模型,所谓潮水褪去才知道谁在裸游。

大模型有两个方向,一是通用大模型,二是垂直领域大模型,比如法律、医疗领域,后者可能是个伪命题,通常我们说大模型,希望这个模型在多个领域都能工作,否则充其量就是在一个具体领域的参数稍大点的模型。不管在哪个方向,经过竞争淘汰后,只能剩下前几家优秀的。对于大多数人或公司,没有足够的财力(数据、GPU、人才)从头开始训练大模型,基于已有的大模型作为基座,用自身业务相关的数据进行微调(finetune),是一个很好的选择。

微调也有两种方法,一是模型全部参数的微调,二是少量参数高效的微调。前者由于参数多,需要的GPU多,并且全参数微调可能把模型带偏,后者只需要微调少量参数,需要的GPU少,还可能达到不错的效果,成为大家研究的重点,取了个专有名词Parameter-Efficient Fine-Tuning,简称PEFT,即高效参数微调。

本文学习和总结了从2019年以来主要的PEFT方法,主要参考了综述论文《Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning》,文中对微调方法进行了分类,对每个类别列举了最有代表性的方法,我也分别拜读了这些代表性方法的论文,尽量做一个精简的描述。

先画重点说一下,目前最流行的微调方法应该是LoRA,后面会详细介绍。

1

PEFT分类

图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类:混合了多种类别的方法。

2

PEFT方法效率统计

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

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

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

3

具体 方法具体介绍

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

3.1 Additive类:Adapters

3.1.1 Adapters

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

图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%

图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,但加的是向量,让这些向量自行训练,不用人为去构造各种模板。

图4. Prefix-Tuning原理

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

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

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

用伪代码表示就是:

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

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

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

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

表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加到模型的输入,作者研究表明只加到输入层效果就不错了,不必加到中间层。

图7. Prompt Tuning

伪代码如下:

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

图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的计算:

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

然后做Layer-Norm:

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

表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等模型上微调,不仅速度快而且效果好。

图9. LoRA原理

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

其中,是预训练模型的权重,微调时保持不变,是微调时要学习的权重,可以分解为两个低维(低秩)的矩阵B和A,维度关系为:

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

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

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

  • 和Adapters比,增加的参数和基座模型计算是并行的,不像Adapters是在网络中加了串行的层,所以推理时没有增加额外的延迟。在生产环境部署时,可以先计算好,W的维度没有变化,推理时和原来基座模型计算开始是一样的。对不同的任务,替换对应的即可,也很方便。

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

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

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

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

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

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

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

3.4.2 其他方法

KronA:和LoRA比,使用Kronecker内积分解矩阵,,内积定义如下:

3.5 Hybrid类

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

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

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

4

最后

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

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值