Raki的读paper小记:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

news2024/12/24 21:16:58

Abstract&Introduction&Related Work

  • 研究任务
    对大模型进行部分微调

  • 已有方法和相关工作
    现有技术通常通过扩展模型深度引入推理延迟(Houlsby 等人,2019;Rebuffi 等人,2017),或通过减少模型可用序列长度(Li 和 Liang,2021;Lester 等人,2021;Ham-bardzumyan 等人,2020;Liu 等人,2021)

  • 面临挑战
    这些方法通常无法达到微调基线,提出了效率与模型质量之间的权衡。

  • 创新思路
    学习过度参数化的模型实际上位于低内在维度上。我们假设模型适应期间权重变化也具有低“内在秩”,从而提出了我们提出的低秩适应
    (LoRA)方法。
    在这里插入图片描述

  • 实验结论

    • 预训练模型可以共享并用于为不同任务构建许多小型 LoRA 模块。我们可以冻结共享模型并通过替换图 1 中的矩阵 A 和 B 来有效地切换任务,显著减少存储需求和任务切换开销
    • LoRA 使训练更高效,并在使用自适应优化器时将硬件入门门槛降低了多达 3 倍,因为我们不需要计算大多数参数的梯度或保持优化器状态。相反,我们只优化注入的、更小的低秩矩阵
    • 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结权重合并,在构造上不引入与完全微调模型相比的推理延迟
    • LoRA 正交于许多先前方法,并且可以与其中许多方法结合使用, 例如前缀调整

常规的完全微调的公式: max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ ( y t ∣ x , y < t ) ) \max_\Phi\sum_{(x,y)\in\mathcal{Z}}\sum_{t=1}^{|y|}\log\left(P_\Phi(y_t|x,y_{<t})\right) maxΦ(x,y)Zt=1ylog(PΦ(ytx,y<t))

完全微调的主要缺点之一是对于每个下游任务,我们学习一组不同的参数∆Φ,其维数|∆Φ|等于|Φ0|。因此,如果预训练模型很大(如GPT-3,其中|Φ0| ≈ 1750亿),存储和部署许多独立实例的微调模型可能具有挑战性

在本文中采用了一种更具参数效率的方法,其中任务特定参数增量 ∆ Φ = ∆ Φ ( Θ ) ∆Φ = ∆Φ(Θ) ∆Φ=∆Φ(Θ)进一步由尺寸更小的一组参数 Θ Θ Θ编码,其中 ∣ Θ ∣ |Θ| ∣Θ∣ 远小于 ∣ Φ 0 ∣ |Φ_0| Φ0

公式更改为: max ⁡ Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) \max_\Theta\sum_{(x,y)\in\mathcal{Z}}\sum_{t=1}^{|y|}\log\left(p_{\Phi_0+\Delta\Phi(\Theta)}(y_t|x,y_{<t})\right) maxΘ(x,y)Zt=1ylog(pΦ0+ΔΦ(Θ)(ytx,y<t))

在这里插入图片描述
GPT-2中型单次前向传递的推理延迟,以毫秒为单位,平均100次试验。我们使用NVIDIA Quadro RTX8000。“|Θ|”表示适配器层中可训练参数的数量。AdapterL和AdapterH是两种adapter微调的变体,在在线、短序列长度场景中,适配器层引入的推理延迟可能很大。

当我们需要像 Shoeybi 等人(2020);Lepikhin 等人(2020)那样分片模型时,这个问题会变得更糟,因为额外的深度需要更多的同步 GPU 操作,如 AllReduce 和 Broadcast,除非我们多次冗余地存储适配器参数。

直接优化很难,另一个方向,如前缀调整(Li 和 Liang,2021)所示,面临着不同的挑战。我们观察到前缀调整难以优化,并且其性能在可训练参数中非单调变化,证实了原始论文中类似的观察。更根本地说,为适应保留序列长度的一部分必然会减少处理下游任务的可用序列长度,我们怀疑这使得在提示下调整表现不及其他方法。我们将对任务性能的研究推迟到第 5 节。

LoRA

低秩参数化更新矩阵

神经网络包含许多密集层执行矩阵乘法。这些层中的权重矩阵通常具有完整的秩。当适应特定任务时,Aghajanyan等人(2020)表明,预训练语言模型具有低“内在维度”,并且尽管随机投影到较小子空间,仍然可以有效地学习。受此启发,我们假设在适应过程中权重的更新也具有低“内在秩”。对于预训练的权重矩阵 W 0 ∈ R d × k ˉ \begin{aligned}W_0\in\mathbb{R}^{d\times\bar{k}}\end{aligned} W0Rd×kˉ,我们通过用低秩分解表示后者来约束其更新 W 0 + Δ W = W 0 + B A W_{0}+\Delta W=W_{0}+BA W0+ΔW=W0+BA,其中 B ˉ ∈ R d × r , A ∈ R r × k \bar{B}\in\mathbb{R}^{d\times r},A\in\mathbb{R}^{r\times k} BˉRd×r,ARr×k,并且秩 r ≪ min ⁡ ( d , k ) r\ll\min(d,k) rmin(d,k)

