论文阅读之LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS(2021)

news2024/11/18 9:30:22

文章目录

  • 论文地址
  • 主要内容
  • 主要贡献
  • 模型图
  • 技术细节
  • 实验结果

论文地址

LORA: LOW-RANK ADAPTATION OF LARGE LAN-
GUAGE MODELS

主要内容

这篇文章的主要内容是介绍了一种名为LoRA(Low-Rank Adaptation)的技术,这是一种针对大型语言模型进行低秩适应的方法。LoRA的核心思想是在预训练模型的基础上,通过注入可训练的低秩分解矩阵到Transformer架构的每一层,而不是对所有模型参数进行微调(fine-tuning),从而大幅减少下游任务的可训练参数数量。这种方法在保持预训练权重不变的情况下,通过优化低秩矩阵来间接训练密集层的权重更新。

文章通过实验表明,LoRA在多个NLP任务上的表现与完全微调相当,甚至在某些情况下更优。LoRA的主要优势包括:

显著减少了可训练参数的数量,例如,与GPT-3 175B微调相比,LoRA可以将可训练参数减少10,000倍。
降低了GPU内存需求,提高了训练效率。
由于LoRA的简单线性设计,可以在部署时将训练矩阵与冻结权重合并,从而不会引入额外的推理延迟。
LoRA与许多现有方法正交,可以与它们结合使用,例如前缀微调(prefix-tuning)。
此外,文章还提供了对LoRA的实证研究,探讨了在语言模型适应中秩不足性的作用,并解释了LoRA的有效性。作者还发布了一个包,方便将LoRA与PyTorch模型集成,并提供了RoBERTa、DeBERTa和GPT-2的实现和模型检查点。

主要贡献

文章的主要贡献可以总结为以下几点:

1.LoRA方法的提出:文章提出了一种新的低秩适应(Low-Rank Adaptation, LoRA)方法,用于在不重新训练所有参数的情况下,对大型预训练语言模型进行有效适应。这种方法通过在Transformer架构的每一层注入可训练的低秩矩阵来实现,从而大幅减少了下游任务的可训练参数数量。

2.显著降低参数数量和内存需求:LoRA能够将可训练参数的数量减少10,000倍,同时将GPU内存需求降低3倍,这使得在资源受限的环境中部署和使用大型模型变得更加可行。

3.保持或提升模型性能:尽管LoRA减少了可训练参数的数量,但它在多个NLP任务上的性能与完全微调相当或更好,这表明LoRA是一种高效的模型适应方法。

4.无额外推理延迟:LoRA的设计允许在部署时将训练矩阵与冻结权重合并,这意味着在推理时不会引入额外的计算延迟,这与完全微调的模型相比是一个显著优势。

5.与现有技术的兼容性:LoRA可以与许多现有的模型适应技术结合使用,如前缀微调(prefix-tuning),这增加了LoRA的灵活性和实用性。

6.实证研究:文章提供了对LoRA方法的实证研究,探讨了在语言模型适应中秩不足性的作用,并解释了LoRA的有效性。

7.资源和工具的发布:作者发布了一个包,方便将LoRA与PyTorch模型集成,并提供了RoBERTa、DeBERTa和GPT-2的实现和模型检查点,这为研究社区提供了宝贵的资源。

总的来说,文章的主要贡献在于提出了一种新的、高效的大型语言模型适应方法,这种方法在减少资源消耗的同时,保持了模型的性能,并且易于与现有技术结合使用。

模型图

在这里插入图片描述
言简意赅
左边预训练模型权重不动
只训练右边的A和B

技术细节

假设预训练模型要进行常规全参数微调
在这里插入图片描述
其中Φ表示模型的参数,x表示输入,y表示输出
在这里插入图片描述
表示进行微调任务的数据集
此时我们需要调整的参数就是全参数:
在这里插入图片描述
如果是175B的模型,微调一个下游任务的模型,每次都要调整这么多参数,工作量巨大。

但是使用LoRA技术的话
在这里插入图片描述
预训练模型的参数都冻结,不调整
只是额外加一组小小的参数
也能做到和下游任务适配
在这里插入图片描述
而此时需要调整的参数远远小于预训练模型的参数
在这里插入图片描述
也就是说此时需要调整的参数很小。

文章主要聚焦于将LoRA在transformer注意力机制上进行使用,因为这也是transformer的精髓
在这里插入图片描述

