LoRA:低秩自适应

LoRA:低秩自适应

本章节是对轻松上手微调大语言模型——QLORA篇中提到的LoRA的原理解释。

背后动机

现今模型的参数量变得越来越大,对预训练模型进行全微调变得越来越不可行。为了解决这个问题有了LoRA(Low-Rank Adaption)的诞生。将可训练的秩分解矩阵注入到每个模型中架构的层,极大的减少下游任务的训练参数量。以GPT-3 175B微调为例,相较于以Adam微调的GPT-3 175B, LoRA 可以减少10000倍训练参数,并且所需的GPU内存减少3倍。

LORA的优势:

  • LoRA 通过大幅减少可训练参数的数量,使微调更加高效。
  • 原始预训练权重保持冻结状态,这意味着您可以拥有多个轻量级、便携式 LoRA 模 型,用于在其之上构建的各种下游任务。
  • LoRA可以与其他许多方法结合使用,比如Prefix-tuning。
  • 使用 LoRA 微调的模型的性能与完全微调的模型的性能相当

思想

在这里插入图片描述

假设我们有权重位 W 0 W_0 W0密集层,以梯度 ∇ W 0 \nabla W_0 W0更新。则新的权重为:
W 1 = W 0 + ∇ W 0 W_1=W_0+\nabla W_0 W1=W0+W0
经过 n n n次梯度下降得到:
W 2 = W 1 + ∇ W 1 W 3 = W 2 + ∇ W 2 ⋮ W n = W n − 1 + ∇ W n − 1 = W 0 + ∑ i = 0 n − 1 ∇ W i = W 0 + ∇ W W_2=W_1+\nabla W_1\\ W_3=W_2+\nabla W_2\\ \vdots\\ W_n=W_{n-1}+\nabla W_{n-1}=W_0+\sum_{i=0}^{n-1}\nabla W_i=W_0+\nabla W W2=W1+W1W3=W2+W2Wn=Wn1+Wn1=W0+i=0n1Wi=W0+W
因为现在的大模型一般是过参数化的,所以我们可以使用两个秩(r)比较低的两个矩阵 B A BA BA来拟合。

LoRA 可以应用于神经网络中权重矩阵的任何子集,以减少可训练参数的数量。然而,为了简单性和进一步的参数效率,LoRA 通常仅应用于 Transformer 模型中的注意力块。 LoRA 模型中可训练参数的数量取决于更新矩阵的大小,而更新矩阵的大小主要由秩 r 和原始权重矩阵的形状决定。

注意:由于LoRA实质上就是在原权重矩阵的基础上,加上了我们训练得到的新权重,而原始模型参数保持不变。故此,对于不同的任务,可以只保存训练的LoRA权重也就是上文提到的 ∇ W = B A \nabla W=BA W=BA,而不必多次保存原始模型,当用于不同任务时,只需卸载当前的LoRA权重,加载相应得LoRA权重即可。

一些实验性的结果

是否应该对所有参数都微调?

在这里插入图片描述

表中的 W q , W k , W v , W o W_q,W_k,W_v,W_o Wq,Wk,Wv,Wo分别表示自注意力机制的查询、键、值和输出权重参数。
从表中可看出,将所有参数都放入 ∇ W q \nabla W_q Wq ∇ W k \nabla W_k Wk会导致性能显著降低,而同时采用 ∇ W q \nabla W_q Wq ∇ W k \nabla W_k Wk会得到最好的结果。这表明,即使是4的秩也能捕获 ∇ W \nabla W W中足够多的信息,以至于采用更多的权重矩阵比采用秩更大的单一类型的权重更好。

LoRA的秩如何挑选?

在这里插入图片描述

原论文作者认为增大r并不能覆盖一个更有意义的子空间,一个低秩的适应矩阵是足够的。

LoRA原论文地址:arxiv:https://arxiv.org/pdf/2106.09685

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

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

相关文章

ATF-541M4全解析(一)

目录 一、描述二、规格三、各参数最大值四、25℃下的典型值 一、描述 安华高科技 (Avago Technologies) 的 ATF-541M4 是一款高线性度、低噪声、单电源供电的E-PHEMT,封装在一个微型无引脚封装中。 ATF-541M4 的小尺寸和低外形使其非常适合用于混合模块和其他空间…

C++多态的底层原理

目录 1.虚函数表 (1)虚函数表指针 (2)虚函数表 2.虚函数表的继承--重写(覆盖)的原理 3.观察虚表的方法 (1)内存观察 (2)打印虚表 虚表的地址 函数 传参…

SpringBoot添加密码安全配置以及Jwt配置

Maven仓库(依赖查找) 1、SpringBoot安全访问配置 首先添加依赖 spring-boot-starter-security 然后之后每次启动项目之后,访问任何的请求都会要求输入密码才能请求。(如下) 在没有配置的情况下,默认用户…

【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

ctfshow-web入门-php特性(web137-web141)

目录 1、web137 2、web138 3、web139 4、web140 5、web141 1、web137 直接调用 ctfshow 这个类下的 getFlag 函数,payload: ctfshowctfshow::getFlag 查看源码: 拿到 flag:ctfshow{dd387d95-6fbe-4703-8ec5-9c8f9baf2bb5} 在…

