大模型学习笔记 - LLM 参数高效微调技术

news2024/11/23 20:13:57

LLM 参数高效微调技术

  • LLM 高效微调技术
    • Adapter Tuning (2019 google,在Transformer 结构中嵌入adapter,tuning on BERT)
    • Prefix Tuning (2021.01 斯坦福,通过virtual token构造连续型隐式prompt)
    • Prompt Tuning(2021.04,google)
    • P-Tuning V1/V2 (清华,2021.03)
    • P-Tuning V2 (2022,)
    • LoRA(2021)
    • QLoRA (2023.05)
    • 其他:

参数高效微调是指冻结LLM的大部分模型参数,微调少量的或者额外新增的模型参数。目前高效微调技术主要由:Prefix Tuning、P-Tuning V1/V2、LoRA、QLoRA.

微调技术的发展:

adapter tuning -> prefix tuning ->P-Tuning v1/v2 -> LoRA -> QLoRA.

Adapter Tuning (2019 google,在Transformer 结构中嵌入adapter,tuning on BERT)

  • Parameter-Efficient Transfer Learning for NLP
  • 谷歌的研究人员于2019年在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT 微调方式,拉开了 PEFT 研究的序幕。他们指出:在面对特定的下游任务时,如果进行 Full-fintuning(即预训练模型中的所有参数都进行微调),太过低效, 而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果. 于是设计了如下结构:

在这里插入图片描述

  • 如上图左侧所示,将其嵌入 Transformer 的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调
  • 如上图右侧所示,同时为了保证训练的高效性(也就是尽可能少的引入更多参数),他们将 Adapter 设计为这样的结构:
    • 首先是一个 down-project 层将高维度特征映射到低维特征,然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征;
    • 同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为 identity。
  • 从实验结果来看,该方法能够在只额外对增加的3.6%参数规模(相比原来预训练模型的参数量)的情况下取得和Full-finetuning接近的效果(GLUE指标在0.4%以内)
    在这里插入图片描述

Prefix Tuning (2021.01 斯坦福,通过virtual token构造连续型隐式prompt)

在prefix-tuning之前的工作主要是人工设计离散的template或者自动化搜索离散template,问题在于最终的性能对人工设计的template的特别敏感:加一个词或者少一个词,或者变动位置,都会造成很大的变化,所以这种离散化的token的搜索出来的结果可能并不是最优的.

坦福的研究人员于2021年年初通过此论文《Prefix-Tuning:Optimizing Continuous Prompts for Generation》提出Prefix Tuning方法,其使用连续的virtual token embedding来代替离散的token,且与Full-finetuning更新所有参数的方式不同,如下图所示
在这里插入图片描述

  • 在输入token之前构造一段任务相关的virtual tokens作为Prefix,训练时冻结Transformer参数,只更新prefix参数。

下图是在自回归模型和encoder-decoder模型的例子
在这里插入图片描述

框架可以理解为如下:在这里插入图片描述

对于上述这个过程,有以下几点值得注意

  • 该方法其实和构造Prompt类似,只是Prompt是人为构造的“显式”的提示,并且无法更新参数,而Prefix则是可以学习的“隐式”的提示
  • 同时,为了防止直接更新Prefix的参数导致训练不稳定的情况,特在Prefix层前面加了MLP结构(相当于将Prefix分解为更小维度的Input与MLP的组合后输出的结果),训练完成后,只保留Prefix的参数
  • prefix-prompt的效果优于adapter tuning 和 finetune最上面的两层,最终和全参数finetune差不多,且在低资源情况下,效果优于finetune
  • 更长的前缀意味着更多的可微调参数,效果也变好,不过长度还是有阈值限制的(table-to-text是10,summarization是200)
  • 可调参数作为前缀,比作为中缀更好一点。毕竟对于自回归模型,每个位置只能关注到它之前的位置,如果在中间的话 前面部分无关关注到中间。

Prompt Tuning(2021.04,google)

2021年4月,google research 在论文 The Power of Scale for Parameter-Efficient Prompt Tuning中提出Prompt Tuning.