在这里插入图片描述
分别用于表示四个线性层的参数。
在这里插入图片描述
用于表示预训练模型的参数
在这里插入图片描述
是自适应过程中的累积梯度更新
r就是低秩矩阵的秩

例如我们在
W上加个LoRA
在这里插入图片描述
假设W0为512*512
就单单只看这部分的话
全参数微调需要调整512*512 = 262144个参数
使用LoRA后,这262144个参数就冻结了
此时增加两个低秩矩阵 例如512*2和2*512
那么此时需要调整的参数大小就为512*2+2*512 = 2048个参数
2048 / 262144 = 0.0078125
此时要训练的参数就减少了许多

而且,当我们面对不同的下游任务时,因为原本的预训练模型是冻结的,所以预训练模型用一个就行,只需要保存的参数就是加入的低秩矩阵,这样的话,也能节省大量的存储空间。

可以看个伪代码:

class LowRankMatrix(nn.Module):
    def __init__(self, weight_matrix, rank, alpha=1.0):
        super(LowRankMatrix, self).__init__()
        self.weight_matrix = weight_matrix
        self.rank = rank
        self.alpha = alpha / rank  # 将缩放因子与秩相关联
        # 初始化低秩矩阵A和B
        self.A = nn.Parameter(torch.randn(weight_matrix.size(0), rank), requires_grad=True)
        self.B = nn.Parameter(torch.randn(rank, weight_matrix.size(1)), requires_grad=True)

    def forward(self, x):
        # 计算低秩矩阵的乘积并添加到原始权重上
        # 应用缩放因子
        updated_weight = self.weight_matrix + self.alpha * torch.mm(self.B.t(), self.A)
        return updated_weight

α和r用于缩放矩阵,帮助更好的训练

A矩阵使用随机高斯初始化
B矩阵初始化为0

实验结果

在这里插入图片描述
LoRA相较于Adapter不会显著增加推理的时间。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
LoRA效果好
在这里插入图片描述
LoRA一起用到Wq和Wv效果比较好

在这里插入图片描述
低秩已足够

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

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

相关文章

0201线性方程组和矩阵-矩阵及其运算-线性代数

