LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解优缺点对比[P-tuning、Lora、Prefix tuning等]

LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuning等]

由于LLM参数量都是在亿级以上,少则数十亿,多则数千亿。当我们想在用特定领域的数据微调模型时,如果想要full-tuning所有模型参数,看着是不太实际,一来需要相当多的硬件设备(GPU),二来需要相当长的训练时间。因此,我们可以选择一条捷径,不需要微调LLM的全量参数,而只需要新增少量的参数,通过固定原始模型参数,而只需要微调新增的少量参数,从而达到接近使用全参数full-tuning的效果。本章主要讲述在LLM时代,当下主流的微调方法。

1.Adapter tuning(2019)

(1) 论文信息

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

摘要内容:微调大型预训练模型在自然语言处理中是一种有效的迁移学习机制。然而,在存在许多下游任务的情况下,微调显得参数效率低下:因为每个任务都需要一个全新的模型。作为替代方案,我们提出了带有适配器模块的迁移学习方法。适配器模块能够生成一个紧凑且可扩展的模型;它们仅为每个任务增加少量可训练参数,并且可以在不重新访问先前任务的情况下添加新任务。原始网络的参数保持不变,从而实现了高度的参数共享。

为了展示适配器的有效性,我们将最近提出的BERT Transformer模型迁移到了26个不同的文本分类任务中,包括GLUE基准测试。适配器在仅为每个任务增加少量参数的情况下,达到了接近最先进性能的水平。在GLUE基准测试中,我们在仅为每个任务增加3.6%参数的情况下,实现了与完整微调性能相差不到0.4%的结果。相比之下,微调则需要对每个任务的100%参数进行训练。

(2) 思路

  • 固定Transformer的全部参数
  • 在Transformer的每一个Block里嵌入一些新初始化的Adapter Network。
    • 其中Adapter由两层MLP组成,分别负责将Transformer的表征降维和升维

(3) 优势

  • 只需要添加不到5%的可训练参数,即可以几乎达到全参数训练的效果
  • 在训练过程中大大节省了训练时间,做到时间有效性。
  • 基本不降低模型在下游任务中的表现

2.Prefix tuning(2021)

(1) 论文信息

来自论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》

摘要内容:微调是实际上利用大型预训练语言模型执行下游任务的首选方法。然而,这种方法会修改所有语言模型的参数,因此必须为每个任务存储完整的副本。在本文中,我们提出了前缀微调(prefix-tuning),这是一种针对自然语言生成任务的轻量级微调替代方案。该方法保持语言模型参数不变,但优化了一个小的、连续的任务特定向量(称为前缀)。前缀微调受到提示机制的启发,允许后续标记关注这个前缀,就像它们是“虚拟标记”一样。我们将前缀微调应用于GPT-2进行表格到文本的生成,以及应用于BART进行文本摘要。我们发现,通过仅学习0.1%的参数,前缀微调在全数据设置下取得了与微调相当的性能,在低数据设置下超越了微调,并且更好地推广到了训练过程中未见过的主题示例。

(2) 思路

固定预训练参数,为每一个任务额外添加一个或多个embedding,且利用多层感知编码prefix。不再像prompt tuning继续输入LLM。

(3) 结构

在seq前面加idx个虚拟token,以此构造一个连续的token,作为微调参数(结构一样是transformer)

固定LLM的参数