Prompt Tuning原理如下图所示:冻结主模型全部参数,在训练数据前加入一小段Prompt,只训练Prompt的表示层,即一个Embedding模块。论文实验表明,只要模型规模够大,简单加入 Prompt tokens 进行微调,就能取得很好的效果。
大体框架如下:
在这里插入图片描述

  • 该方法可以看做是对Prefix tuning的简化版本 。

  • Prefix tuning 是在每次前面都添加前缀token来学习。Prompt Tuning是使用single prompt representation prepended to the embeded input. 需要的参数更少,并且也允许transformer 更新中间层的任务表示。

  • Prefix Tuning 依赖于 前缀的reparameterization 来稳定学习,这需要大量的参数。PromptTuning 不要reparamterization 并且在模型尺寸和SuperGLUE任务上都很鲁棒。

  • PromptTuning 冻结整个预训练模型,只允许每个下游任务在输入文本前添加额外的k个可调tokens(意味着它给每个任务都定义了自己的Prompt,在输入层加入prompt tokens,即We freeze the entire pre-trained model and only al-low an additional k tunable tokens per downstreamtask to be prepended to the input text)
    在这里插入图片描述

  • Model tuning需要为每个下游任务生成整个预训练模型的任务特定副本,并且推理必须分批执行

  • Prompt tuning只需要为每个任务存储一个小的特定于任务的提示,并使用原始的预训练模型支持混合任务推理

  • 对于T5“XXL”模型,对tuned model而言,每个副本需要110亿个参数,相比之下,对tuned prompts而言,每个任务只需要20,480个参数—假设提示长度为5个tokens,则减少了5个数量级以上

  • 且通过实验发现,随着预训练模型参数量的增加,Prompt Tuning的方法会逼近全参数微调的结果
    在这里插入图片描述

P-Tuning V1/V2 (清华,2021.03)

将自然语言的离散模版转化为可训练的隐式prompt (连续参数优化问题)

清华大学的研究者于2021年3月通过此篇论文《GPT Understands, Too》提出P-Tuning,其与prefix tuning类似:比如考虑到神经网络本质上是连续的,故离散提示可能不是最优的(sinceneural networks are inherently continuous, discrete promptscan be sub-optimal ),从而也采取连续的提示

总之,P-Tuning成功地实现了模版的自动构建,且借助P-tuning,GPT在SuperGLUE上的成绩首次超过了同等级别的BERT模型,这颠覆了在那年之前“GPT不擅长NLU”的结论,也是该论文命名的缘由

P-Tuning是在Prompt-Tuning的基础上,对Prompt部分进行进一步的编码计算,加速收敛。具体来说,PEFT中支持两种编码方式,一种是LSTM,一种是MLP。与Prompt-Tuning不同的是,Prompt的形式只有Soft Prompt。
在这里插入图片描述

P Tuning将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。

  • 相比Prefix Tuning,P Tuning仅限于输入层,没有在每一层都加virtual token。
  • 经过预训练的LM的词嵌入已经变得高度离散,如果随机初始化virtual token,容易优化到局部最优值,而这些virtual token理论是应该有相关关联的。因此,作者通过实验发现用一个prompt encoder来编码会收敛更快,效果更好。即用一个LSTM+MLP去编码这些virtual token以后,再输入到模型。
  • 实验中发现,相同参数规模,如果进行全参数微调,Bert的在NLU(自然语言理解)任务上的效果,超过GPT很多;但是在P-Tuning下,GPT可以取得超越Bert的效果
    在这里插入图片描述

P-Tuning V2 (2022,)

Prompt Tuning和P-Tuning等方法存在两个主要的问题:

  • 第一,缺乏模型参数规模和任务通用性。
    • 缺乏规模通用性:Prompt Tuning论文中表明当模型规模超过100亿个参数时,提示优化可以与全量微调相媲美。但是对于那些较小的模型(从100M到1B),提示优化和全量微调的表现有很大差异,这大大限制了提示优化的适用性。
    • 缺乏任务普遍性:尽管Prompt Tuning和P-tuning在一些 NLU 基准测试中表现出优势,但对硬序列标记任务(即序列标注)的有效性尚未得到验证。
  • 第二,缺少深度提示优化。我们知道在Prompt Tuning和P-tuning中,只被插入transformer第一层的输入embedding序列中,在接下来的transformer层中,插入Prompt的位置的embedding是由之前的transformer层计算出来的。
    • 由于序列长度的限制,可调参数的数量是有限的。
    • 输入embedding对模型预测只有相对间接的影响。
      考虑到这些问题,作者提出了P-Tuning v2。

Prefix Tuning原理如下图所示:相较于Prompt-Tuning和P-tuning,Prefix-Tuning不是将Prompt加在输入的Embedding层,而是将其作为可学习的前缀,放置在Transformer模型中的每一层中,具体表现形式为past_key_values。
在这里插入图片描述

P-Tuning V2和Prefix Tuning的区别主要在于:移除重参数化的编码器,即没有MLP

