优雅谈大模型12:一文读懂LoRA/DoRA/MoRA

news2024/11/25 22:52:33

Microsoft于2021年推出的LoRA是一种经济型微调模型参数的方法。现在大模型的参数规模动不动都在10亿级别以上,微调大模型(微调这里代表着SFT,例如读者将某个大模型拿到自身领域,想使用自身领域的知识再次训练和精校大模型,就属于模型微调的领域。)的全面微调模式下,需要调整所有的参数,因此所需要的资源和时间巨大。

LoRA提出了一种微训练模型的新方法,在冻结大部分的模型参数之余,仅仅更新额外的部分参数。同时它的性能与“微调大模型的全部参数”相似,但是能够将训练参数的数量减少了10,000倍,GPU内存需求减少了3倍。这以为着在消费级的GPU也可以运行这种计算和内存效率更高的新方法。

LoRA

在学习完“神经网络与矩阵”的时候,读者都可以知道神经网络都可以用矩阵来表示。LoRA 假设微调期间的权重更新可以很好地近似于低秩矩阵。LoRA不会更新全权重矩阵W,而是将更新分解为两个较小的矩阵A和B。

上图左侧为原始论文的配图,右图为另外的视角。举个例子,若原始权重W为d*k的格式,那么一共存在4096(d)×4096(k)=16,777,216个参数。

这时候LoRA使用A(d*r)和B(r*k)来代表权重更新,因为A和B的矩阵相乘也是d*k维度的。假设r为8,则LoRA需要更新的权重参数为4096×8+ 8×4096 =65,536个参数。<一下子要更新的模型参数下降了N倍!>

具体的训练过程是这样的,将原来的矩阵参数固定,然后利用新的数据继续训练大模型,而这个训练过程仅仅更新A和B矩阵。在推理使用的时候,将原来的矩阵W和(A*B)相加。下图为可视化版本:

r如何选择,什么的数值是合理的?原始的论文在某些模型上给出了实验的结果,一般而言都是r=4或者r=8,当然这个超参数还是需要具体场景具体分析。

从先期的实验数据而言,LoRA的效果还是不错的。然而LoRA最主要的问题在于矩阵被投影到更小的维度上,因此在此过程中肯定会丢失一些信息。

在各种方法和基础模型中,LoRA在减少训练参数和性能保障之间的确表现优异。

伴随着量化技术,可以将量化引入LoRA,因此诞生了QLoRA。例如神经网络的权重存储为32位浮点数(FP32)。量化可以将其转换为较低精度的点,例如16位或者8位(UINT-8或INT8)。

DoRA

权重分解低秩适应 (DoRA) 将预先训练的权重分解为两个分量:幅度和方向。如下图所示,原来参数矩阵W的维度依旧是d*k,新增了一个幅度向量m(1*k)。

上图绿色部分为需要被训练,而蓝色部分的参数表示在微调训练中是被冻结的。DoRA在训练A和B矩阵的时候,还是利用了LoRA的办法。然而新增了幅度M向量。

可以将矩阵的每列都看成向量,每列的权重矩阵都可以用大小和方向表示。例如可以将[2.0, 3.0]分解为0.5*[4, 6]。在进行完全微调时,梯度更新只是改变了列向量的方向,而幅度却保持几乎恒定。

下图为可视化的过程:

DoRA将列向量分解为2个分量可以更加灵活地更新方向分量,这更接近于完全微调。

MoRA

MoRA 的概念类似于 LoRA,但不是将权重矩阵分解为更小的维度,而是将其分解为小的方形矩阵。

例如,如果原始权重层具有4096×4096~= 16M参数,则r=8的LoRA具有4096×8 + 8×4096=65,536参数。使用MoRA可以将维度减小到r=256,即256×256=65,536。在这两种情况下,需要训练和更新的参数是相同的,然而研究人员声称与LoRA相比具有更高的学习代表性。

根据这篇2024年5月的论文,LoRA的局限性之一是无法记住大量数据。“对于LoRA观察到的这种限制,一个合理的解释可能是它对低秩更新的依赖。低秩更新矩阵 ∆W ,很难估计FFT中的全秩更新,尤其是在需要记忆特定领域知识的持续预训练等内存密集型任务中。

为了论证这个观点,研究人员研究了LoRA和FFT在通过微调记忆新知识方面的差异。为了避免利用 LLM 的原始知识,研究人员随机生成10K对通用唯一标识符 (UUID),每对包含两个具有32个十六进制值的UUID。该任务要求LLM根据输入的UUID生成相应的UUID。例如,给定一个UUID,比如“205f3777-52b6-4270-9f67-c5125867d358”,模型应该根据10K个训练对生成相应的UUID。这个任务也可以看作是一个问答任务,而完成它所必需的知识完全来自训练数据集,而不是LLM本身。

实验的结果辅证了研究人员的说法。MoRA的损失收敛得很快。

怎么说呢,小编认为还是需要再实战中多做检验。下图为完整的可视化过程。

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

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

相关文章

Gradle实现类似Maven的profiles功能

版本说明 GraalVM JDK 21.0.3Gradle 8.7Spring Boot 3.2.5 目录结构 指定环境打包 application.yml/yaml/properties 执行 bootJar 打包命令前要先执行 clean【其它和 processResources 相关的命令也要先执行 clean】&#xff0c;否则 active 值不会变&#xff01; spring…

计算机网络:网络层 - IP数据报的转发

