【深度学习】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;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

对于着色器语言 opengl 和 direct3d 有区别吗?

OpenGL和Direct3D是两种不同的图形API&#xff08;应用程序接口&#xff09;&#xff0c;它们都支持着色器编程&#xff0c;但在语法、结构和一些功能细节上存在差异。 OpenGL着色器语言&#xff1a; OpenGL使用GLSL (OpenGL Shading Language) 作为其着色器编程语言。GLSL可以…

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

文章目录 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 前言 &…

vue实现列表自动滚动效果

1.下载插件 npm install vue-seamless-scroll --save 2.在main.js中引入注册 import scroll from vue-seamless-scroll Vue.use(scroll) 3.在页面中使用&#xff08;写一个固定的表头 el-table:show-header"status" 设置为false,自带的表头不显示&#xff09; <…

什么是单例模式?

单例模式&#xff0c;属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例&#xff08;根据需要&#xff0c;也有可能一个线程中属于单例&#xff0c;如&#xff1a;仅线程上下文内使用同一个实例&#xff09; 数学与逻辑学中&#xff…

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导出现有…

【Numpy】P1 概述与安装

目录 概述安装Windows MacOS 环境下Linux 环境下 概述 NumPy&#xff08;Numerical Python&#xff09;&#xff0c;是一个对 Python 进行增强的库。它为 Python 提供了强大的多维数组对象和丰富的数学函数库&#xff0c;主要用于处理高维数组和矩阵计算。其核心功能包括&…

1、什么是ETF?

ETF是Exchange Traded Fund的英文缩写&#xff0c;中文称为“交易型开放式指数基金”&#xff0c;又称“指数股”。ETF是一种指数投资工具&#xff0c;通过复制标的指数来构建跟踪指数变化的组合证券&#xff0c;使得投资者通过买卖一种产品就实现了一揽子证券的交易。简单来说…

TCP Keepalive 和 HTTP Keep-Alive

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

xlsx处理库对比总结

XInt libxlsxwriter 只能用于创建 XLSX 文件&#xff0c;不支持读取或修改现有的 Excel 文件。 OpenXLSX 主要用于R语言。 中文需处理编码&#xff1a;https://blog.csdn.net/u010986241/article/details/105044929 LibXL 收费 xlslib 只能写Excel文件 libxls 只能读…

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

十年以来&#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…

C++ Linux:常用的文件、目录操作命令使用

在面试中&#xff0c;掌握基本的文件和目录操作命令是非常重要的&#xff0c;尤其是在Unix或Linux环境下。这些命令不仅在日常工作中非常实用&#xff0c;也能体现出你对操作系统的熟练程度。以下是一些常用的文件和目录操作命令及其用法的详细说明&#xff1a; 1. 文件操作命…