PEFT:参数高效微调及hg工具

重要术语词汇

LLM 模型: 大型语言模型或 LLM 是一种机器学习模型,可以学习 NLP 任务的文本数据的底层结构和语义。他们通过学习一组代表文本高级概念和特征的潜在变量来做到这一点。从本质上讲,LLM 模型试图捕捉文本的内容,而不仅仅关注使用的单词。
预训练模型:预训练模型是经过大量数据训练以促进特定任务(例如图像分类、语音识别或自然语言处理)的机器学习模型。这些模型已经学习了有效执行任务所需的最佳权重和参数集,以便它们可以用作进一步训练新数据或用于其他应用程序的起点。
参数:参数是模型在训练过程中学习的值/变量,用于对新数据进行预测或分类。参数通常表示为神经网络中的权重和偏差,它们控制输入数据如何转换为输出预测。
迁移学习:迁移学习是指采用为特定任务开发的预训练模型,并将其重新用作新的相关任务的起点。这涉及使用预训练模型的学习特征表示作为新模型的起点,然后在特定于新任务的较小数据集上进行训练。
微调:微调是一种特定类型的迁移学习,其中预训练模型的权重在新的特定于任务的数据集上进行调整或微调。预训练模型用作此过程的起点,但在训练过程中会调整权重以更好地适应新数据。微调的量可能会有所不同,具体取决于可用数据量以及原始任务和新任务之间的相似性。
填充:填充是微调语言模型过程中用于处理可变长度输入序列的常用技术。这是向输入序列添加特殊标记(通常是“填充”标记)以使其达到固定长度的过程。
隐藏表示:隐藏表示是预训练模型层学习的输入数据的内部表示。这些表示捕获输入数据的不同抽象级别,并且可以用作特征来为手头的任务训练新模型。
少样本学习:少样本学习是一种机器学习技术,旨在基于有限数量的标记数据(通常在几十到几百个示例的范围内)训练模型,然后仅用很少甚至是单个标记的示例。少样本学习算法可以通过利用相关任务或领域的先验知识,通过很少的示例来学习识别新的对象、类别或概念。

什么是PEFT?

参数高效微调(PEFT)是自然语言处理(NLP)中使用的一种技术,用于提高预训练语言模型在特定下游任务上的性能。它涉及重用预训练模型的参数并在较小的数据集上对其进行微调,与从头开始训练整个模型相比,这可以节省计算资源和时间。
PEFT 通过冻结预训练模型的某些层并仅微调特定于下游任务的最后几层来实现这种效率。这样,模型就可以以更少的计算开销和更少的标记示例来适应新任务。尽管 PEFT 是一个相对新颖的概念,但自从引入迁移学习以来,更新最后一层模型已经在计算机视觉领域得到实践。即使在 NLP 领域,静态和非静态词嵌入的实验也很早就进行了。
参数高效的微调旨在提高预训练模型(例如 BERT 和 RoBERTa)在各种下游任务(包括情感分析、命名实体识别和问答)上的性能。它在数据和计算资源有限的低资源环境中实现了这一点。它仅修改模型参数的一小部分,并且不太容易出现过度拟合。

微调和参数高效微调有什么区别?

微调和参数高效微调是机器学习中用于提高预训练模型在特定任务上的性能的两种方法。
微调是采用预先训练的模型,并使用新数据进一步训练新任务。整个预训练模型通常经过微调训练,包括其所有层和参数。此过程的计算成本可能很高且耗时,尤其是对于大型模型。
另一方面,参数高效微调是一种微调方法,专注于仅训练预训练模型参数的子集。这种方法涉及识别新任务最重要的参数,并仅在训练期间更新这些参数。这样做,PEFT 可以显着减少微调所需的计算量。

image.png
在计算资源有限或涉及大型预训练模型的情况下,参数高效的微调特别有用。在这种情况下,PEFT 可以提供一种更有效的方法来微调模型,而不会牺牲性能。然而,值得注意的是,PEFT 有时可能会达到与完全微调不同的性能水平,特别是在预训练模型需要进行重大修改才能在新任务上表现良好的情况下。