P-Tuning V2具体做法基本同Prefix Tuning,可以看作是将文本生成的Prefix Tuning技术适配到NLU任务中,然后做了一些改进:
1、移除重参数化的编码器。以前的方法利用重参数化功能来提高训练速度和鲁棒性(如:Prefix Tuning中的MLP、P-Tuning中的LSTM)。在作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。
2、针对不同任务采用不同的提示长度
提示长度在提示优化方法的超参数搜索中起着核心作用。在实验中,作者发现不同的理解任务通常用不同的提示长度来实现其最佳性能。
从图3中,可以观察到,针对简单任务:较短的Prompt(20)即可取得不错的效果。针对复杂任务:如阅读理解,需要更长的Prompt(100)。
重参数化与最佳提示长度有密切关联。例如,在RTE、CoNLL04和BoolQ中,MLP重参数化比嵌入更早达到最佳结果。
在这里插入图片描述

3、引入多任务学习(MPT-2)。先在多任务的Prompt上进行预训练,然后再适配下游任务

P-Tuning v2是一种在不同规模和任务中都可与微调相媲美的提示方法。P-Tuning v2对从330M到10B的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的幅度超过了Prompt Tuning和P-Tuning。

LoRA(2021)

参考LLM指令微调

QLoRA (2023.05)

To be added more details about 模型量化

本质是对LoRA的改进,相比LoRA进一步降低显存消耗.

  • LoRa为LLM的每一层添加了少量的可训练参数(适配器),并冻结了所有原始参数。这样对于微调,只需要更新适配器权重,这可以显著减少内存占用
  • 而QLoRa更进一步,引入了4位量化、双量化和利用nVidia统一内存进行分页
  • 所有这些步骤都大大减少了微调所需的内存,同时性能几乎与标准微调相当

(QLoRA通过将模型量化到4位精度并使用分页优化器管理内存峰值来改进LoRA)

其他:

  1. Prompt Tuning 和 P-Tuning 有啥区别呢?
    这两个文章发布时间相差1个月,差不多是同一时间段的工作。整体思想差不多 都是只插入第一层的输入embedding序列中。只是P-Tuning在Prompt-Tuning的基础上,对Prompt部分进行进一步的编码计算,加速收敛。具体来说,PEFT中支持两种编码方式,一种是LSTM,一种是MLP。与Prompt-Tuning不同的是,Prompt的形式只有Soft Prompt。
  2. P-TuningV2 和 prefix 有啥区别?

参考:
参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2
Prompt-Tuning——深度解读一种新的微调范式
参考:https://blog.csdn.net/v_JULY_v/article/details/132116949?spm=1001.2014.3001.5501

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS学习 02 利用鼠标悬停制造按钮边框的渐变方向变化

效果 页面背景为深灰色,使用Karla字体。容器内的按钮居中显示,按钮有一个彩色渐变的边框。按钮的背景为黑色,文字为浅灰色。当鼠标悬停在按钮边框上时,边框的渐变方向变化,按钮文字变为白色,并且按钮内边距…

类和对象——日期类实现

目录 前言: 一、构造 二、运算符重载 三、与-- 四、实现与 操作 4.1 实现 操作 4..2 实现操作 4.3 效率分析 五、实现 - 与- 操作符 六、日期减日期 七、流插入和流提取 八、完整代码 Date.h Date.cpp 前言: 我们之前已经学习过了类和对象&…

交换机-端口安全

端口安全 1 概述 端口安全(Port Security)通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC、安全静态MAC和Sticky MAC),阻止非法用户通过本接口和交换机通信,从而增强设备的安全性。 2 …

力扣热题100_二叉树_94_二叉树的中序遍历

文章目录 题目链接解题思路解题代码 题目链接 94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输…

全面提升PDF编辑效率,2024年五大顶级PDF编辑器推荐!

在这个数字化飞速发展的时代,PDF文件已经成为我们日常工作和学习中不可或缺的一部分。然而,面对PDF文件的编辑和管理,许多人仍然感到困惑和无助。今天,就让我们一起探索几款高效、易用的PDF编辑器,它们将彻底改变你的工…

抖音短视频素材网站有哪些?做抖音的几个素材站分享

随着短视频平台尤其是抖音的飞速发展,更多的内容创作者正加入到这一潮流中,无论是生活分享、才艺展示还是知识传播,一个吸引人的视频都离不开优质的素材。本文将为追求流行的抖音视频创作者介绍几个寻找热门素材的优选平台,帮助您…

c语言-编译预处理

9 编译预处理 预处理命令 一、预处理命令的作用 -- 在编译之前,需要执行的命令 -- 编译预处理是在对源程序正式编译之前的处理,如inlcude先替换后计算 二、预处理命令 1、#include -- 包含包括 (1) #include&l…