由于发现直接加prefix层,模型不稳定,故在其后加了MLP层,用于reparametrization参数 P θ P_θ Pθ
P θ [ i : ] = M L P θ ( P θ ′ [ i , : ] ) P_θ[i:]=MLP_θ(P'_θ[i,:]) Pθ[i:]=MLPθ(Pθ[i,:])

原始 P θ P_θ Pθ维度为$ \mid P_{idx} \mid \times dim(h_{i}) , , P’θ 维度为 维度为 维度为 \mid P{idx}\mid \times k ,经过 ,经过 ,经过MLP$复原原始维度。

针对不同任务,有不同最优的k值,经过实验,作者建议

  • Table-to-table任务,k=512
  • Summarization任务,k=800

(4) 优势

  • 在Table2Text任务上,只有0.1%参数量级的prompt tuning效果要优于微调

(5) 缺点

  • 摘要任务上,prompt的效果要略差于微调

3.Prompt tuning(2021)

(1) 论文信息

来自论文《The Power of Scale for Parameter-Efficient Prompt Tuning》

  • 摘要:
    在这项工作中,我们探索了“提示微调”(prompt tuning),这是一种简单而有效的机制,用于学习“软提示”来条件化冻结的语言模型以执行特定的下游任务。与GPT-3使用的离散文本提示不同,软提示是通过反向传播学习的,并且可以根据任意数量的标记示例进行调整。我们的端到端学习方法在性能上大幅超越了GPT-3的少量样本学习。

更值得一提的是,通过使用T5模型进行模型大小的消融实验,我们展示了提示微调随着规模的增加变得更加具有竞争力:当模型参数超过数十亿时,我们的方法“缩小了差距”并达到了模型微调(即调整所有模型权重)的强大性能。这一发现尤为重要,因为大型模型的共享和部署成本高昂,而能够重用一个冻结的模型来执行多个下游任务可以减轻这一负担。

我们的方法可以看作是最近提出的Li和Liang(2021)的“前缀微调”方法的简化版本,我们提供了与此方法以及其他类似方法的比较。最后,我们展示了使用软提示条件化冻结模型在提高域迁移鲁棒性和实现高效“提示集成”方面的优势。

(2) 思路

固定预训练LLM的参数,为每一个任务额外添加一个或多个embedding。之后拼接query正常输入LLM,并只训练这些embedding

(3) 优势

  • 效果优于GPT-3的few-shot learning
  • 当模型参数量达100亿时,接近于全模型微调效果

4.P-tuning(2021)

V2版本:2023更新

(1) 论文信息

来自论文《GPT Understands, Too》,发表于2021年

摘要:使用自然语言模式对预训练语言模型进行提示已被证明在自然语言理解(NLU)任务中有效。然而,我们的初步研究表明,手动设计的离散提示往往导致性能不稳定——例如,仅改变提示中的一个单词就可能导致性能大幅下降。为此,我们提出了一种新颖的方法P-Tuning,该方法在离散提示的基础上结合了可训练的连续提示嵌入。实验表明,P-Tuning不仅通过最小化不同离散提示之间的差距来稳定训练过程,而且在一系列NLU任务(包括LAMA和SuperGLUE)上显著提高了性能。P-Tuning在完全监督和少量样本设置下,对冻结和微调的语言模型均普遍有效。

(2) 思路

固定LLM参数,用多层感知机和LSTM对prompt进行编码,编码后与其他向量进行拼接,正常输入LLM。

注意,训练之后只保留prompt编码之后的向量,无需保留编码器。

(3) 结构

对于prompt模板,使用MLP+LSTM进行编码,替代原始的input embedding

对于原始的输入input和target,则使用原始的input embedding

(4) 使用方式

离散和连续template token混合时,显示地插入一下anchor(离散的token)有助于template的优化

(5) 优势

  • 能缓解离散prompt方法,导致的模型输出结果到达局部最优

(6) 缺点

  • 查找的最优提示,可能是次优的
  • 在小参数量模型中表现差(小参数模型如Bert,330M),上了10B的模型效果才开始可以持平
  • 序列标注等对推理和理解要求高的任务,prompt-tuning效果会变差

5.P-tuning v2 (2022)

(1) 论文信息

来自论文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》,发表于2022年。

摘要:提示微调(Prompt Tuning),该方法仅对冻结的语言模型中的连续提示进行微调,极大地减少了训练时每个任务的存储和内存使用。然而,在NLU(自然语言理解)的背景下,先前的工作表明,对于正常大小的预训练模型,提示微调的性能并不理想。我们还发现现有的提示微调方法无法处理复杂的序列标注任务,这表明其缺乏普适性。

我们提出了一个新颖的实验发现:经过适当优化的提示微调可以在广泛的模型规模和NLU任务中普遍有效。它在性能上与微调相当,但仅需要调整0.1%-3%的参数。我们的方法P-Tuning v2是Deep Prompt Tuning(Li和Liang, 2021; Qin和Eisner, 2021)的一种实现,针对NLU进行了优化和适配。鉴于P-Tuning v2的普适性和简单性,我们相信它可以作为微调的替代方案,并为未来的研究提供一个强大的基线。

(2) 思路

  • 固定LLM参数
  • 类似Prefix-tuning
    • 在Deep FT层:在seq前面加n个虚拟token,以此构造一个连续的token,作为微调参数(结构一样是transformer)
  • 在多种任务上下进行微调
  • 完全变为生成模型,无需verbalizer

(3) 优势

  • 在小、大模型上,效果均优于P-tuning。
  • 当参数量达10B,效果相当于FT

6.LoRA(2021)

(1) 论文信息

来自论文《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》

摘要:自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练,并适应特定任务或领域。随着我们预训练更大的模型,全面微调(即重新训练所有模型参数)变得不太可行。以GPT-3 175B为例,部署独立的微调模型实例,每个实例都有175B参数,成本是极其昂贵的。我们提出了低秩适应(Low-Rank Adaptation,简称LoRA),该方法冻结预训练模型的权重,并在Transformer架构的每一层中注入可训练的低秩分解矩阵,从而大大减少了下游任务的可训练参数数量。与使用Adam对GPT-3 175B进行微调相比,LoRA可以将可训练参数数量减少10,000倍,GPU内存需求减少3倍。尽管LoRA的可训练参数较少,训练吞吐量更高,并且与适配器不同,没有额外的推理延迟,但它在RoBERTa、DeBERTa、GPT-2和GPT-3上的模型质量上仍然与微调相当或更好。我们还对语言模型适应中的秩不足问题进行了实证调查,这揭示了LoRA的有效性

(2) 思路

固定LLM参数,在每一个self-attention层中,加入一个low-rank的矩阵,即 B × A B \times A B×A。在微调时,只更新 B × A B \times A B×A的参数。

(3) 结构

在每一层self-attention中,添加新的参数 △ W \bigtriangleup W W

h = W 0 x + △ W x = W 0 x + B A x h=W_0x+\bigtriangleup Wx=W_0x+BAx h=W0x+Wx=W0x+BAx

其中,预训练模型的原始参数为 W 0 ∈ R d × k W_0 \in R^{d \times k} W0Rd×k

LoRA的新增参数为 B ∈ R d × r B \in R^{d \times r} BRd×r A ∈ R r × k A \in R^{r \times k} ARr×k B B B 初始化为一个全0矩阵, A A A 是一个高斯随机初始化的矩阵。 B B B 初始化为全0矩阵的目的是,在开始训练时,让 B × A B \times A B×A等于0矩阵,即参数从0开始。

其中LoRA的中间维度 r r r,远小于原始模型的维度,即 r ≪ m i n ( d , k ) r\ll min(d,k) rmin(d,k)

(4) 学习目标

原始的LLM,一般也是CLM (Causal Language Model/Conditional Language Model),学习目标为

而加入LoRA后,学习目标为

(5) 配置

  • 在多个部位 ( Q / K / V / O u t p u t ) (Q/K/V/Output) (Q/K/V/Output)同时添加 △ W \bigtriangleup W W ,会比只在单一部分上添加权重 △ W \bigtriangleup W W,效果要好
  • 在wikiSQL/MultiNLI数据集上测试得出结论:小的γ值,能达到较好好的效果(一般为4-8)

(6) 优势

  • 用于低资源的场景。也就是硬件设备资源有限的情况下。
  • 更新参数量少。对于175B的GPT模型,使用该方法只需要额外更新0.01%的参数量。
  • 是全参数微调(FT)的一种替代方案

(7) 缺点

  • 全参数微调(FT)效果要比LoRA稍微要好

文末安利:超高性价比算力资源推荐

星鸾云:GPU云服务器(GPU Cloud Computing,GPU)是提供 GPU 算力的弹性计算服务,具有高效稳定的计算能力,适用于生成式AI、自动驾驶、图像处理、科学计算等多种应用场景。

官方链接:https://xl.hzxingzai.cn/register?invitation_code=0008677108

  • 产品优势

在这里插入图片描述

  • 实例规格以及费用
    在这里插入图片描述
    在这里插入图片描述

  • AI一体机
    在这里插入图片描述

  • 相关福利

    1. 注册有礼:注册即赠5元炼丹礼金!
    2. 首充得双倍礼包:充5送5、充10送10、充50送50!
    3. 618限时价格(6.11-6.18):4090:1.68元/时、37.73元/日、255.64元/周、1000元/月
    4. 推荐有礼:邀请好友注册,奖励邀请人充值金2元/人;被邀请好友30日内累计充值100元,再奖励邀请人充值金10元/人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/347370.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv_GUI

图像入门 import numpy as np import cv2 as cv # 用灰度模式加载图像 img cv.imread(C:/Users/HP/Downloads/basketball.png, 0)# 即使图像路径错误,它也不会抛出任何错误,但是打印 img会给你Nonecv.imshow(image, img) cv.waitKey(5000) # 一个键盘绑…

Redis集群(5)

集群原理 节点通信 通信流程 在分布式存储系统中,维护节点元数据(如节点负责的数据、节点的故障状态等)是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议,这种协议的工作原理是节点之间不断…

解决生产问题的万能接口(Java编译器API的使用)

文章目录 前言Tool和ToolProvider编译器工具:JavaCompiler文件管理文件:FileObject文件管理器:JavaFileManager 诊断监听器:DiagnosticDemo:allPowerfulInterface具体实现测试 结语 前言 当生产环境出现问题时&#x…

【模拟-BM100 设计LRU缓存结构】

题目 BM100 设计LRU缓存结构 描述 设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 capacity ,操作次数是 n ,并有如下功能: Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存get(key)&am…

windows音频服务未响应,电脑装完驱动还是软件导致没有声音

前两天浏览器突然没声音了,然后我试着搞了一下驱动,结果全没声音了。 至今仍然不确定问题的根源在哪,并且网上提供的大部分方法都没用,下面说一下我的解决方案。 winR启动命令行,输入services.msc 进入服务界面 双击…

OpenCV 双目相机标定

文章目录 一、简介1.1单目相机标定1.2双目相机标定二、实现代码三、实现效果参考资料一、简介 1.1单目相机标定 与单目相机标定类似,双目标定的目的也是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要…

r语言数据分析案例26-美元兑换欧元汇率分析与研究

一、研究背景: 汇率是国际贸易和金融中最重要的价格之一,它直接影响着各国的经济利益和国际竞争力。美元兑换欧元汇率是全球最重要的汇率之一,它的波动对全球经济和金融市场都有着深远的影响。因此,对美元兑换欧元汇率的分析和研…

MySQL学习——创建MySQL Workbench中的Connections

在MySQL Workbench中,Connections(连接)是用户与MySQL数据库进行交互的桥梁。 本文将添加一个新连接,该连接可以是初始连接,也可以是附加连接。在开始之前,必须安装、启动MySQL服务器的实例,并…

什么是SpringMVC

StringMvc简介 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

DevExpress Data Binding

DevExpress数据感知控件与任何数据访问技术(ADO.NET、Entity Framework、XPO等)兼容,并且可以显示来自实现IList、IBindingList或ITypedList接口的任何数据源的数据。有关更多详细信息,请参阅这些帮助主题:传统数据绑定…

python中用列表实现栈

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python中用列表实现栈 选择题 以下代码最后一次输出的结果是? stack [] stack.append(1) stack.append(2) stack.append(3) print(【显示】stack ,stack) print(【显示】stack.…

【python】OpenCV—Background Estimation(15)

文章目录 中值滤波中值滤波得到图像背景移动侦测 学习来自 OpenCV基础(14)OpenCV在视频中的简单背景估计 中值滤波 中值滤波是一种非线性平滑技术,主要用于数字信号处理,特别是在图像处理中去除噪声。 一、定义与原理 定义&am…

面试官:MySQL也可以实现分布式锁吗?

首先说结论,可以做,但不推荐做。 我们并不推荐使用数据库实现分布式锁。 如果非要这么做,实现大概有两种。 1、锁住Java的方法,借助insert实现 如何用数据库实现分布式锁呢,简单来说就是创建一张锁表,比…

JVM 根可达算法

Java中的垃圾 Java中"垃圾"通常指的是不再被程序使用和引用的对象,具体表现在没有被栈、JNI指针和永久代对象所引用的对象。Java作为一种面向对象的编程语言,它使用自动内存管理机制,其中垃圾收集器负责检测和回收不再被程序引用的…

集成学习概述

概述 集成学习(Ensemble learning)就是将多个机器学习模型组合起来,共同工作以达到优化算法的目的。具体来讲,集成学习可以通过多个学习器相结合,来获得比单一学习器更优越的泛化性能。集成学习的一般步骤为:1.生产一组“个体学习…

开源WebGIS全流程常用技术栈

1 数据生产 1.1 uDig uDig(http://udig.refractions.net/)是一个基于Java开源的桌面应用框架,它构建在Eclipse RCP和GeoTools(一个开源的Java GIS包)上。可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看…

excel两个数据表格,怎样实现筛选的联动?

如图,想要通过处理器或者像素条件进行筛选,形成一个右边图2的对比表,如何实现实现联动显示呢? 这个在excel里可以借用数据透视表切片器来完成。步骤如下: 1.添加表 选中数据区域中任意一个单元格,点击 插…

跳动圆点加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>跳动圆点加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

“改进型”Howland 电流泵电路

“改进型”Howland 电流泵电路 “改进型”Howland 电流泵是一种使用差分放大器在分流电阻器 (Rs) 上施加电压的电路&#xff0c;从而产生能够驱动大范 围负载电阻的双极性&#xff08;拉电流或灌电流&#xff09;压控电流源。 设计注释 确保运算放大器的输入端&#xff08;V…

串口调试助手软件(ATK-XCOM) 版本:v2.0

串口设置 软件启动后&#xff0c;会自动搜索可用的串口&#xff0c;可以显示详细的串口信息&#xff0c;由于兼容性原因某些电脑可能不会显示。 超高波特率接收&#xff0c;在硬件设别支持的情况下&#xff0c;可自定义波特率&#xff0c;点“自定义”即可输入您想要的波特率&…