【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

题目:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
来源: ICLR 2022
模型名称: LoRA
论文链接: https://arxiv.org/abs/2106.09685
项目链接: https://github.com/microsoft/LoRA

文章目录

  • 摘要
  • 引言
  • 问题定义
  • 现有方法的问题
  • 方法
    • 将 LORA 应用于 Transformer
  • 实验
  • 思考
  • 结论
  • future work

摘要

随着模型越来越大,全量微调变得越来越不可行。作者提出了低秩适配器(LoRA),它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,大大减少了下游任务的可训练参数的数量。在GPT-3 175B使用Adam上,与全量微调相比,LoRA减少了10,000倍参数量,减少了3倍GPU内存消耗。

🧐与Adapter相比,没有额外的推理延迟

引言

由于全量微调大模型比较不现实,因此除了每个任务的预训练模型之外,只需要存储和加载少量特定于任务的参数,大大提高了部署时的运行效率。

已有的方法引进了推理延迟,要么增加了模型的深度,要么减少了模型可以输入的序列长度,更重要的是,这些方法通常无法匹配微调基线,从而在效率和模型质量之间进行权衡。【adpter增加了深度,pormpt、prefix-tuning减少了模型可以接受的输入序列长度】

🧐We take inspiration from Li et al. (2018a); Aghajanyan et al. (2020) which show that the learned over-parametrized models in fact reside on a low intrinsic dimension. We hypothesize that the change in weights during model adaptation also has a low “intrinsic rank”, leading to our proposed Low-Rank Adaptation (LoRA) approach.

在这里插入图片描述

r = 1 or 2 d可以等于12,288

LoRA几个优势:

  1. 基础模型不动,只修改A或者B】预训练模型可以共享并用于构建许多用于不同任务的小型 LoRA 模块。我们可以通过替换图1中的矩阵A和B来冻结共享模型并有效地切换任务,从而显着降低存储需求和任务切换开销。
  2. 训练更高效】LoRA 使训练更加高效,并将硬件进入门槛降低了多达 3 倍,因为我们不需要计算梯度或维护大多数参数的优化器状态。相反,我们只优化注入的、小得多的低秩矩阵。
  3. 推理更加高效】我们简单的线性设计使我们能够在部署时将可训练矩阵与冻结权重合并,通过构造,与完全微调的模型相比,不会引入推理延迟。
  4. 可以与别的方法一起使用】LoRA 与许多现有方法正交,并且可以与其中许多方法相结合,例如前缀调整。

问题定义

下面是对语言建模问题的简要描述,特别是在给定特定任务提示的情况下条件概率的最大化。

预训练好的模型: P Φ ( y ∣ x ) P_Φ(y|x) PΦ(yx)

下游数据集: Z = { ( x i , y i ) } i = 1 , … , N \mathcal{Z}=\{(x_i,y_i)\}_{i=1,\ldots,N} Z={(xi,yi)}i=1,,N

全量微调中优化目标: max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ ( y t ∣ x , y < t ) ) \max\limits_{\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))

