[paper note]LoRA+: 原理分析

2024-04-09 18:12
文章标签 分析 lora note 原理 paper

本文主要是介绍[paper note]LoRA+: 原理分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

论文信息

论文标题:LoRA+: Efficient Low Rank Adaptation of Large Models

发表时间:2024年2月

论文内容

摘要

在本文中,我们表明,最初在论文《LoRA: Low-Rank Adaptation of Large Language Models》中引入的低秩适应(LoRA)会导致大宽度(嵌入维度)模型的次优微调。这是因为 LoRA 中的适配器矩阵 A 和 B 以相同的学习率更新。使用大宽度网络的缩放参数,我们证明对 A 和 B 使用相同的学习率并不能实现有效的特征学习。然后我们证明,只需通过精心选择的固定比率为 LoRA 适配器矩阵 A 和 B 设置不同的学习率,即可纠正 LoRA 的这种次优性。我们将此算法称为 LoRA+。在我们广泛的实验中,LoRA+ 提高了性能(1% ‑ 2% 的改进)和微调速度(高达 ~ 2 倍加速),而计算成本与 LoRA 相同。

主要结论

定理 1: (高效 LoRA(非正式))。假设权重矩阵 A 和 B 使用 Adam 进行训练,学习率分别为 η A η_A ηA η B η_B ηB。那么,不可能达到 η A = η B η_A = η_B ηA=ηB 的效率。然而,LoRA 微调在$η_A = θ(n^{-1} ) $ 和 η B = θ ( 1 ) η_B = θ(1) ηB=θ(1)时非常有效。

定理1的结果表明,只有一对满足 η B η A = θ ( n ) \frac{η_B}{η_A} = θ(n) ηAηB=θ(n)的学习率才能实现效率。在实践中,这转化为设置 η B ≫ η A η_B ≫ η_A ηBηA,但在调整学习率时并不能提供固定的精确比率 η B η A \frac{η_B}{η_A} ηAηB (“θ”中的常数通常很难处理),除非我们同时调整 η B η_B ηB η A η_A ηA ,即从计算角度来看效率不高,因为它变成了 2D 调整问题。因此,很自然地设置一个固定的比率 η B η A \frac{η_B}{η_A} ηAηB并仅调整 η A η_A ηA (或 η B η_B ηB),这将有效地将调整过程减少为一维网格搜索,实现与A、B学习率相同的标准 LoRA 的计算成本相当。我们将这种方法称为 LoRA+。

LoRA+ :设置 LoRA 模块 A、B 的学习率,使得 η B = λ η A η_B = λη_A ηB=ληA,其中 λ > 1 固定并调整 η A η_A ηA

在 LoRA+ 中,比率 λ 的选择至关重要。接近 1 的比率将类似标准 LoRA,而当 $n ≫ r $ 时,选择 λ ≫ 1 λ ≫ 1 λ1 会改善结果。通过广泛的实证评估,我们首先验证我们的理论结果,并表明最优对 ( η A , η B ) (η_A, η_B) (ηA,ηB) (就测试精度而言)通常满足 η B ≫ η A η_B ≫ η_A ηBηA。然后,我们研究了 LoRA+ 的最佳比率 λ,并提出了一个默认比率,根据经验发现,与标准 LoRA 相比,该比率通常可以提高性能。

LoRA+中如何设置比率 λ = η B η A λ = \frac{η_B}{η_A} λ=ηAηB

最佳比率 λ 取决于架构和通过“θ”中的常数进行的微调任务(定理1)。这是这些渐近结果的局限性,因为它们没有提供有关任务和神经架构如何影响常数的任何见解。为了克服这一限制,我们采用经验方法来估计 λ 的合理值。

在这里插入图片描述

在上图中,显示了不同对(模型、任务)的测试精度方面前 4 次运行的 η B η A \frac{η_B}{η_A} ηAηB比率的分布。最佳比率对模型和任务敏感,但中位数对数比率徘徊在 4 左右。我们估计,通常设置一个比率 λ = η B η A ≈ 2 λ = \frac{η_B}{η_A} ≈ 2 λ=ηAηB2 可以提高性能。这可以通过设置 η A = η η_A =η ηA=η η B = 2 4 η η_B = 2^4η ηB=24η 并调整超参数 η 来实现。

为了检查该方法的有效性,我们在 MNLI 任务上对 Roberta‑base 进行了 3 个时期的微调,使用两种不同的设置:

(LoRA+) η B = 2 4 η A η_B = 2^4η_A ηB=24ηA和(标准) η B = η A η_B = η_A ηB=ηA。在这两种设置中,我们通过网格搜索调整 η A η_A ηA

结果如下图所示
在这里插入图片描述

LoRA+( λ = 2 4 λ = 2^4 λ=24)显示出最终测试精度和训练速度的显着提高。使用 LoRA+,仅用 1.6 个 epoch,就达到了标准设置3个 epoch 后获得的最终精度。

从业者指南:使用LoRA+进行微调

将 LoRA+ 集成到任何微调代码中都很简单,只需从lora plus中提供的代码导入自定义训练器 LoraPlusTrainer,即可使用单行代码来实现。在Trainer中,λ 的值默认设置为 $ 2^{ 4}$ ,与 LoRA 相比,它可以显著提高性能。然而,请注意,λ 的最佳值取决于任务和模型:如果预训练模型的任务相对困难,则 λ 的选择将至关重要,因为需要有效的训练来使模型与微调任务保持一致。相反,当预训练模型的微调任务相对容易时,λ 的影响不太明显。根据经验,设置 λ = 2 4 λ = 2^4 λ=24是一个很好的起点。

结论和局限性

采用缩放参数,我们表明目前在实践中使用的 LoRA 微调效率不高。我们提出了一种方法 LoRA+,通过为 LoRA 适配器矩阵设置不同的学习率来解决这个问题。我们的分析得到了广泛的实证结果的支持,证实了 LoRA+ 在训练速度和性能方面的优势。这些好处对于“硬”任务更为显着,例如 Roberta/GPT2 的 MNLI(例如与 SST2 相比)和 LLama‑7b 的 MMLU(例如与 MNLI 相比)。然而,如图 7 (Figure 7) 所示,对最佳比率ηB/ηA的更精细估计应考虑任务和模型相关性,而我们在本文中的分析缺乏此维度。

这篇关于[paper note]LoRA+: 原理分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888870

相关文章

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串