在训练期间, W 0 W_0 W0 被冻结并且不接收梯度更新,而A和B包含可训练参数。 W 0 W_0 W0 ∆ W = B A ∆W = BA W=BA 都与相同的输入相乘,并且它们各自的输出向量按坐标相加。对于 h = W 0 x h = W_0x h=W0x,我们修改后的前向传递产生: h = W 0 x + Δ W x = W 0 x + B A x h=W_0x+\Delta Wx=W_0x+BAx h=W0x+ΔWx=W0x+BAx 我们在图1中说明了我们的重新参数化。我们对A使用随机高斯初始化,并对B使用零,因此 ∆ W = B A ∆W = BA W=BA 在训练开始时为零。然后将 ∆ W x ∆Wx Wx α / r α/r α/r 缩放,其中 α α α r r r 中的常数。当使用Adam进行优化时,调整 α α α 大致相当于调整学习率(如果我们适当地缩放初始化)。因此,我们简单地将 α α α 设置为第一个尝试的r并且不调整它。这种缩放有助于减少在改变 r r r 时重新调整超参数的需要(Yang&Hu,2021)

全精调的一般化
更一般形式的精调允许训练预训练参数的子集。LoRA更进一步,并且不要求在适应过程中累积梯度更新到权重矩阵具有完整秩。这意味着当将LoRA应用于所有权重矩阵并训练所有偏差时,我们通过将LoRA秩r设置为预训练权重矩阵的秩来大致恢复全精调的表现力。换句话说,随着我们增加可训练参数的数量,训练LoRA大致收敛于训练原始模型,而基于适配器的方法收敛于MLP,基于前缀的方法收敛于无法接受长输入序列的模型。

没有额外推理延迟
部署到生产环境时,我们可以显式计算并存储 W = W 0 + B A W = W_0 + BA W=W0+BA并像往常一样进行推理。注意 W 0 W_0 W0 B A BA BA 都在 R d × k R_d×k Rd×k 中。 当我们需要切换到另一个下游任务时,我们可以通过减去 B A BA BA 然后添加不同的 B 0 A 0 B_0A_0 B0A0来恢复 W 0 W_0 W0,这是一个快速操作,并且内存开销很小。关键是这保证了与精调模型相比,在推理过程中不会引入任何额外的延迟

应用到 TRANSFORMER