计算机网络&#xff1a;网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时&#xff0c;是通过报文中的目的地址字段来转发的&#xff0c;也即是说路由器只知道终点的IP地址&#xff0c;根…

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

每日一练:攻防世界:ewm

这道题我尝试了使用montagegaps解题&#xff0c;但是没有解出来&#xff0c;图片数量不是很多&#xff0c;可以尝试用PS直接拼图&#xff0c;但是这样学不到东西&#xff0c;我也就没尝试&#xff0c;直接看的官方WP 这段代码应该是改变工作目录到small&#xff0c;并且变量当…

第九届星华杯网络邀请赛

T1喵星人的身高 T2犇犇碑 T3嘤嘤词典 T4三角区间和

spring注解驱动系列-- spring容器创建原理

从源码开始探究spring容器的创建原理&#xff0c;下面是源码总步骤 Override public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subc…

机器人运动学笔记

一、建模 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/137960186 1、三维模型和连杆、关节定义 2、设置z轴 SDH和MDH会不一样&#xff0c;主要的区别在于SDH中坐标系在连杆末端&#xff0c;MDH中坐标系在连杆首端。虽然这里只是给出z轴&#xff0c;但是由于后面原点位…

React 渲染流程分析

React 页面是由组件组成的&#xff0c;从根组件直到叶组件&#xff0c;内部的组件数通过 Fiber 来保存并触发并发更新。页面的展示分为两部分&#xff0c;首先是初始化&#xff0c;所有组件首次展示&#xff0c;都要进行渲染&#xff0c;之后是更新流程&#xff0c;也就是页面产…

简单的心电图信号分割方法

代码很简单&#xff0c;很容易看懂。 import pandas as pdimport matplotlib.pyplot as plt #headers [Name, Age, Marks]df pd.read_csv(samples-folder/samples2.csv) dfdf.drop(0)dfdf.drop(1)# print(df) if(len(df.columns) 3): df.columns [sample interval, sig…

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去&#xff0c;最好的办法要么是花费宝贵的时间搜索可靠的评论&#xff0c;要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户&#xff0c;那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

【数据挖掘】机器学习中相似性度量方法-余弦相似度

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

MIPI A-PHY协议学习

一、说明 A-PHY是一种高带宽串行传输技术,主要为了减少传输线并实现长距离传输的目的,比较适用于汽车。同时,A-PHY兼容摄像头的CSI协议和显示的DSI协议。其主要特征: 长距离传输,高达15m和4个线内连接器; 高速率,支持2Gbps~16Gbps; 支持多种车载线缆(同轴线、屏蔽差分…

SolarLab - hackthebox

简介 靶机名称&#xff1a;SolarLab 难度&#xff1a;中等 靶场地址&#xff1a;https://app.hackthebox.com/machines/SolarLab 本地环境 靶机IP &#xff1a;10.10.11.16 ubuntu渗透机IP(ubuntu 22.04)&#xff1a;10.10.16.17 windows渗透机IP&#xff08;windows11&…

OS复习笔记ch9-1

单处理器调度 调度类型 主要类型 长程调度&#xff1a;决定将哪个进程放入进程池中 中程调度&#xff1a;决定将哪些进程部分或者全部放入内存中 短程调度&#xff1a;决定哪个空闲进程上处理机 I/O调度&#xff1a;决定哪个进程的I/O请求被可用的I/O设备处理 处理器调度和进…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前&#xff0c;数据库存储系统与人工智能技术的结合&#xff0c;可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型&#xff08;LLM&#xff0c;简称大模型&#xff09;的嵌入&#xff08;embedding&#xff09;技术&am…

【Android面试八股文】请描述new一个对象的流程

文章目录 请描述new一个对象的流程JVM创建对象的过程检查加载分配内存内存空间初始化设置对象初始化请描述new一个对象的流程 JVM创建对象的过程 当JVM遇到一条new指令时,它需要完成以下几个步骤: 类加载与检查内存分配 并发安全性内存空间初始化设置对象信息对象初始化下图…

永磁同步直线电机(PMLSM)控制与仿真3-永磁同步直线电机数学三环控制整定

文章目录 1、电流环参数整定2、速度环参数整定3、位置环参数整定 写在前面&#xff1a;原本为一篇文章写完了永磁同步直线电机数学模型介绍&#xff0c;永磁同步直线电机数学模型搭建&#xff0c;以及永磁同步直线电机三环参数整定及三环仿真模型搭建&#xff0c;但因为篇幅较长…

贪心+dp,CF 1282B2 - K for the Price of One (Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1282B2 - K for the Price of One (Hard Version)https://codeforces.com/problemset/problem/1282/B2 二、解题报告 1、思路分析 考虑优先买价格低的&#xff0c;所以先升序排序 定义状态f[i]为购买前i个…

axios打通fastapi和vue,实现前后端分类项目开发

axios axios是一个前后端交互的工具&#xff0c;负责在前端代码&#xff0c;调用后端接口&#xff0c;将后端的数据请求到本地以后进行解析&#xff0c;然后传递给前端进行处理。 比如&#xff0c;我们用fastapi写了一个接口&#xff0c;这个接口返回了一条信息&#xff1a; …

LeetCode | 709.转换成小写字母

这道题可以用api也可以自己实现&#xff0c;都不难&#xff0c;大小字母之前相差了32&#xff0c;检查到大写字母时加上32即可 class Solution(object):def toLowerCase(self, s):""":type s: str:rtype: str"""return s.lower()class Solution…