【Linux】远程连接Linux虚拟机(MobaXterm)

【Linux】远程连接Linux虚拟机(MobaXterm) 零、原因 有时候我们在虚拟机中操作Linux不太方便,比如不能复制粘贴,不能传文件等等,我们在主机上使用远程连接软件远程连接Linux虚拟机后可以解决上面的问题。 壹、软件下…

MySQL_JDBC

目录 一、JDBC常用的接口和类 1.1 数据库连接 Connection 1.2 Statement 对象 二、JDBC的使用 总结 【Java 的数据库编程】 JDBC 即 Java Database Connectivity (Java数据库连接),是一种用于执行 SQL 语句的 Java API。这个 API 由 java.sql.*,javax.sql.* …

软件测试:Postman 工具的使用。开发及测试均需要掌握的测试工具

工具介绍 各个模块功能的介绍如下: 1、New:在这里创建新的请求、集合或环境;还可以创建更高级的文档、Mock Server 和 Monitor以及API。 2、Import:这用于导入集合或环境。有一些选项,例如从文件,文件夹导…

Linux环境下(DeepinV20+)使用docker安装和使用mysql、redis、minio等各类中间件(后续用到其他中间件会继续更新)

docker安装:https://blog.csdn.net/HXBest/article/details/140702265 本人环境放置路径为:/env/中间件名称/,实际改为你自己的!!! 一、mysql安装和使用 docker run -itd --name mysql -p 3306:3306 \ -d …

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined,客户端运行是通过的但命令行运行会报错 修改端口也是一样报错,地址修改为127.0.0.1会报错connect ECONNREFUSED 127.0.0.1:8080 解决方法:不用localhost&…

PHP家政系统自营+多商户独立端口系统源码小程序

家政行业的新篇章 引言:家政行业的数字化转型 近年来,随着科技的飞速发展和人们生活节奏的加快,家政服务行业也迎来了数字化转型的浪潮。为了提升服务效率、优化用户体验,越来越多的家政公司开始探索“家政系统自营多商户小程序…

Ubuntu24.04安装

1. 系统安装 1.1 引导界面 开机进入grub引导界面后,会有安装服务和测试内存两个选择,选择第一个进行安装。 1.2 语言选择 这里的语言选择的是安装过程中的语言,根据个人偏好选择即可,不过没有中文,所以默认使用英文…

【C++】选择结构- 嵌套if语句

嵌套if语句的语法格式&#xff1a; if(条件1) { if(条件1满足后判断是否满足此条件) {条件2满足后执行的操作} else {条件2不满足执行的操作} } 下面是一个实例 #include<iostream> using namespace std;int main4() {/*提示用户输入一个高考分数&#xff0c;根据分…

计算机实验室排课查询小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;实验室信息管理&#xff0c;实验室预约管理&#xff0c;取消预约管理&#xff0c;实验课程管理&#xff0c;实验报告管理&#xff0c;报修信息管理&#xff0…

qt总结--翻金币案例

完成了一个小项目的在qt5.15.2环境下的运行,并使用NSIS editNSIS打包完成.有待改进之处:增加计时功能,随机且能通关功能,过关后选择下一关功能.打包后仅仅有安装包有图标 安装后应用图标并未改变 在qt .pro中有待改进对qt的基本操作和帮助文档有了基本的认识.对C制作小游戏有了…

在jeesite开源平台上写了一个SQL命令中心的功能

实现目的: 这个SQL命令中心,是因为老项目就有这个页面,主要的功能是根据写出的SQL语句查询数据,并且在查出的数据基础上直接修改更新,还有新增和删除的功能,这么一说跟plsql就一样一样的了;这页面本来是给运维的同事来用,而且他们还会用plsql和Navicat等SQL语言操作工…

VS2019编译和使用gtest测试(C++)

目录 一、首先下载gtest开源 二、使用gtest 一、首先下载gtest开源 https://pan.baidu.com/s/15m62KAJ29vNe1mrmAcmehA 提取码&#xff1a;vfxz 下载下来解压到文件夹&#xff0c;再在文件夹里面新建一个build文件夹&#xff0c;如下&#xff1a; 再安装cmake&#xff0c;…

WEB集群-Tomact集群

linux云计算中小企业规模集群架构设计图----总结 在写今天内容前&#xff0c;小编绘制一个图&#xff1a;我设计了linux云计算中小企业规模集群架构设计图&#xff08;也可根据业务需求&#xff0c;增加业务变成大型企业架构设计图&#xff09; 知识补充–故障案例-https no s…

C#高级:枚举(Enum)从索引、值到注释的完整使用技巧

目录 一、推荐的枚举写法 二、获取注释的封装代码 三、已知【枚举】&#xff0c;获取注释、索引 四、已知【索引】&#xff0c;获取枚举值、注释 五、已知【注释】&#xff0c;获取枚举值、索引 六、创建一个【枚举字典】&#xff0c;key索引&#xff0c;value(枚举值&am…