原则上,我们可以将LoRA应用于神经网络中任何子集的权重矩阵,以减少可训练参数的数量。在Transformer架构中,自注意模块中有四个权重矩阵 ( W q , W k , W v , W o ) (W_q,W_k,W_v,W_o) WqWkWvWo和MLP模块中的两个。我们将 W q (或 W k , W v ) W_q(或W_k,W_v) Wq(或WkWv视为 d m o d e l × d m o d e l d_{model}×d_{model} dmodel×dmodel维度的单个矩阵,尽管输出维度通常被切成注意力头。我们仅限于将注意力权重适应下游任务,并冻结MLP模块(因此它们不会在下游任务中训练),既为了简单又为了参数效率。我们进一步研究了在TRANSFORMER中适应不同类型的注意力权重矩阵的影响

实际好处和局限性
最显著的好处来自减少内存和存储使用量。对于使用Adam训练的大型变压器,如果 r ≤ d m o d e l r≤d_{model} rdmodel,则我们最多可以将 V R A M VRAM VRAM 使用量减少2/3,因为我们不需要为冻结参数存储优化器状态。在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB减少到350GB。当r = 4且仅查询和值投影矩阵被调整时,checkpoint大小大约减少了10,000倍(从350GB减少到35MB)这使我们能够使用更少的GPU进行训练并避免I/O瓶颈。另一个好处是我们可以通过仅交换LoRA权重而不是所有参数来更低成本地在部署时切换任务。这允许创建许多定制模型,可以在存储预训练权重的VRAM上的机器上即时切换

与全精调相比,在GPT-3 175B上训练速度提高了25%,因为我们不需要计算大多数参数的梯度

LoRA也有其局限性。例如,在单次前向传递中批量输入具有不同A和B的不同任务并不简单,如果选择将A和B吸收到W中以消除额外推理延迟。尽管可以不合并权重并动态选择要用于批处理中样本的LoRA模块,用于延迟不关键的场景

Experiments

翻译: 我们在RoBERTa(Liu等人,2019),DeBERTa(He等人,2021)和GPT-2(Radford等人,b)上评估LoRA的下游任务性能,然后扩展到GPT-3 175B(Brown et al.,2020)。我们的实验涵盖了从自然语言理解(NLU)到生成(NLG)的广泛任务范围。具体而言,我们对RoBERTa和DeBERTa进行GLUE(Wang等人,2019)基准测试。我们遵循Li&Liang(2021)在GPT-2上的设置进行直接比较,并添加WikiSQL(Zhong等人,2017)(NL到SQL查询)和SAMSum(Gliwa等人,2019)(会话摘要)用于GPT-3的大规模实验
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Conclusions

在硬件要求和为不同任务托管独立实例的存储/切换成本方面,对巨大语言模型进行微调是极其昂贵的。我们提出了一种高效的适应策略LoRA,既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,LoRA通过共享绝大部分模型参数,允许快速进行任务切换,从而可以作为服务部署。虽然我们的重点是Transformer语言模型,但所提出的原则通常适用于任何具有密集层的神经网络

未来的工作方向有很多:

  1. LoRA可以与其他高效适应方法结合,可能提供正交改进
  2. 微调或LoRA背后的机制尚不清楚 - 在预训练期间学习的特征如何转化为在下游任务中表现良好?我们认为相比于完全微调,LoRA使得回答这个问题更加可行
  3. 我们主要依赖启发式方法来选择应用LoRA的权重矩阵。是否有更加原则性的方法来做这件事?
  4. ΔW的秩缺失表明W可能也是秩缺失的,这可能会激发未来的研究工作

Remark

使用低秩分解,并且冻住大头而只训练部分参数获得了非常高效的方法,LoRA已经成为现在垂直领域微调唯一选择(全量fine-tune需要太多资源,包括GPU和数据),大道至简,dope!

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

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

相关文章

Python实现HBA混合蝙蝠智能算法优化卷积神经网络回归模型(CNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

集成了32位Cortex®M0内核XMC1302T038X0200AB、XMC1302Q040X0200AB 32MHz 200KB 闪存 工业MCU

XMC1000 32位工业 MCU 将 ARM Cortex™-M0 核心与领先的 65nm 制造工艺相结合&#xff0c;克服了目前 8 位设计的局限。XMC1000系列让目前的 8 位用户有机会享受 32 位的功耗&#xff0c;同时不在价格或易用性上做出妥协。XMC1000 在其细分市场提供最为广泛的闪存产品线&#x…

人工智能相关笔记

这近一年来&#xff0c;我在国科大修了&#xff1a;人工智能导论、机器学习与模式识别、语义网络与知识图谱、深度学习、强化学习……这几门专业课&#xff0c;由于发现了它们彼此之间有重复的知识点&#xff0c;真想把他们融会贯通一下&#xff0c;至少写个提纲挈领的东西给自…

xcode15启动IOS远程调试

1.用数据线连接IPhone到macOS 2.打开xcode15,然后点击Window->Devices and Simulators 3.选中左边的Devices可看到已连接的IPhone,然后点击Connect via network使其选中. 选择后,左边的IPhone设备的右边出现一个地球图标,表示成功通过网络连接到IPhone 现在可断开数据线的…

K8S初级入门系列之八-网络

一、前言 本章节我们将了解K8S的相关网络概念&#xff0c;包括K8S的网络通讯原理&#xff0c;以及Service以及相关的概念&#xff0c;包括Endpoint&#xff0c;EndpointSlice&#xff0c;Headless service&#xff0c;Ingress等。 二、网络通讯原理和实现 同一K8S集群&…

大模型开发(十):Chat Completion Models API 详解

全文共8000余字&#xff0c;预计阅读时间约18~28分钟 | 满满干货(附代码案例)&#xff0c;建议收藏&#xff01; 本文目标&#xff1a;详解Chat Completion Models的参数及应用实例&#xff0c;并基于该API实现一个本地知识库的多轮对话智能助理 代码&文件下载点这里 一、…

通过ETL自动化同步飞书数据到本地数仓

一、飞书数据同步到数据库需求 使用飞书的企业都有将飞书的数据自动同步到本地数据库、数仓以及其他业务系统表的需求&#xff0c;主要是为了实现飞书的数据与业务系统进行流程拉通或数据分析时使用&#xff0c;以下是一些具体的同步场景示例&#xff1a; 组织架构同步&#…

windows版docker部署mysql并导入数据

会用到的操作命令&#xff1a; 1.退出容器中的bash界面&#xff1a;exit 2.停止某个容器&#xff1a;docker stop container_name_or_id 3.要强制删除 Docker 中的某个容器&#xff1a; docker rm -f container_name_or_id 1.先下载并配置好docker 2.拉取 MySQL 镜像&#x…

深度学习——过拟合和Dropout

基本概念 什么是过拟合&#xff1f; 过拟合&#xff08;Overfitting&#xff09;是机器学习和深度学习中常见的问题之一&#xff0c;它指的是模型在训练数据上表现得很好&#xff0c;但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

数据仓库发展历史

数据仓库发展历史 一、演变 数据仓库是企业中用于存储、整合和分析数据的关键组件。随着时间的推移&#xff0c;数据仓库经历了三代演化&#xff1a;从需求驱动到平台化、从平台化到智能&#xff08;AI&#xff09;化 二、第一代&#xff08;过时&#xff09; 第一代数据仓…

【《Spring Boot微服务实战(第2版)》——一本关于如何在Spring Boot中构建微服务的全面指南】

使用Spring Boot框架构建基于Java的微服务架构&#xff0c;将应用程序从小型单体架构蜕变为由多个服务组成的事件驱动架构。这个最新版本围绕服务发现、负载均衡、路由、集中式日志、按环境配置和容器化等知识点&#xff0c;循序渐进地讲述微服务架构、测试驱动的开发和分布式系…

Radare2:using test

Radare2:using test └─$ sudo apt install radare2 100 ⨯ [sudo] kwkl 的密码&#xff1a; 正在读取软件包列表... 完成…

【Bug记录篇】IDEA双击打不开,报错的问题

早上&#xff0c;带着满满的干劲来实验室&#xff0c;准备继续我的IDEA之旅&#xff0c;结果好嘛&#xff0c;一打开IDEA&#xff0c;给我这样&#xff1f;&#xff01;&#xff01;&#xff01;&#x1f632;&#x1f632;&#x1f632; 这是怎么回事&#xff01;&#xff01;…

FPGA-DFPGL22学习7-gpio

系列文章目录 FPGA-DFPGL22学习6-led 文章目录 系列文章目录前言一、原理图1&#xff09;key2&#xff09;beeptouch端口对应1)key2)beeptouch 二、程序设计1)KEY2)beeptouch 三、程序编写1.KEY代码&#xff1a;2.beeptouch代码&#xff1a; 结论 前言 和原子哥一起学习FPGA …

blender 基础材质篇

材质展示 材质背景介绍 什么是PBR&#xff1f; PBR 全称为 Physically Based Rendering&#xff0c;译为基于物理属性的引擎渲染&#xff0c;也就是说会把物质的颜色、粗糙度、高光属性等进行分别处理&#xff0c;使物质体现出更真实的感觉&#xff1b; 什么是BRDF&#xff…

【Linux】初识多线程深入理解进程地址空间

目录 1 多线程的引入 1.1 相关概念 1.2 Linux操作系统理解多线程 特殊的进程结构 创建子进程的过程 创建多线程 进程与线程之间的关系 1.3 对多线程结构的管理 Windows管理多线程 Linux管理多线程 1.4 理解多线程与多进程相比&#xff0c;调度的成本更低 2 深入理…

[JAVAee]volatile关键字

目录 1.volatile的特性 ①保持线程可见性 2.volatile注意事项及适用场景 ①注意事项 ②适用场景 1.volatile的特性 ①保持线程可见性 volatile,译为"易变的". 对此我们就可以这样理解,对于被volatile修饰的变量的数值,是容易变化的. 在之前的线程安全文章中,…

XILINX ZYNQ 7000 AXI总线 (二)

了解了AXI 的大部分内容后&#xff0c;开始做一个实战&#xff0c;就是完成AXI 结构的输入输出搭建。 一.创建一个IP 3. 4. 5. 6.选择AXI FULL&#xff0c;创界主接口和从接口 7. 8.可以看到XILINX AXI FULL 的源代码 二.创建一个新的工程&#xff0c;把IP导入到这个工…

ARP系统的命令行基础

系列文章目录 华为数通学习&#xff08;2&#xff09; 一、基本命令结构 二、命令行视图 设备提供了多样的配置和查询命令&#xff0c;为便于用户使用这些命令&#xff0c;VRP系统按功能分类将命令分别注册在不同的命令行视图下。 2.1&#xff0c;命令行视图介绍 我们接下来…

DevOps系列文章 之GitLabCI模板库的流水线

目录结构&#xff0c;jobs目录用于存放作业模板。templates目录用于存放流水线模板。这次使用​​default-pipeline.yml​​作为所有作业的基础模板。 作业模板 作业分为Build、test、codeanalysis、artifactory、deploy部分&#xff0c;在每个作业中配置了rules功能开关&…