PEFT 的好处

在这里,我们将讨论 PEFT 相对于传统微调的好处。那么,让我们了解为什么参数高效微调比微调更有利。

  1. 降低计算和存储成本: PEFT 仅涉及微调少量额外模型参数,同时冻结预训练的 LLM 的大部分参数,从而显着降低计算和存储成本。
  2. 克服灾难性遗忘:在 LLM 的全面微调过程中,当模型忘记预训练期间学到的知识时,可能会发生灾难性遗忘。PEFT 只需更新一些参数即可解决这个问题。
  3. 在低数据情况下具有更好的性能: PEFT 方法已被证明在低数据情况下比完全微调表现更好,并且可以更好地推广到域外场景。
  4. **可移植性:**与完全微调的大型检查点相比,PEFT 方法使用户能够获得价值几 MB 的微小检查点。这使得 PEFT 方法训练的权重易于部署并用于多个任务,而无需替换整个模型。
  5. 与完全微调相当的性能: PEFT 只需少量可训练参数即可实现与完全微调相当的性能。

PEFT:标准微调的更好替代方案

标准的微调过程涉及调整Transformer 模型提取的_隐藏表示 (h) ,以增强其在下游任务中的性能。_这些隐藏表示指的是变压器架构提取的任何特征,例如变压器层或自注意力层的输出。

为了说明这一点,假设我们有一个输入句子:“这完全是浪费钱。” 在微调之前,Transformer模型计算句子中每个标记的隐藏表示 (h) 。微调后,模型的参数被更新,更新后的参数将生成一组不同的隐藏表示,用h’表示。因此,即使对于同一个句子,预训练和微调模型生成的隐藏表示也会有所不同。

本质上,微调是修改预训练语言模型的隐藏表示以使它们更适合下游任务的过程。然而,为了实现这一目标,无需微调模型中的所有参数。仅微调一小部分参数通常足以将隐藏表示从 h 更改为h’。

PEFT技术:

包含adapter,lora,Prefix tuning,Prompt tuning

Adapter

Adapter是一种特殊类型的子模块,可以添加到预先训练的语言模型中,以在微调期间修改其隐藏表示。通过在 Transformer 架构中的多头注意力和前馈层之后插入适配器,我们可以在微调期间仅更新适配器中的参数,同时保持模型参数的其余部分冻结。
采用适配器的过程非常简单。所需要做的就是将适配器添加到每个转换器层中,并将分类器层放置在预训练模型的顶部。通过更新适配器和分类器头的参数,我们可以提高预训练模型在特定任务上的性能,而无需更新整个模型。这种方法可以节省时间和计算资源,同时仍然产生令人印象深刻的结果。

使用适配器进行微调是如何进行的?
适配器模块包括与非线性激活层连接的两个前馈投影层。还有一个绕过前馈层的跳跃连接。
如果我们将适配器放置在多头注意力层之后,那么适配器层的输入就是多头注意力层计算的隐藏表示h 。这里,h在适配器层采取了两条不同的路径;一种是跳过连接,使输入保持不变,另一种方式涉及前馈层。

最初,第一个前馈层将h投影到低维空间中。该空间的尺寸小于h。接下来,输入通过非线性激活函数,然后第二个前馈层将其投影回h的维度。将两种方式得到的结果相加得到适配器模块的最终输出。
跳跃连接保留适配器的原始输入 h ,而前馈路径基于原始h生成增量变化,表示为Δh。通过将从前馈层获得的增量变化Δh与前一层的原始 h 相加,适配器修改了由预训练模型计算的隐藏表示。这允许适配器改变预训练模型的隐藏表示,从而改变特定任务的输出。

LoRA

