【深度学习】LoRA: Low-Rank Adaptation of Large Language Models,论文解读

文章:
https://arxiv.org/abs/2106.09685

文章目录

  • 摘要
  • 介绍
  • LoRA的特点
  • 什么是低秩适应矩阵?什么是适应阶段?
  • 低秩适应矩阵被注入到预训练模型的每一层Transformer结构中,这一步是如何做到的?

摘要

自然语言处理的一个重要范式是在通用领域数据上进行大规模预训练,并适应特定任务或领域。随着我们预训练更大的模型,全面微调,即重新训练所有模型参数,变得不太可行。以GPT-3 175B为例 - 部署独立的微调模型实例,每个模型有175B个参数,成本过高。我们提出了低秩适应,或LoRA,它冻结了预训练模型的权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。与使用Adam微调的GPT-3 175B相比,LoRA可以将可训练参数数量减少10,000倍,GPU内存需求减少3倍。LoRA在RoBERTa、DeBERTa、GPT-2和GPT-3的模型质量上表现出与微调相当或更好的性能,尽管它具有更少的可训练参数、更高的训练吞吐量,并且与适配器不同,没有额外的推理延迟。我们还对语言模型适应中的秩缺失进行了实证研究,这揭示了LoRA的有效性。我们发布了一个软件包,可以方便地将LoRA与PyTorch模型集成,并在https://github.com/microsoft/LoRA 上提供我们的RoBERTa、DeBERTa和GPT-2的实现和模型检查点。

介绍

许多自然语言处理中的应用依赖于将一个大规模、预训练的语言模型适应到多个下游应用程序。这种适应通常通过微调来完成,微调会更新预训练模型的所有参数。微调的主要缺点是新模型包含与原始模型一样多的参数。随着每隔几个月训练更大的模型,这从仅仅是对于GPT-2(Radford等,b)或RoBERTa大型(Liu等,2019)的一个“不便”变成了对于具有1750亿个可训练参数的GPT-3(Brown等,2020)的一个关键的部署挑战。

许多人试图通过仅适应一些参数或为新任务学习外部模块来缓解这一挑战。这样,我们只需要在每个任务中存储和加载一小部分与任务相关的参数,除了预训练模型,这样在部署时可以大大提高操作效率。然而,现有的技术往往通过扩展模型深度或减少模型可用序列长度(Li&Liang,2021;Lester等,2021;Hambardzumyan等,2020;Liu等,2021)(第3节)引入推理延迟。更重要的是,这些方法往往无法与微调基线相匹配,提出了效率和模型质量之间的折衷。

我们受到Li等人(2018a)和Aghajanyan等人(2020)的启发,他们表明学习的过度参数化模型实际上驻留在低固有维度上。我们假设模型适应期间权重的变化也具有低“固有秩”,这导致了我们提出的低秩适应(LoRA)方法。LoRA允许我们通过优化适应期间密集层的秩分解矩阵间接地训练一些密集层,同时保持预训练权重冻结,如图1所示。以GPT-3 175B为例,我们展示了即使在完整秩(即d)高达12,288时,非常低的秩(即图1中的r可以是一或两)也足以满足要求,使LoRA在存储和计算方面都非常高效。LoRA具有几个关键优势。

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

在这里插入图片描述

LoRA的特点

低秩适应矩阵:在适应阶段,LoRA引入了一个低秩矩阵,将其与预训练的权重矩阵相乘,以生成适应后的权重。这个低秩矩阵的引入使得适应过程中的参数数量大大减少,从而降低了计算成本和内存需求。

参数共享:LoRA允许大部分模型参数在不同任务之间进行共享,只有少量参数需要在适应特定任务时进行微调。这种参数共享的机制使得在部署时可以快速切换任务,而无需针对每个任务都维护独立的模型实例。

无额外推理延迟:在部署时,可以通过计算和存储适应后的权重矩阵来执行推理,而无需额外的推理延迟。当需要切换到另一个任务时,可以通过简单的操作来恢复原始的权重矩阵,实现快速任务切换。

与其他方法的结合:LoRA是一种灵活的适应策略,可以与其他高效适应方法结合使用,从而进一步提升模型性能。例如,可以将LoRA与前缀调整等方法相结合,实现更好的适应效果。

什么是低秩适应矩阵?什么是适应阶段?

低秩适应矩阵是指在LoRA(Low-Rank Adaptation)中引入的一种机制,用于在适应阶段对预训练模型进行调整以适应特定任务或领域。在适应阶段,低秩适应矩阵被注入到预训练模型的每一层Transformer结构中,以减少可训练参数的数量,从而降低计算成本和内存需求。

