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

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!

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

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

相关文章

28.JavaWeb-Elasticsearch

1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发&#xff0c;基于Apache协议的开源项目&#xff0c;具有实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速的特点。 1.1 全文检索引擎 分为通用搜索引擎&#xff08;百度、谷歌&…

基于Java+SpringBoot+vue前后端分离在线商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

java项目之人事管理系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的人事管理系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

【MySQL进阶(一)】MySQL在Linux中的配置信息和数据备份工具

MySQL在Linux中安装的话可以看这篇博客&#xff1a;MySQL在Linux中的安装&#xff0c;我觉得总结的很好。 my.cnf 中的配置信息 当 MySQL 启动的时候&#xff0c;会从安装目录中加载软件数据&#xff0c;即使用 mysqld 工具初始化设置的 --basedir&#xff0c;会从数据目录中…

【iOS】—— block,KVC,KVO,Category等问题解答

文章目录 block1.block的原理是怎样的&#xff1f;本质是什么&#xff1f;2.__block的作用是什么&#xff1f;有什么使用注意点&#xff1f;3.block的属性修饰词为什么是copy&#xff1f;使用block有哪些使用注意&#xff1f;4.block在修改NSMutableArray&#xff0c;需不需要添…

不止工具:音视频开发「利器」的新机遇

Boxing的制胜关键是快、准、稳&#xff0c;与“音视频开发”有异曲同工之妙。 数字化浪潮席卷、视频化形态加速、终端性能挑战加剧、端侧算力遭遇瓶颈...... 是否存在一种可能性&#xff0c;让所有企业从复杂的音视频开发工程中抽身&#xff0c;重新回归业务本身&#xff1f; …

消息队列总结(3)- RabbitMQ Kafka RocketMQ高可用方案

目录 1. 什么是高可用&#xff1f; 1.1 常见的高可用方法 1.2 消息队列的高可用 2. RabbitMQ的高可用方案 2.1 镜像队列 2.2 消息生产的确认机制 2.3 消息的持久化 3. Kafka的高可用方案 3.1 消息备份 3.2 ISR & IEO & HW 3.3 消息生产的确认机制 4. Rocke…

微信小程序开发使用echarts报错Cannot read property ‘getAttribute‘ of undefined

如图&#xff0c;我在小程序圈中的区域渲染echarts图标报错了&#xff0c;报错提示Cannot read property getAttribute of undefined 这里的canvas &#xff0c;width ,height,dpr获取为 undefined 分析问题&#xff1a; 初始化图表时传递错误的参数&#xff1a; 在 onShow 生…

Vue第四篇:html和js基础知识查漏补缺

1、a标签 定义超链接&#xff0c;用于从一个页面链接到另一个页面 target属性&#xff1a;打开目标URL的方式&#xff0c;_top为再当前窗口打开&#xff0c;_blank为新窗口打开 2、span标签 对文档中的行内元素进行组合&#xff0c;它提供了一种将文本的一部分或者文档的一部分…

MySQL 数据抽稀 每分钟取一条

假如原始数据为每5秒一个数据&#xff0c;现在想展示为每4分钟一条数据&#xff0c;先按照分钟数把除以4余数为0的行选出来&#xff0c;在按照 年月日 时分&#xff0c;做组内排序&#xff08;窗函数ROW_NUMBER&#xff09;&#xff0c;最后再拿出序号为1的行。 WITH data_01 …

了解Unity编辑器之组件篇UI(一)

UI组件&#xff1a;提供了用户交互&#xff0c;信息展示&#xff0c;用户导航等功能 一、Button&#xff1a;用于响应用户的点击事件 1.Interactable&#xff08;可交互&#xff09;&#xff1a;该属性控制按钮是否可以与用户交互&#xff0c;如果禁用则按钮无法被点击。可以通…

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…

ubuntu挂载ext4文件系统

文章目录 1.虚拟机分配10G磁盘用来挂载ext4文件系统2.磁盘分区3.创建文件系统4.挂载文件系统5.卸载文件系统6.使用ior测试ext4三种日志模式&#xff08;1&#xff09;ordered&#xff08;2&#xff09;journal&#xff08;3&#xff09;writeback 1.虚拟机分配10G磁盘用来挂载e…

Flutter动画库:animations(路由过渡动画或者页面切换动画)

animations animations 是一个 Flutter 库&#xff0c;它提供了一组用于创建动画效果的工具和组件。这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 flutter pub add animations看了下官方文档和官方例子&a…

【深度学习】【Image Inpainting】Free-Form Image Inpainting with Gated Convolution

模型&#xff1a;DeepFillv2 (CVPR’2019) 论文&#xff1a;https://arxiv.org/abs/1806.03589 代码&#xff1a;https://github.com/JiahuiYu/generative_inpainting 文章目录 效果AbstractIntroductionRelated WorkAutomatic Image InpaintingGuided Image Inpainting and Sy…

第1章 获取数据库中的数据

CoreShop源程序是以数据库优先进行定义的&#xff0c;所以其本身不包含代码优先的定义&#xff0c;但本从更习惯于代码优先&#xff0c;所以为其定义了代码优先的定义。 1 CoreCms.Net.Model.Entities.SysRole using SqlSugar; using System.ComponentModel.DataAnnotations…

三十章:Segmenter:Transformer for Semantic Segmentation ——分割器:用于语义分割的Transformer

0.摘要 图像分割在单个图像块的级别上经常存在歧义&#xff0c;并需要上下文信息来达到标签一致性。在本文中&#xff0c;我们介绍了一种用于语义分割的Transformer模型- Segmenter。与基于卷积的方法相比&#xff0c;我们的方法允许在第一层和整个网络中对全局上下文进行建模。…

《PyTorch深度学习实践》

文章目录 1.线性模型2.梯度下降算法3.反向传播3.1原理3.2Tensor in PyTorch 4.用PyTorch实现线性模型 1.线性模型 2.梯度下降算法 # 梯度下降x_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0]w 3.0def forward(x):return x*w# 损失函数 def cost(xs,ys):cost 0for x,y in zip(x…

基于 Flink SQL CDC 数据处理的终极武器

文章目录 一、传统的数据同步方案与 Flink SQL CDC 解决方案1.1 Flink SQL CDC 数据同步与原理解析1.2 基于日志的 CDC 方案介绍1.3 选择 Flink 作为 ETL 工具 二、 基于 Flink SQL CDC 的数据同步方案实践2.1 CDC Streaming ETL2.2 Flink-CDC实践之mysql案例 来源互联网多篇文…

华为OD机试真题 Java 实现【文件目录大小】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、再输入5、再输出6、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题…