大型语言模型的低秩适应(LoRA)是针对特定任务或领域的模型微调领域的另一种方法。与适配器类似,LoRA 也是一个小型可训练子模块,可以插入到 Transformer 架构中。它涉及冻结预训练的模型权重并将可训练的秩分解矩阵注入到变压器架构的每一层中,从而大大减少下游任务的可训练参数的数量。该方法可以将可训练参数的数量减少多达 10,000 倍,并将 GPU 内存需求减少 3 倍,同时在各种任务上的性能仍与微调模型质量相当或更好。LoRA 还可以实现更高效的任务切换,降低硬件进入门槛,并且与其他方法相比没有额外的推理延迟。

它是如何工作的?
LoRA与预训练Transformer模型中的模块并行插入,特别是与前馈层并行。前馈层具有两个投影层和它们之间的非线性层,其中使用仿射变换将输入向量投影到具有不同维度的输出向量。LoRA 层插入到两个前馈层的旁边。

现在,让我们考虑前馈项目层及其旁边的 LoRA。前馈层的原始参数采用维度为d的前一层模型的输出,并将其投影到d FFW中。这里,FFW是前馈的缩写。旁边的 LoRA 模块由两个前馈层组成。LoRA 的第一个前馈层采用与前馈向上投影层相同的输入,并将其投影到 r 维向量中,该向量远小于d模型。然后,第二前馈层将向量投影到另一个维度为d FFW的向量。最后,将两个向量加在一起形成最终的表示。

正如我们之前讨论的,微调正在改变原始 Transformer 模型计算的隐藏表示h 。因此,在这种情况下,原始变压器的前馈上投影层计算的隐藏表示是h。同时,LoRA计算出的向量是增量变化Δh,用于修改原始h。因此,原始表示和增量变化之和是更新的隐藏表示h’。
通过在前馈层旁边插入 LoRA 模块,并在预训练模型顶部插入分类器头,每个任务的特定于任务的参数都保持在最低限度。

Prefix tuning

Prefix tuning是针对自然语言生成任务微调大型预训练语言模型的轻量级替代方案。微调需要更新和存储每个任务的所有模型参数,考虑到当前模型的规模很大,这可能非常昂贵。前缀调整保持语言模型参数冻结,并优化一个称为前缀的小型连续特定于任务的向量。在前缀调优中,前缀是一组与语言模型一起训练的自由参数。前缀调整的目标是找到一个上下文,引导语言模型生成解决特定任务的文本。

前缀可以被视为后续令牌可以处理的一系列“虚拟令牌”。通过仅学习 0.1% 的参数,前缀调优获得了与完整数据设置中的微调相当的性能,优于低数据设置中的微调,并且可以更好地推断训练期间未见过的主题的示例。

与前面提到的所有 PEFT 技术类似,前缀调整的最终目标是达到h’。前缀调整使用前缀来修改原始预训练语言模型提取的隐藏表示。当增量变化Δh添加到原始隐藏表示h时,我们得到修改后的表示,即h’。
使用前缀调整时,仅更新前缀,而其余层固定不更新。

Prompt tuning

提示调整是另一种 PEFT 技术,用于使预训练的语言模型适应特定的下游任务。与传统的“模型调整”方法不同,提示调整涉及通过反向传播学习软提示,可以通过合并标记的示例来针对特定任务进行微调。即时调整优于 GPT-3 的小样本学习,并且随着模型大小的增加而变得更具竞争力。它还有益于域传输的稳健性并实现高效的提示集成。它需要为每个任务存储一个小的特定于任务的提示,从而更容易为多个下游任务重用单个冻结模型,这与模型调整不同,模型调整需要为每个任务制作整个预训练模型的特定于任务的副本。

它是如何工作的?

提示调整是前缀调整的更简单的变体。其中,一些向量被添加到输入层序列的开头。当出现输入句子时,嵌入层将每个标记转换为其相应的单词嵌入,并且前缀嵌入被添加到标记嵌入序列的前面。接下来,预先训练的 Transformer 层将像 Transformer 模型处理正常序列一样处理嵌入序列。在微调过程中,仅调整前缀嵌入,而变压器模型的其余部分保持冻结且不变。

P-tuning