具体来说,适应阶段是指在将预训练模型应用于特定任务之前的阶段,其中通过引入低秩适应矩阵来对模型进行微调以适应任务的需求。在适应阶段,预训练模型的权重被冻结,而低秩适应矩阵则被训练以调整模型以适应新任务。通过这种方式,可以在不重新训练所有模型参数的情况下实现对模型的有效调整,从而提高了适应的效率和速度。

低秩适应矩阵是LoRA中的关键组成部分,用于在适应阶段对预训练模型进行调整,以实现高效的任务适应和模型优化。适应阶段是指在应用模型于特定任务之前的阶段,其中通过引入低秩适应矩阵来对模型进行微调以适应任务的需求。

低秩适应矩阵被注入到预训练模型的每一层Transformer结构中,这一步是如何做到的?

在LoRA中,低秩适应矩阵被注入到预训练模型的每一层Transformer结构中是通过以下步骤实现的:

  1. 选择注入层:首先,确定要将低秩适应矩阵注入的Transformer模型的每一层。通常,这些层包括Self-Attention层和前馈神经网络(Feed-Forward Neural Network)层。

  2. 构建低秩适应矩阵:为每个选择的层构建低秩适应矩阵。这些矩阵通常由两个较小的矩阵相乘得到,其中一个矩阵的维度较小,从而降低了参数数量。

  3. 将低秩适应矩阵与权重矩阵相乘:在适应阶段,将构建的低秩适应矩阵与每一层的权重矩阵相乘,以生成适应后的权重矩阵。这样可以在保持模型结构的同时,通过调整低秩矩阵的参数来实现对模型的微调。

  4. 训练低秩适应矩阵:在训练过程中,通过优化算法(如梯度下降)来调整低秩适应矩阵的参数,以最大程度地适应特定任务或领域的需求。这样可以在不改变预训练模型大部分参数的情况下,实现对模型的有效调整。

通过以上步骤,低秩适应矩阵可以被成功注入到预训练模型的每一层Transformer结构中,从而实现对模型的高效适应和优化。这种注入机制使得在适应阶段可以快速调整模型以适应特定任务的需求,同时保持模型的整体结构和质量。

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

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

相关文章

计算机网络-网络互联与互联网(一)

