了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要巨大的计算资源来运行。特别是,当需要为特定的下游任务定制模型时,尤其是在计算能力有限的硬件平台上,这一挑战尤为突出。
为了提升 LLM 在未见用户数据集和任务上的性能,微调仍是关键。随着模型规模的不断扩大,如从 GPT-2 的 1.5B 参数增长到 GPT-3 的 175B 参数,标准的全参数微调范式需要成千上万的 GPUs 并行工作,这在效率和可持续性方面表现不佳。此外,它可能损害模型的泛化能力,以及导致灾难性遗忘问题。为解决这一问题,参数高效微调(PEFT) 算法应运而生。该算法通过调整少量参数,在下游任务上实现了优于全面微调的性能。
参数高效微调(PEFT)是一种实用的解决方案,它涉及选择性地调整模型中的少数参数,而保持其他参数不变。调整大语言模型以高效地适应各种下游任务。PEFT 通过最小化新增参数数量或降低计算资源需求来调整预训练大语言模型,这在计算资源受限的情况下尤为重要。在处理参数数量庞大的大语言模型时,这种方法尤为有价值。因为从头开始微调这些模型不仅计算代价高昂,而且资源密集,这给支持系统平台设计带来了相当大的挑战。
我们将 PEFT 算法按照其操作方式分为加法、选择性、重参数化和混合微调四类。常见的加法微调算法主要有三种:(1)适配器;(2)软提示;(3)其他。这些算法在附加的可调模块或参数上存在差异。相比之下,选择性微调无需额外参数,它仅从骨干模型中选择部分参数,使这些参数在下游任务微调过程中可调,而保持大多数参数不变。我们根据所选参数的分组将选择性微调分为:(1)非结构化遮罩;(2)结构化遮罩。重参数化则是指在两种等效形式之间转换模型参数。具体而言,重参数化微调在训练过程中引入额外的低秩可训练参数,并在推理时将这些参数与原始模型集成。这种方法主要分为两种策略:(1)低秩分解;(2)LoRA 衍生物。混合微调则探索了不同 PEFT 方法的设计空间,并结合了它们的优点。
自然语言处理目前存在一个重要的范式:大规模预训练一般领域数据,并针对特定任务或领域进行微调(Fine-tuning)。然而,随着预训练语言模型规模的不断扩大,该范式面临以下问题:
-
在微调大语言模型时,由于训练成本高昂,不太可能对所有模型参数进行重新训练。
-
以往的方法都存在不同程度的性能问题。例如,adapter 增加了模型的层数,从而引入了额外的推理延迟;而 Prefix-Tuning 的训练难度较大,效果也不如直接进行微调。
模型通常过度参数化,导致冗余,其内在维度相对较小,主要依赖这一低内在维度进行任务适配。基于模型在任务适配过程中权重变化具有低秩特性的假设,研究者提出了低秩自适应(LoRA)方法。LoRA 通过优化适应过程中密集层变化的秩分解矩阵,间接训练神经网络中的部分密集层,同时保持预训练权重的稳定。实现上,LoRA 简洁明了地冻结预训练语言模型的矩阵参数,并选用 A 和 B 矩阵进行替代。在下游任务中,仅更新 A 和 B 矩阵,如图所示。
结合图片来看,LoRA 的实现流程如下:
-
在原始预训练语言模型(PLM)的基础上,我们引入了一个旁路,通过降维再升维的操作,来模拟所谓的内在秩。
-
在训练过程中,我们将固定预训练语言模型(PLM)的参数,仅对降维矩阵 A 和升维矩阵 B 进行训练。
-
模型的输入输出维度保持不变,输出时,将 BA 与 PLM 的参数进行叠加。
-
使用随机高斯分布对矩阵 A 进行初始化,同时将矩阵 B 初始化为 0 矩阵,以确保训练开始时,旁路矩阵仍维持为 0 矩阵状态。
具体实现:接下来我们从公式上解释 LoRA 的实现。假设要在下游任务微调一个预训练语言模型(如 GPT-3),则需要更新预训练模型参数,公式表示如下:
h = W 0 x + Δ W x = W 0 x + B A x h=W_{0} x+\Delta W x=W_{0} x+B A x h=W0x+ΔWx=W0x+BAx
W0 是预训练模型的初始化参数,而 ΔW 是需要更新的参数。在全参数微调的情况下,参数量等同于 W0 的参数量。例如,对于 GPT3,ΔW 的参数量约为 175B。由此可见,全参数微调大型语言模型对于资源有限的环境来说是不切实际的。鉴于前人的研究揭示预训练语言模型具有较低的 “内部维度”,这些模型在任务适配过程中即便被随机投影到较小的子空间,也能保持有效的学习。因此,LoRA 引入了一个小参数模块,专门用于学习改变量 ΔW。
在训练过程中,W0 保持不变,而 A 和 B 包含训练参数,会发生变化。在推理阶段,只需将变化量融入原模型,即可实现无延迟操作。若要切换任务,只需在切换过程中减去 BA,并替换为用其他任务训练好的 B’A’ 即可。
总的来说,LoRA 是一种简单而有效的轻量级微调方案,它基于大语言模型的内在低秩特性,通过增加旁路矩阵来模拟全参数微调。目前,LoRA 技术已广泛应用于大语言模型的微调,如 Alpaca 和 Stable Diffusion + LoRA,并能与其他高效的参数微调方法,如最先进的参数高效微调(PEFT)有效结合。
“r” 是 LoRA 中至关重要的参数,它决定了 LoRA 矩阵的秩或维度,对模型的复杂度和容量产生直接影响。当 “r” 值较高时,模型的表达能力增强,但可能引发过拟合问题;相反,降低 “r” 值可以减少过拟合,但相应地,模型的表达能力会有所减弱。在我们保持所有层都启用 LoRA 的前提下,将 “r” 值从 8 提升至 16,以探究其对性能的具体影响。一般来说,微调 LLM 时选择的 alpha 值是秩的两倍。调整 “alpha” 有助于在拟合数据和通过正则化防止过拟合之间保持平衡。
QLoRA,即量化 LoRA 的简称,由 Tim Dettmers 等人提出。它是一种在微调过程中有效降低内存占用的技术。在反向传播阶段,QLoRA 将预训练的权重量化为 4-bit,并采用分页优化器来管理内存峰值。QLoRA 会增加运行时间成本(因为量化和反量化增加了额外步骤),但它是一种很好的节省内存的方法。此外,AdamW 优化器是 LLM 训练的常用选择。此外,虽然学习率调度器可能有益,但 AdamW 和 SGD 优化器之间几乎没有区别。
LongLoRA:增强大语言模型(LLM)的长上下文处理能力,而无需大量算力资源。LongLoRA 通过使用一种简化的注意力形式和 LoRA 方法来高效扩展上下文长度,成功在 LLaMA2 7B/13B/70B 模型上将上下文长度扩展至 32K、64K、100K,几乎不增加算力消耗。此外,研究还创建了 LongQA 数据集来进一步改进模型的输出能力,并证明了通过增加训练信息量可以获得更好的结果。LongLoRA 不仅兼容现有技术,而且在处理长文本和长对话中寻找特定主题方面表现出色,为大型语言模型领域带来了创新的微调方法。
注意:LoRA 经常与现代的 LLMs 结合使用。尽管如此,众多 LoRA 的变体已经涌现(LoRA+、VeRA、LoRA-FA、LoRa-drop、AdaLoRA、DoRA、Delta-LoRA),它们以不同方式偏离了原始方法,旨在提升速度、性能或两者兼具。
-
LoRA+ 通过为两个矩阵设置不同学习率来提高训练效率;
-
VeRA 减少参数数量,通过训练额外的向量而非直接训练矩阵 A 和 B;
-
LoRA-FA 只训练矩阵 B;
-
LoRA-drop 决定哪些层值得通过 LoRA 增强;
-
AdaLoRA 动态调整矩阵的秩;
-
DoRA分别训练大小和方向;
-
Delta-LoRA 通过 A 和 B 的梯度更新预训练矩阵 W。
这些方法展示了在不牺牲性能的情况下,如何通过创新思路减少训练大语言模型的计算需求。
AdapterFusion 算法,用以实现多个 Adapter 模块间的最大化任务迁移。通过将适配器的训练划分为知识提取和知识组合两个阶段,成功解决了灾难性遗忘、任务间干扰以及训练不稳定的问题。然而,Adapter 模块的引入增加了模型的整体参数量,进而影响了模型在推理时的性能。AdapterFusion 在大多数情况下性能优于全模型微调和 Adapter。
前缀微调(Prefix-Tunning)是一种用于生成任务的轻量级微调方法。它通过向输入添加一个特定的、连续的任务向量序列,即 “前缀”,来实现这一点。这些前缀在图中以红色块表示。与提示(Prompt)不同,前缀完全由自由参数组成,不与真实的 token 相对应。与传统的微调相比,前缀微调仅针对前缀进行优化。因此,我们只需存储一个大型 Transformer 模型和已知任务特定前缀的副本,这使得为每个额外任务产生的开销非常小。
Prompt-tuning 为每个任务定义了独特的 Prompt,并将其与数据拼接作为输入。在此过程中,预训练模型被冻结以进行训练。值得注意的是,随着模型规模的扩大,其效果逐渐提升,并最终与微调效果相当。此外,Prompt-tuning 还引入了 Prompt-ensembling 的概念,即在同一批次中同时训练同一任务的不同 Prompt。这种方法相当于训练了多个不同的「模型,但相较于模型集成,其成本大幅降低。
P-Tuning 方法旨在解决大语言模型中 Prompt 构造方式对下游任务效果的重大影响问题。通过引入连续可微的 virtual token 替代传统的离散 token,实现了模板的自动构建,使得 GPT 在 SuperGLUE 上的成绩首次超过了 BERT 模型,改变了 GPT 不擅长 NLU 的观点。P-Tuning 将 Prompt 转换为可学习的 Embedding 层,通过 MLP+LSTM 处理,提高了模型的适应性和性能。P-Tuning v2 进一步改进,通过在每一层都加入 Prompts tokens 作为输入,不仅增加了可学习的参数,还提高了模型预测的直接影响,显示出跨规模和 NLU 任务的通用性。此外,P-Tuning v2 还引入了多任务学习和回归传统分类标签范式,提高了训练效率和模型的通用性。
📚️ 相关链接:
-
《大型模型的参数高效微调》全面综述
-
LongLoRA:超长上下文,大语言模型高效微调方法
-
腾讯技术工程 - 大模型微调方法总结
-
大规模语言模型高效参数微调:P-Tuning 微调系列
-
LoRA 和 QLoRA 微调语言大模型:数百次实验后的见解
-
不是大模型全局微调不起,只是 LoRA 更有性价比,教程已经准备好了
-
LoRA 家族概述
相关文章:
了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要…...
2024.4.14力扣每日一题——设计哈希集合
2024.4.14 题目来源我的题解方法一 链表数组 题目来源 力扣每日一题;题序:705 我的题解 方法一 链表数组 由于给定限制次数为10000,所以构造一个长度为10001的链表数组。对于add操作先看数组对应的位置是否为null或者为空,若是…...
SQL explain 显示子查询A类型为ALL怎么优化
当 SQL EXPLAIN 显示子查询 A 的类型为 ALL 时,这意味着数据库系统正在执行全表扫描,而不是使用索引来执行子查询。全表扫描可能会导致性能下降,特别是在大型表上。 为了优化这种情况,您可以考虑以下几点: 1. **索引…...
网络协议学习——IP协议
IP(Internet Protocol,互联网协议)是网络中最基本的协议之一,负责在互联网中进行数据包的传输。下面是对IP协议的详细讲解: IP协议的作用 IP协议是在网络层(第三层)上工作的协议,它的…...
MATLAB初学者入门(1)—— 基础知识和功能介绍
MATLAB(Matrix Laboratory)是一种用于数值计算、可视化以及编程的高性能语言环境。它广泛应用于工程、科学研究和教育等领域。以下是对MATLAB基础知识和编程技巧的系统性讲解,分为几个主要部分: 1. 基础操作 变量和表达式 在MAT…...
React Css 四种引入方式
React CSS 内联样式 优点 样式之间不会有冲突可以动态获取组件中state的值 缺点 要使用驼峰标识部分样式没有很友好的提示如果大量去写内敛样式 容易造成代码混乱伪类和伪元素无法编写 class HighCom extends PureComponent {constructor(props) {super(props)this.state…...
题目:输入3个数a,b,c,按大小顺序输出。
题目:输入3个数a,b,c,按大小顺序输出。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried abou…...
AI预测体彩排3第3弹【2024年4月14日预测--第1套算法开始计算第3次测试】
今天咱们继续测试第1套算法和模型,今天是第3次测试,目前的测试只是为了记录和验证,不建议大家盲目跟买。我的目标仍旧是10次命中3-4次!~废话不多说了,直接上结果! 2024年4月14日排3的七码预测结果如下 第一套&…...
Android 在xml 布局中如何嵌套 Jetpack Compose
最近在项目开发的过程中需要用到 Jetpack Compose,之前没有接触过Compose,所以项目一直没有用到Compose。通过查看官网发现Compose上手比较快,但是准备比较复杂的布局要转换成Compose 不是一件容易的事情。那有没有可能只是对成熟的项目中的x…...
Spring Boot统一功能处理(一)
本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求(doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口,通常会安排几个…...
我与C++的爱恋:类与对象(二)
🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 本篇着重介绍构造函数和析构函数,剩余内容在下篇解答。 一、类的默认成员函数 如果一个类中什么成员都没有,简称为空类。 任何类在什么都不写时…...
BERT入门:理解自然语言处理中的基本概念
1. 自然语言处理简介 自然语言处理(Natural Language Processing,NLP)是人工智能领域的重要分支,涉及计算机与人类自然语言之间的相互作用。NLP 的应用已经深入到我们日常生活中的方方面面,如智能助理、机器翻译、舆情…...
Discoverydevice.java和activity_discoverydevice.xml
一、Discoverydevice.java public class Discoverydevice extends AppCompatActivity {private DeviceAdapter mAdapter2;private final List<DeviceClass> mbondDeviceList new ArrayList<>();//搜索到的所有已绑定设备保存为列表private final List<Devic…...
华为OD机试 - 最多颜色的车辆(Java JS Python C C++)
须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 文章目录 须知题目描述输入描述输出描述解析代码题目描述 在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编…...
【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波——附3个算法源码
效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角...
NzN的C++之路--构造函数与析构函数
如果一个类中既没有成员变量也没有成员函数,这个类简称为空类。空类中其实并不是什么都没有,任何类在什么都不写时,编译器会自动生成6个默认成员函数。那今天我们就来学习一下其中两个默认成员函数:构造函数与析构函数。先三连后看…...
【算法刷题day24】Leetcode:216. 组合总和 III、17. 电话号码的字母组合
文章目录 Leetcode 216. 组合总和 III解题思路代码总结 Leetcode 17. 电话号码的字母组合解题思路代码总结 草稿图网站 java的Deque Leetcode 216. 组合总和 III 题目:216. 组合总和 III 解析:代码随想录解析 解题思路 回溯三部曲:确定递归…...
一体化泵站的生产制造流程怎样
诸城市鑫淼环保小编带大家了解一下一体化泵站的生产制造流程怎样 综合泵站和传统式混泥土泵站的一大差别是,离去制造厂前,能够开展全部机械设备设备的生产加工及零部件加工,随后运送到建筑项目当场开展安裝。这类经营方式缩短了开发周期&…...
【1】C++设计模式之【单例模式】
单例模式在C中的实现方式有以下几种: 懒汉式(线程不安全)饿汉式(线程安全)双检锁/双重校验锁(DCL,线程安全)静态局部变量(线程安全)C11版本(线程…...
软件设计模式之解释器模式
一、引言 在软件设计中,我们经常遇到需要“解释”和执行某种特定语法或语言的情况。这时,解释器模式就派上了用场。解释器模式(Interpreter Pattern)是一种行为设计模式,它提供了一种解释语言的语法并定义一个句子如何…...
java Web课程管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP 课程管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用ja…...
Electron 桌面端应用的使用 ---前端开发
Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门…...
【SpringBoot:详解Bean装配】
🏡Java码农探花: 🔥 推荐专栏:<springboot学习> 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、IoC容器的简介BeanFactory接口源码二、Bean装配扫描装配探索启动类条件装配自定义Bean总…...
前端如何将接口返回的码值转成对应的中文展示呢?
后端接口只返回码值,那前端如何将码值转成对应的中文展示呢? 项目中后端接口都是将码值返给前端,前端通过公共获取码值的接口然后将其对应转码 以下是举例操作: created() {//这是公共接口的码值表let oneType [{value: 01,content: 一类,},{value: 02,content: 二类,},];//…...
智慧公厕中的大数据、云计算和物联网技术引领未来公厕管理革命
现代社会对于公共卫生和环境保护的要求越来越高,智慧公厕作为城市基础设施建设的重要组成部分,正引领着公厕管理的革命。随着科技的不断进步,大数据、云计算和物联网技术的应用为智慧公厕带来了全新的可能性,(ZonTree中…...
Excel与项目管理软件比较?哪个是项目组合管理的最佳选择?
在定义和管理每个正在进行的项目的资源、任务、收益、风险和优先级时,项目组合管理已成为公司的战略要素。为了实现高效的项目组合管理,PMO 经理需要评估Excel 是否满足他们管理项目组合的需求,或者是否应该尝试不同的解决方案,例…...
过程控制风格的软件架构设计概念及其实际应用
摘要 过程控制风格的软件架构设计强调程序的流程控制逻辑和组件之间的交互方式,旨在提升系统的响应性、扩展性和可维护性。这种架构风格在需要严格的操作序列和流程控制的应用中尤为重要,例如在嵌入式系统、实时系统和复杂的业务流程管理中。本文将介绍…...
WPF 编辑器模式中隐藏/显示该元素
XAML中引用:xmlns:d"http://schemas.microsoft.com/expression/blend/2008" 在所需要的控件中加上d:Visibility"Visible"属性 d:Visibility属性有3个值,可以根据需要进行设置 转自:在Visual Studio设计器中隐藏WPF元素…...
分布式事务 - 个人笔记 @by_TWJ
目录 1. 传统事务1.1. 事务特征1.2. 事务隔离级别1.2.1. 表格展示1.2.2. oracle和mysql可支持的事务隔离级别 2. 分布式事务2.1. CAP指标2.2. BASE理论2.3. 7种常见的分布式事务方案2.3.1. 2PC2.3.2. 3PC2.3.3. TCC2.3.3.1. TCC的注意事项:2.3.3.2. TCC方案的优缺点…...
解决前端笔记本电脑屏幕显示缩放比例125%、150%对页面大小的影响问题--数据可视化大屏
近期在工作中遇到一个问题,记录一下,在项目上线之后,遇到一个问题,即缩放到90%时,页面字体比默认的100%字体大,一开始毫无头绪,经过一番的Google...Google...Google....,终于找到了解…...
莱西网站制作联赛与超/优化网站排名
华为鸿蒙 2.0 开发者公测版 Bata 3来了,目前已经为大家推送了!感兴趣的朋友们就赶紧来体验啊,优酷、新浪新闻、央视影音都是全新的鸿蒙系统。此外呢,更新也还解决了之前的运动健康步数显示不准确的问题,为大家带来了超…...
在线做qq空间的网站吗/营业推广策划
memcached 与 redis 的区别? 1、Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。而 memcache 只支持简单数据类型( php类型 基本类型:int string bo…...
动态网站开发的技术有/电脑培训网
本文为翻译文章,原文地址 这里欢迎来到本人对于Java 8的系列介绍教程,本教程会引导你一步步领略最新的语法特性。通过一些简单的代码示例你即可以学到默认的接口方法、Lambda表达式、方法引用以及重复注解等等。本文的最后还提供了譬如Stream API之类的详…...
有什么做动画的网站/网站注册账号
内容来源:2018年1月30日,VMware大中华区高级技术讲师姚泉在“VMware官方在线直播”进行《VMware云管平台运维管理》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。阅读字数:4068 | 6分钟阅读嘉宾演讲视频地…...
网页设计与制作简答题/网站优化服务
VARCHART XGantt是一个交互式的甘特图控件,其模块化的设计让您可以创建满足您和您的客户所需求的应用程序。(我们领先的甘特图控件VARCHART XGantt可用于.NET,ActiveX和ASP.NET应用程序。)除此之外,同时还具有一个稳定…...
wordpress 火箭/销售网络平台
最近项目有个需求,涉及发送邮件,发件人用的的阿里的企业邮箱,遇到一些坑: 1.刚开始一直找授权码/服务密码这个东西,后来问阿里那边的客服才知道,原来阿里企业邮箱是没有像QQ邮箱,网易邮箱那样有授权码的&a…...