考研数学|张宇18讲太多太难,强化要不要换武老?

面对张宇18讲的难度,考虑是否更换辅导资料是一个值得深思的问题。首先,要认识到每个人的学习风格和需求是不同的。 张宇18讲可能因其深度和广度而受到一些考生的青睐,但同时也可能因其难度让部分考生感到挑战重重。 在决定是否更换辅导资料…

如何优雅的使用枚举类型,可以这样做!

使用枚举有时候会给我们带来了一些困扰: 前端展示数据,需要将枚举转成用户可读的数据显示。 代码中的枚举类型要存储数据库得转成数值类型。 那么本文介绍一种自动转换方案,大大方便前后端使用枚举类型 我们以用户状态为例,用…

创建型模式(Creational Patterns)之工厂模式(Factory Pattern)之工厂方法模式(Factory Method Pattern)

1. 工厂方法模式(Factory Method Pattern) 将对象的创建延迟到子类中实现,每个具体产品类都有一个对应的工厂类负责创建,从而使得系统更加灵活。客户端可以通过调用工厂方法来创建所需的产品,而不必关心具体的实现细节。这种模式符合开放-封闭…

客户数据分析模型:RFM模型的深度解析与应用探索

RFM模型,作为客户数据分析中的经典工具,凭借其简单而强大的分析能力,被广泛应用于各行各业。本文旨在深入探讨RFM模型的核心原理、应用价值,并详细阐述其在2C(面向消费者)和2B(面向企业&#xf…

Lumerical 光束重叠率计算

Lumerical 光束重叠率计算 引言正文不同位置处 FDE Solver 对仿真结果的影响FDE Solver 不同尺寸下的光束重叠率计算引言 在 Lumerical 光纤模式仿真 一文中我们介绍了如何进行光纤模式的仿真。本文,我们将继续使用 SMF28 来进行光束重叠率计算说明。 正文 不同位置处 FDE …

大数据技术原理-spark的安装

摘要 本实验报告详细记录了在"大数据技术原理"课程中进行的Spark安装与应用实验。实验环境包括Spark、Hadoop和Java。实验内容涵盖了Spark的安装、配置、启动,以及使用Spark进行基本的数据操作,如读取本地文件、文件内容计数、模式匹配和行数…

【未授权访问漏洞复现~~~】

一: Redis未授权访问漏洞 步骤一:进入vulhub目录使用以下命令启动靶机… 进入目录:cd /vulhub-master/redis/4-unacc 启动:docker-compose up-d 检查:docker-compose ps步骤二:在Kali上安装redis程序进行服务的链接. #安装redis apt-get install redis #redis链接 redis-cli…

【Linux进程篇】并发艺术:Linux条件变量与生产消费者模型的完美融合

W...Y的主页 😊 代码仓库分享💕 前言:我们上篇博客中提到了线程互斥、引出了互斥锁解决了线程中的未将临界资源保护的问题。但是随之出来的问题——竞争锁是自由竞争的,竞争锁的能力太强的线程会导致其他线程抢不到票&#xff0…

Linux——线程互斥与同步

一、线程互斥 1.1 线程间互斥的概念 在学习管道的时候,管道是自带同步与互斥的。而在线程中,当多个线程没有加锁的情况下同时访问临界资源时会发生混乱。在举例之前,先了解几个概念。 临界资源:多个线程执行流共享的资源叫做临…

软甲测试定义和分类

软件测试定义 使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验他是否满足规定的需求或弄清预期结果与实际结果之间的差别 软件测试目的 为了发现程序存在的代码或业务逻辑错误 – 第一优先级发现错误为了检验产品是否符合用户需求 – 跟用户要求实…

WPF学习(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件(瀑布流布局) WrapPanel控件表示将其子控件从左到右的顺序排列,如果第一行显示不了,则自动换至第二行,继续显示剩余的子控件。我们来看看它的结构定义: public class WrapPanel : Panel {pub…

【网页设计】基于HTML+CSS上海旅游网站网页作业制作

一、👨‍🎓网站题目 旅游,当地特色,历史文化,特色小吃等网站的设计与制作。 二、✍️网站描述 👨‍🎓静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计👩‍&#x1f39…

CSP初赛知识点讲解(一)

CSP初赛知识点讲解(一) 信息学竞赛哈夫曼树 哈夫曼编码冯.诺依曼理论计算机奖项例题训练(一)操作系统例题训练(二)计算机语言例题训练(三) 信息学竞赛 全国青少年计算机程序设计竞赛…