文章目录 一、线性方程组二、矩阵的定义结语 一、线性方程组 设有 n 个未知数 m n个未知数m n个未知数m个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 , a 21 x 1 a 22 x 2 ⋯ a 2 n x n b 2 , ⋯ a m 1 x 1 a m 2 x 2 ⋯ a m n x n b m , \begin{ca…

Microsoft Edge 中的 Internet Explorer 模式解决ie禁止跳转到edge问题

作为网工,网络中存在很老的设备只能用ie浏览器访问打开,但是win10后打开Internet Explorer 会强制跳转到Edge 浏览器,且有人反馈不会关,为此找到了微软官方的Microsoft Edge 中的 Internet Explorer 模式,可以直接在Mi…

Pytest测试框架+allure+jenkins自动化持续集成

Pytest是python的一种单元测试框架,可通过pytest 目录路径来运行测试用例 可以通过断言assert来测试是否通过 1.pytest测试用例命名规范 需严格遵循此规范,不然使用 pytest 目录 来运行会找不到该条测试用例。 可通过这样定义main函数&#xf…

OpenHarmony游戏应用程序-实现的一个手柄游戏

介绍 本篇Codelab是基于TS扩展的声明式开发范式编程语言,以及OpenHarmony的分布式能力实现的一个手柄游戏。 说明: 本示例涉及使用系统接口,需要手动替换Full SDK才能编译通过。 完成本篇Codelab需要两台开发板,一台开发板作为游…

python 函数(解包**、互相调用、作用域、函数的封装、内置函数:eval()、zip()、文件处理open())

函数解包 """ 1、函数的注释:参数和返回值 在注释里可以自动添加显示,只需手动加说明。2、函数的解包【拆包】:函数的参数要传递数据有多个值的时候,中间步骤拿到数据 保存在元组或者列表 或者字典里。 - 传递参数…

【超全详解】Maven工程配置与常见问题解决指南

Maven工程 目录 Maven工程一、如何检查Maven工程是否配置正确?1、检查路径2、检查基本配置3、其他配置 二、Maven的基本操作基本操作install和package的区别 三、获取别人的Maven工程之后如何修改?四、如何正确写好配置文件?1.寻找配置资源2.…

css的active事件在手机端不生效的解决方法

需求:需求就是实现点击图中的 “抽奖” 按钮,实现一个按钮Q弹的放大缩小动画 上面是实现的效果,pc端,点击触发 :active 问题:但是这种方式在模拟器上可以,真机H5一调试就没生效了,下面是简单…

图像几何变换(仿射变换和透视变换...)及python-opencv实现

文章目录 图像变换类型仿射变换透视变换python-opencv实现参考文献 图像变换类型 图像几何变换主要包括以下几种类型: 平移(Translation):将图像在水平或垂直方向上移动,不改变图像的尺寸和形状。缩放(Sca…

【深度学习】基于机器学习的无机钙钛矿材料形成能预测,预测形成能,神经网络,回归问题

文章目录 任务分析数据处理处理离散数值处理缺失值处理不同范围的数据其他注意事项 我们的数据处理模型训练网页web代码、指导 任务分析 简单来说,就是一行就是一个样本,要用绿色的9个数值,预测出红色的那1个数值。 数据处理 在进行深度数…

linux命令详解——uniq,wc,tr

uniq uniq可以对查看内容去重 但在我们使用时会发现,uniq的去重逻辑是,当遇到连续多行内容相同时,去除重复行,而对间隔重复内容,无法实现去重功能 这里想到可以将sort与uniq结合使用,先对文件内容进行排序…

Visual Studio 插件 AnAPI++ for VS 2022

Anmial API abbreviation AnAPIis an automatically generated WebAPI project that has encapsulated Jwt Oauth2 token authentication, SqlSugar, Swagger, Nlog, Cross domain technologies, and supports Net6 and above versions Anmial API缩写AnAPI是一个自动生成的Web…

嵌入式开发--STM32G431RBTx-定时器中断流水灯

嵌入式开发–STM32G431RBTx-定时器中断流水灯 定时器工作原理 如图有反映stm32g431的定时器资源。 共10个定时器 定时器定时器类型个数TIM6,7基本定时器2TIM2,3,4全功能通用定时器3TIM15,16,17通用定时器(只有1或2个…

uniapp安装axios

先npm安装 npm i axios然后在项目里面建一个utils文件,再建一个index.js 以下是index.js代码: import axios from axios; const service axios.create({baseURL: //xxxx.xxxxx.com///你的请求接口域名, timeout: 6000, // request timeoutcrossDomai…

2024年通信工程专业-毕业论文

2024年毕业设计-通信专业VoLTE掉话分析资源-CSDN文库 毕业设计 ----移动通信中VoLTE信令流程分析 学生姓名 专业班级 学 号 指导教师 完成时间 …

比一比gitee、gitlab、github

gitee、gitlab、github,哪个是目前国内大型公司使用最多的呢?共同点:三者都是基于git的代码托管工具,都支持版本管理。 gitee:适合国内开发者,更友好的本地化服务,形成了一个适合中国宝宝学习的…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(十二) 43、sqlite3_reset sqlite3_reset 函数用于重置已经编…

【云呐】事业单位资产盘点报告总结怎么写

事业单位固定资产盘点报告总结主要内容包括:  一、概述  说明本次盘点的目的和任务  明确盘点范围(如某处所有固定资产)  说明盘点时间(起止日期)  二、准备工作  组建盘点工作组  制定盘点计划和工作流程  录入联网资产管理系统或编制盘点清单  三、盘点实施…

一站式App流量统计,Xinstall助您洞悉用户行为

在如今的移动互联网时代,App的推广和运营对于开发者来说至关重要。然而,想要精准掌握App的流量情况,却并不是一件容易的事情。这时,一款强大的App流量统计工具就显得尤为重要。而Xinstall,正是这样一款能够帮助开发者轻…

后端项目中构建前端模块问题记录

后端项目中在登陆页面使用jsp,后端项目会通过接口返回给前端几个js的路径,这几个js呢,是由后端先构建好,然后返回给前端路径的,前端通过这个路径访问js执行。。。 总之,很奇怪的项目。。 1、首先要安装no…

selenium自动化登录模块HTMLTestRunner测试报告

1.下载HTMLTestRunner.py放到python的Lib目录下,python3之后的,文件要修改以下内容: 第94行,将import StringIO修改成import io 第539行,将self.outputBuffer StringIO.StringIO()修改成self.outputBuffer io.Strin…