LoRA优化目标: max ⁡ Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) \max\limits_{\Theta}\sum_{(x,y)\in\mathcal{Z}}\sum\limits_{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-3 175B时,可训练参数个数| θ ∣ θ| θ可小至 ∣ Φ 0 ∣ |Φ_0| Φ0 的 0.01%。

现有方法的问题

增加adapter层,对现有的输入层的结构进行调整

**adapter层引入推理延迟。**虽然可以通过修剪层或利用多任务设置来减少总体延迟(,但没有直接的方法可以绕过适配器层中的额外计算。这似乎不是问题,因为适配器层被设计为具有很少的参数(有时<原始模型的 1%),并且具有小的瓶颈尺寸,这限制了它们可以添加的 FLOPs。然而,大型神经网络依赖硬件并行性来保持低延迟,并且适配器层必须按顺序处理。这对在线推理设置产生了影响,其中批量大小通常小至 1。

直接优化Prompt很难。 我们观察到prefix tuning很难优化,并且其性能在可训练参数中非单调变化,证实了原始论文中的类似观察结果。更重要的是,缩短了可以训练的长度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法

动机:矩阵大部分都是满秩的,当适应特定任务时,预训练的语言模型具有较低的“内在维度”,尽管随机投影到较小的子空间,但仍然可以有效地学习。

在这里插入图片描述

【重要的图不能只看一遍】

前向传播

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

B ∈ R d × r B\in\mathbb{R}^{d\times r} BRd×r A ∈ R r × k A\in\mathbb{R}^{r\times k} ARr×k r < < m i n ( d , k ) r<<min(d,k) r<<min(d,k),在进行微调的时候 W 0 W_0 W0冻结,仅训练 Δ W ΔW ΔW

全量微调的推广

我们通过将LoRA等级r设置为预训练权重矩阵的等级来粗略地恢复完全微调的表现力。

无额外推理延迟

对于不同的任务,只是需要不同的BA罢了。 W = W 0 + B A W = W_0 + BA W=W0+BA

将 LORA 应用于 Transformer

这里只是考虑了将LoRA方法应用到Transformer中的注意力权重计算上,没有应用到其他层。

We leave the empirical investigation of adapting the MLP layers, LayerNorm layers, and biases to a future work.

对于GPT-3 175B来哦说,VRAM从1.2TB减少到350GB,r=4的时候,checkpoint的大小从350GB减小到35MB

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

实验

在这里插入图片描述

AdapterH:有两个完全连接的层,其中适配器层存在偏差,中间存在非线性。

AdapterL:仅在 MLP 模块和 LayerNorm 之后

LoRA:为了简化实验,只在Wq和Wv上面进行了应用, ∣ Θ ∣ = 2 × L L o R A × d m o d e l × r |Θ| = 2 × L_{LoRA} × d_model × r ∣Θ∣=2×LLoRA×dmodel×r

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

思考

请注意,低秩结构不仅降低了硬件进入门槛,使我们能够并行运行多个实验,而且还可以更好地解释更新权重与预训练权重的相关性

需要思考一下几个问题:

  1. 给定参数预算约束,我们应该调整预训练 Transformer 中的哪个权重矩阵子集来最大化下游性能?
  2. “最优”适应矩阵 ΔW 真的是非满秩的吗?如果是这样,在实践中使用多大的r比较好?
  3. ΔW 和 W 之间有什么关系? ΔW 与 W 高度相关吗? ΔW 与 W 相比有多大

作者认为对问题(2)和(3)的回答揭示了使用预训练语言模型进行下游任务的基本原则,这是 NLP 的一个关键主题。

在这里插入图片描述

在这里插入图片描述

后面的实验就没怎么关注,也没看懂

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结论

一种有效的适应策略,既不会引入推理延迟,也不会减少输入序列长度,同时保持高模型质量。重要的是,当它部署为服务时,通过共享绝大多数模型参数,可以实现快速任务切换。虽然我们专注于 Transformer 语言模型,但所提出的原理通常适用于任何具有密集层的神经网络。

future work

  1. Similarly, combining LoRA with other tensor product-based methods could potentially improve its parameter efficiency, which we leave to future work.
  2. LoRA 可以与其他有效的适应方法相结合,有可能提供正交改进
  3. 微调或 LoRA 背后的机制尚不清楚——如何将预训练过程中学到的特征转化为在下游任务上表现出色?我们相信 LoRA 比完全微调更容易回答这个问题。
  4. 我们主要依靠启发式方法来选择应用 LoRA 的权重矩阵。有没有更有原则性的方法来做?
  5. Finally, the rank-deficiency of ∆W suggests that W could be rank-deficient as well, which can also be a source of inspiration for future works.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双写一致性

双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 注意这里是对数据库进行写操作而不是读操作&#xff0c;通常我们有两种方式完成这个写操作&#xff0c;分别是&#xff1a;先删除缓存再修改数据库 和 先修改数据库再删除…

并发锁机制

JDK1.6 synchronized &#xff08;底层是由C实现的&#xff09;&#xff1a; synchronized: 互斥锁&#xff0c;悲观 锁&#xff0c;同步锁&#xff0c;重量级锁&#xff08;耗性能&#xff09;&#xff0c;多线程使用重量级锁很容易发生线程阻塞&#xff0c;因为涉及到多个线程…

elementUI的el-table自定义表头

<el-table-column label"昨日仪表里程(KM)" align"left" min-width"190" :render-header"(h, obj) > renderHeader(h, obj, 参数)" > <template slot-scope"scope"> <span>{{ scope.row.firstStartMil…

最新Springboot小程序医院核酸检测服务系统

采用技术 最新Springboot小程序医院核酸检测服务系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员页面 医护人员管理 普通管理员管理 接种进…

opencascade AIS_InteractiveContext源码学习4 object local transformation management

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

ASP .Net Core创建一个httppost请求并添加证书

ASP .Net Core创建一个httppost请求并添加证书 创建.net Core程序&#xff0c;使用自签名证书&#xff0c;可以处理https的get和post请求。 创建证书 创建自签名证书的流程可以在这里查看&#xff1a; https://blog.csdn.net/GoodCooking/article/details/139815278创建完毕…

STM32通过Flymcu串口下载程序

文章目录 1. Flymcu 2. 操作流程 2.1 设备准备 2.2 硬件连接 2.3 设置BOOT引脚 2.4 配置 2.5 下载程序 1. Flymcu Flymcu软件可以通过串口给STM32下载程序&#xff0c;如果没有STLINK的时候&#xff0c;就可以使用这个来烧录程序。软件不用安装&#xff0c;直接打开就行…

pytorch十大核心操作

PyTorch的十大核心操作涵盖了张量创建、数据转换、操作变换等多个方面。以下是结合参考文章信息整理出的PyTorch十大核心操作的概述&#xff1a; 张量创建&#xff1a; 从Python列表或NumPy数组创建张量。使用特定值创建张量&#xff0c;如全零、全一、指定范围、均匀分布、正…

qt开发-07_radioButton

QRadioButton 部件提供了一个带有文本标签的单选框&#xff08;单选按钮&#xff09;。 QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。 单选框通常呈现给用户一个“多选一”的选择。也就是说&…

在Ubuntu系统中部署Java及Spring Boot开发环境

选择Java及Spring Boot构建Web服务具有显著优势&#xff0c;Java的跨平台兼容性保证了服务可在不同操作系统上顺畅运行&#xff0c;而Spring Boot的成熟框架则大大简化了开发流程&#xff0c;减少了繁琐配置。此外&#xff0c;强大的社区支持、易于维护与扩展的特性、优异的性能…

机器学习——RNN、LSTM

RNN 特点&#xff1a;输入层是层层相关联的&#xff0c;输入包括上一个隐藏层的输出h1和外界输入x2&#xff0c;然后融合一个张量&#xff0c;通过全连接得到h2&#xff0c;重复 优点&#xff1a;结构简单&#xff0c;参数总量少&#xff0c;在短序列任务上性能好 缺点&#x…

浅谈医工交叉方向SCI写作

笔者因为工作性质原因&#xff0c;这几年写了不少医学人工智能方向的SCI论文&#xff0c;顺带每年相关的论文的阅读量也有小几百篇&#xff0c;特别是在医学影像AI方向&#xff0c;也算是小有心得&#xff0c;今天就简单聊一下医工交叉(影像AI)方向的SCI论文写作与投稿问题。 首…

计算机网络:应用层 - 域名系统 DNS

计算机网络&#xff1a;应用层 - 域名系统 DNS 域名结构域名服务器域名解析迭代查询递归查询 互联网中的每台设备都有一个唯一的IP地址&#xff0c;但这些地址通常是复杂的数字组合&#xff0c;例如 172.217.160.142&#xff0c;难以记忆和识别。域名系统将这些复杂的IP地址与易…

kafka基础概念

目录 1、kafka简介 2、kafka使用场景 3、kafka基础概念 3.1、消息 3.1.1、消息构成详解 3.1.2、消息存储设计 3.2、topic 3.3、partition 3.4、offset 3.5、replication 3.5.1、replication简介 3.5.2、副本角色 3.5.3、副本类型 3.5.3.1、副本类型简介 3.5.3.2、…

低代码平台实践:打造高效动态表单解决方案的探索与思考

&#x1f525;需求背景 我司业务同事在抓取到候选人的简历之后&#xff0c;经常会出现&#xff0c;很多意向候选人简历信息不完整&#xff0c;一个个打电话确认的情况&#xff0c;严重影响了HR的工作效率&#xff0c;于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

【Linux】使用ntpdate同步

ntpdate 是一个在 Linux 系统中用于同步系统时间的命令行工具&#xff0c;它通过与 NTP 服务器通信来调整本地系统时钟。然而&#xff0c;需要注意的是&#xff0c;ntpdate 已经被许多现代 Linux 发行版弃用。 安装 yum install -y ntpdate 查看时间 date同步时间 ntpdate ntp…

端口已被占用 1080

http://www.nirsoft.net/utils/cports.html#DownloadLinks 下载后解压&#xff0c;直接运行cports.exe. 这里写图片描述 找到被占用的端口&#xff0c;右键选择 “Close Selected TCP Connections”

python使用pyautogui自动化模拟鼠标、键盘操作、截屏、识别图片位置

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

Spring Boot集成tensorflow实现图片检测服务

1.什么是tensorflow&#xff1f; TensorFlow名字的由来就是张量(Tensor)在计算图(Computational Graph)里的流动(Flow)&#xff0c;如图。它的基础就是前面介绍的基于计算图的自动微分&#xff0c;除了自动帮你求梯度之外&#xff0c;它也提供了各种常见的操作(op&#xff0c;…

Redis通用命令详解

文章目录 一、Redis概述1.1 KEYS&#xff1a;查看符合模板的所有 key1.2 DEL&#xff1a;删除一个指定的 key1.3 EXISTS&#xff1a;判断 key 是否存在1.4 EXPIRE&#xff1a;给一个 key 设置有效期&#xff0c;有效期到期时该 key 会被自动删除1.5 TTL&#xff1a;查看一个 ke…