P-tuning 可以提高自然语言理解 (NLU) 任务中 GPT 等语言模型的性能。传统的微调技术对于 GPT 并不有效,但 P-tuning 使用可训练的连续提示嵌入来提高其性能。该方法已在 LAMA 和 SuperGLUE 两个 NLU 基准上进行了测试,并在精度和世界知识恢复方面显示出显着的改进。P-tuning 还减少了对快速工程的需求,并且在少样本 SuperGLUE 基准测试中优于最先进的方法。

P-tuning 可用于改进各种任务的预训练语言模型,包括句子分类和预测国家首都。该技术涉及使用提示生成的差异输出嵌入来修改预训练语言模型的输入嵌入。可以使用下游损失函数和提示编码器来优化连续提示,这有助于解决离散性和关联性挑战。

少样本上下文学习 (ICL) 与参数高效微调 (PEFT)

少样本上下文学习和参数高效微调是用于训练自然语言处理模型的技术或方法。尽管这两种方法都可以使预训练的语言模型无需大量训练即可执行新任务,但这两种方法所采用的方法在技术上是不同的。第一种方法 ICL 允许模型通过输入提示示例来执行新任务,而无需基于梯度的训练。然而,ICL 会产生大量的计算、内存和存储成本。第二种方法是 PEFT,涉及训练少量添加或选择的参数,以使模型能够以最少的更新执行新任务。

ICL 是一种旨在通过在微调过程中结合上下文信息来提高预训练语言模型的小样本学习性能的方法。这种方法涉及在几次任务中微调预先训练的语言模型,并提供额外的上下文信息作为输入。该上下文信息可以采用附加句子或段落的形式,提供有关当前任务的更多信息。ICL 旨在使用这些上下文信息来增强模型泛化到新任务的能力,即使训练示例有限。

另一方面,参数高效微调是一种旨在通过识别和冻结重要模型参数来提高下游任务上预训练语言模型微调效率的方法。这种方法涉及在少量数据上微调预训练模型,同时冻结一些模型参数以防止过度拟合。通过有选择地冻结某些参数,模型可以保留更多预先训练的知识,从而利用有限的训练数据提高其在下游任务上的性能。

PEFT 比 ICL 更有效吗?

参数化少样本学习 (PFSL) 是自然语言处理应用程序的一项重要任务,其中模型必须快速适应训练示例有限的新任务。近年来,人们提出了各种方法来应对这一挑战,其中 ICL 是最流行的技术之一。然而,2021 年发表的一篇研究论文引入了一种称为参数高效少样本学习的新方法,该方法在准确性方面优于 ICL,同时需要的计算资源显着减少。
PEFT 优于 ICL 的主要原因之一是它使用了一种称为 (IA)^3 的新颖缩放方法,该方法使用学习向量重新缩放内部激活。该技术比仅引入一些额外参数时微调整个模型的效果更好。相比之下,ICL 在少量数据上对整个模型进行微调,这可能会导致过度拟合和准确性下降。
PEFT 优于 ICL 的另一个原因是它使用了两个额外的损失项,这些损失项鼓励模型输出错误选择的较低概率,并考虑不同答案选择的长度。这些损失项有助于模型更好地泛化到新任务并避免过度拟合。
除了其优越的性能之外,参数高效的微调在计算上也比 ICL 更加高效。研究论文发现,与使用 GPT-3 的少量 ICL 相比,PEFT 在推理过程中使用的浮点运算 (FLOP) 少了 1,000 倍以上,并且在单个 NVIDIA A100 GPU 上训练仅需 30 分钟。这使得 PEFT 成为现实世界 NLP 应用的更实用和可扩展的解决方案。
总体而言,PEFT 的引入代表了 NLP 应用的小样本学习领域的重大进步。它使用 (IA)^3 缩放、附加损失项和卓越的计算效率,使其成为需要快速适应新的少样本学习场景的任务的 ICL 更好的替代方案。

HG工具箱:

image.png

参考:

https://blog.csdn.net/sikh_0529/article/details/131770276

https://blog.csdn.net/TimVan1596/article/details/132364217

在实战操作中,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、付费专栏及课程。

余额充值