1.常用网络互联设备: 1层物理层:中继器、集线器2层链路层:网桥、交换机3层网络层:路由器、三层交换机4层以上高层:网关 2.网络互联设备: 中继器Repeater、集线器Hub(又叫多端口中继器&#xf…

图论(算法竞赛、蓝桥杯)--Dijkstra算法最短路

1、B站视频链接&#xff1a;D02 最短路 Dijkstra 算法_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】单源最短路径&#xff08;弱化版&#xff09; - 洛谷 #include <bits/stdc.h> using namespace std; #define INF 2147483647 int n,m,s,a,b,c; const int N100010…

Redis的主从复制和哨兵模式

Redis的主从复制和哨兵模式 Redis集群搭建&#xff08;一主二从&#xff09;replication 主从复制配置文件 redis.confRedis主从复制工作原理全量复制增量复制redis主从复制策略 搭建集群 &#xff08;主从复制引入&#xff09; 哨兵模式概念哨兵配置文件 sentinel.conf哨兵配置…

ArcgisForJS如何使用ArcGIS Server发布的切片地图服务?

文章目录 0.引言1.准备海量地理数据2.ArcGIS Server发布切片地图服务3.ArcgisForJS使用ArcGIS Server发布的切片地图服务 0.引言 ArcGIS Server是一个由Esri开发的地理信息系统&#xff08;GIS&#xff09;服务器软件&#xff0c;它提供了许多功能&#xff0c;包括发布切片地图…

java面试设计模式篇

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

挑战杯 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

Oracle迁移到mysql-导出mysql所有索引和主键

导出建库表索引等&#xff1a; [rootlnpg ~]# mysqldump -ugistar -pxxx -h192.168.207.143 --no-data -d lndb > lndb20230223-1.sql 只导出索引&#xff1a;参考&#xff1a;MYSQL导出现有库中的索引脚本_mysql 导出数据库所有表的主键和索引-CSDN博客 -- MYSQL导出现有…

TCP Keepalive 和 HTTP Keep-Alive

HTTP 的Keep-Alive 在 HTTP 1.0 中默认是关闭的&#xff0c;如果浏览器要开启 Keep-Alive&#xff0c;它必须在请求的包头中添加&#xff1a; Connection: Keep-Alive然后当服务器收到请求&#xff0c;作出回应的时候&#xff0c;它也添加一个头在响应中&#xff1a; Connec…

相信未来:技术的进步意味着重构

十年以来&#xff0c;呼声最高&#xff1a;AI、BigData、Cloud Service。 以本人看来&#xff0c;仅AI技术的进步和应用&#xff0c;整个软件行业&#xff0c;所有软件将被重构。 提醒&#xff1a;非大学毕业、非计算机及相关专业&#xff0c;在IT这个行业&#xff0c;特别是…

主流开发语言和开发环境:探索编程世界的基础

在当今这个快速发展的技术时代&#xff0c;软件开发已经成为推动创新的重要力量。无论是构建下一代应用、开发先进的算法还是创建复杂的系统&#xff0c;选择合适的编程语言和开发环境都是至关重要的。在本文中&#xff0c;我们将探讨当前流行的几种主流开发语言以及它们常用的…

MATLAB使用绘图plot制作动态GIF

文章目录 1 前言2 DemoDemo 1 - 不使用函数Demo 2 - 使用函数 1 前言 在PPT展示或者博客创作中&#xff0c;有时需要插入动态图如GIF&#xff0c;来演示算法效果或者结果。在MATLAB中&#xff0c;可以通过一些代码&#xff0c;将绘图plot转化为动态的GIF。 其大致方法为&…

【MySQL】如何理解事务

一、引出事务 假设我们有一张用户表&#xff0c;如图所示&#xff1a; 我们现在的需求是&#xff1a;小红向小明转账100块 那么我们可以执行如下指令&#xff1a; update user set salary salary-100 where id1;//第一条语句小红转一百 update user set salary salary100 …

学习使用在mysql中查询指定字段字符串包含多个字符串的方法

学习使用在mysql中查询指定字段字符串包含多个字符串的方法 使用LIKE关键字使用REGEXP关键字使用FIND_IN_SET函数使用INSTR函数和AND关键字 使用LIKE关键字 SELECT * FROM table_name WHERE column_name LIKE %string1% AND column_name LIKE %string2%;使用LIKE关键字&#x…

RabbitMQ(一):消息队列MQ

目录 1 消息队列MQ1.1 MQ简介1、什么是MQ2、MQ的优势流量削峰应用解耦异常处理数据分发分布式事务 3、消息中间件的弊端4、常用的MQ 1.2 MQ中几个基本概念1.3 MQ的通信模式1.4 消息的发布策略1.5 常用消息中间件协议1、AMQP协议2、MQTT协议3、OpenMessage协议4、kafaka协议 1 消…

TiDB 社区智慧合集丨TiDB 相关 SQL 脚本大全

非常感谢各位 TiDBer 在之前 【TiDBer 唠嗑茶话会 48】非正式 TiDB 相关 SQL 脚本征集大赛&#xff01;( https://asktug.com/t/topic/996635 )里提供的各种常用脚本。 在这篇文章中&#xff0c;我们整理了社区同学提供的一系列 TiDB 相关 SQL 脚本&#xff0c;希望能为大家在…

APP被针对攻击了,要怎么解决

随着APP行业的兴起&#xff0c;游戏公司异军突起&#xff0c;不管是在控证还是攻击方面都是属于最复杂的一个场面&#xff0c;游戏APP逐渐成为DDOS流量攻击的“重灾区”。没有提前做好了解就盲目进军游戏APP行业&#xff0c;一旦被攻击就会让公司束手无策。那么&#xff0c;刚上…

OpenAI视频生成模型Sora的全面解析:从ViViT、Diffusion Transformer到NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

ubuntu20.04 安装 matlab R2023b

ubuntu20.04 使用matlab R2023b 起因步骤问题问题1问题2问题3 起因 闲着没事&#xff0c;想在ubuntu上安装matlab。 步骤 这个博客写得很好&#xff0c;我就不赘述了&#xff1a;参考博客 。但有点不一样&#xff1a;我现在matlab官网上下载的linux版本不是iso镜像文件&…

Redis实现滑动窗口限流

常见限流算法 固定窗口算法 在固定的时间窗口下进行计数&#xff0c;达到阈值就拒绝请求。固定窗口如果在窗口开始就打满阈值&#xff0c;窗口后半部分进入的请求都会拒绝。 滑动窗口算法 在固定窗口的基础上&#xff0c;窗口会随着时间向前推移&#xff0c;可以在时间内平滑控…

基于yolov5的苹果检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的苹果检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的苹果检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目&#xf…