当前位置: 首页 > news >正文

低秩适应(LoRA)与量化LoRA(QLoRA)技术解析

LoRA:从线性代数到模型微调

从矩阵分解理解Lora

假设我们有一个大模型中的权重矩阵,形状为1024×512(包含约52万个参数)。传统微调方法会直接更新这52万个参数,这不仅计算量大,而且存在过拟合风险。

LoRA的做法是:

  1. 保持原始权重矩阵不变
  2. 引入两个小矩阵:比如1024×32和32×512
  3. 这两个小矩阵相乘得到的结果与原始矩阵形状相同
  4. 将乘积结果与原始矩阵相加,作为最终使用的权重

这种方法的优势立刻显现:

  • 32是一个超参数r(rank),通常远小于原始维度
  • 两个小矩阵总共只有约4.9万个参数,仅为原始矩阵的约9.3%
  • 如果r取更小值(如8或4),参数量可进一步减少

总结一下:LoRA的核心思想源自线性代数中的"低秩矩阵分解"技术。这个名字可以拆解为Low-Rank Adaptation,字面意思是"低秩适应"。通过这种技术,我们可以巧妙地绕过直接修改原始模型的庞大参数,而是添加训练一组规模小得多的参数矩阵。
在这里插入图片描述

为什么这么做会有效

LoRA的数学表达

让我们用数学公式来表达这个过程。对于原始权重矩阵 W∈R^(d×k),LoRA微调后的权重表示为:

W_LoRA = W + ΔW = W + BA

其中:

  • B∈R^(d×r) 和 A∈R^(r×k) 是两个低秩矩阵
  • r << min(d,k),确保参数量大幅减少
  • 初始化时,B可以随机初始化,而A通常初始化为全零矩阵

在实际应用中,还会引入一个缩放因子α,修改公式为:

W_LoRA = W + (α/r)BA

这样做可以更好地控制微调的程度,α与r的比值影响着学习率的选择。

实际应用与注意事项

矩阵的秩,通常选择4~32之间的值

在使用Hugging Face Transformers库的PEFT(Parameter-Efficient Fine-Tuning)模块实现LoRA时,主要参数包括:

  • r: 矩阵的秩,通常选择4~32之间的值
  • alpha: 缩放因子,缩放因子的默认值为 1,这意味着在计算模型的前向传播时,预训练权重和低秩权重更新的权重相等。但是,可以更改 α 的值,以平衡预训练模型和新的特定任务自适应的重要性。最近的实证分析表明,对于秩较高的 LoRA,需要更大的 α 值(即,rα 越大,则越小)。
  • target_modules: 指定应用LoRA的层,可以是全部层或特定层
from peft import LoraConfig, get_peft_modelconfig = LoraConfig(r=8,alpha=16,target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],lora_dropout=0.05,
)model = get_peft_model(base_model, config)

值得注意的是,LoRA通常不应用于偏置项(bias)和层归一化(layer normalization)参数,这些参数量相对较小,可以直接训练。

QLoRA:量化与低秩适应的结合

QLoRA(Quantized LoRA)是LoRA的进阶版本,它将量化技术与低秩适应相结合。通过将原模型量化到较低精度(如4位整数),同时使用LoRA进行微调,可以实现更高效的内存使用。

这种组合方法特别适合于单GPU环境,使开发者能够在普通消费级GPU(如RTX 4090或A10)上微调大型模型(如Llama 7B甚至更大)。

相关文章:

低秩适应(LoRA)与量化LoRA(QLoRA)技术解析

LoRA&#xff1a;从线性代数到模型微调 从矩阵分解理解Lora 假设我们有一个大模型中的权重矩阵&#xff0c;形状为1024512&#xff08;包含约52万个参数&#xff09;。传统微调方法会直接更新这52万个参数&#xff0c;这不仅计算量大&#xff0c;而且存在过拟合风险。 LoRA的…...

Webug4.0靶场通关笔记22- 第27关文件包含

目录 一、文件包含 1、原理分析 2、文件包含函数 &#xff08;1&#xff09;include( ) &#xff08;2&#xff09;include_once( ) &#xff08;3&#xff09;require( ) &#xff08;4&#xff09;require_once( ) 二、第27关渗透实战 1、打开靶场 2、源码分析 3、…...

OpenCV CPU性能优化

OpenCV 在 CPU 上的性能优化涉及多个层次&#xff0c;从算法选择到指令级优化。以下是系统的优化方法和实践技巧&#xff1a; 一、基础优化策略 1. 内存访问优化 连续内存布局&#xff1a;优先使用 cv::Mat::isContinuous() 检查 cpp if(mat.isContinuous()) {// 可优化为单循…...

OpenCV进阶操作:图像的透视变换

文章目录 前言一、什么是透视变换&#xff1f;二、透视变换的过程三、OpenCV透视变换核心函数四、文档扫描校正&#xff08;代码&#xff09;1、预处理2、定义轮廓点的排序函数3、定义透视变换函数4、读取原图并缩放5、轮廓检测6、绘制最大轮廓7、对最大轮廓进行透视变换8、旋转…...

MySQL事务隔离机制与并发控制策略

MySQL事务隔离机制与并发控制策略 MySQL事务隔离机制与并发控制策略一、数据库并发问题全景解析二、事务隔离级别深度解析三、MySQL并发控制核心技术1. 多版本并发控制&#xff08;MVCC&#xff09;2. 锁机制 四、隔离级别实现差异对比五、生产环境最佳实践六、高级优化技巧七、…...

【算法学习】递归、搜索与回溯算法(二)

算法学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言&#xff1a; 在&#xff08;一&#xff09;中我们挑了几个经典例题&#xff0c;已经对递归、搜索与回溯算法进行了初步讲解&#xff0c;今天我们来进一步讲解…...

SpringBoot整合PDF导出功能

在实际开发中&#xff0c;我们经常需要将数据导出为PDF格式&#xff0c;以便于打印、分享或存档。SpringBoot提供了多种方式来实现PDF导出功能&#xff0c;下面我们将介绍其中的一些。 HTML 模板转 PDF&#xff08;推荐&#xff09; 通过模板引擎&#xff08;如 Thymeleaf 或…...

关于MySQL 数据库故障排查指南

&#x1f6e0; MySQL 数据库故障排查指南 目标&#xff1a;解决常见数据库问题&#xff0c;保障数据安全与系统稳定运行。 一、常见故障类型概览 故障类型可能原因排查/解决步骤无法连接服务未启动、端口未监听、用户权限不足 查看服务状态&#xff1a; systemctl status my…...

ubuntu yolov5(c++)算法部署

1.安装onnx 1.15.0 首先使用如下命令关闭 anaconda 对后续源码编译的影响&#xff1b; # 禁用当前 conda 环境 conda deactivate# 确保 conda 初始化脚本不会自动激活 base 环境 conda config --set auto_activate_base false# 然后重新打开终端或执行 source ~/.bashrc 1.安…...

基于Centos7的DHCP服务器搭建

一、准备实验环境&#xff1a; 克隆两台虚拟机 一台作服务器&#xff1a;DHCP Server 一台作客户端&#xff1a;DHCP Clinet 二、部署服务器 在网络模式为NAT下使用yum下载DHCP 需要管理员用户权限才能下载&#xff0c;下载好后关闭客户端&#xff0c;改NAT模式为仅主机模式…...

《开源先锋Apache软件基金会:历史沿革、顶级项目与行业影响》

1. Apache软件基金会概述 Apache软件基金会&#xff08;Apache Software Foundation, ASF&#xff09; 是全球最大的开源软件组织之一&#xff0c;成立于1999年&#xff0c;是一个非营利性机构&#xff0c;致力于为公共利益提供开源软件。ASF以“社区主导、共识决策”为核心原…...

Java数据结构——Queue

Queue 队列的概念队列的使用offer和poll方法add和remove方法 设计循环队列队列实现栈栈实现队列 前面所说的Stack是 先入后出的原则&#xff0c;那有没有 先入先出的原则的结构呢&#xff1f;这就是本篇博客所讲的Queue序列就是这个原则 队列的概念 只允许在一段进行插入数据…...

仓储车间安全革命:AI叉车防撞装置系统如何化解操作风险

在现代物流体系中&#xff0c;仓储承担着货物储存、保管、分拣和配送等重要任务。但现代仓储行业的安全现状却不容乐观&#xff0c;诸多痛点严重制约着其发展&#xff0c;其中叉车作业的安全问题尤为突出。相关数据显示&#xff0c;全球范围内&#xff0c;每年因叉车事故导致的…...

深入 FaaS 核心:函数是如何“活”起来的?

深入 FaaS 核心:函数是如何“活”起来的? 在上一篇《你好,Serverless!告别服务器运维的烦恼》中,我们认识了 Serverless 的基本概念,并知道了 FaaS (Function as a Service) 是其核心计算单元,就像一个个“随叫随到”的专业工具人。 那么,这些“工具人”到底是如何被“…...

vue2 两种路由跳转方式

第一种方式&#xff1a;path跳转 第二中写法&#xff1a;用name跳转 路由传参 动态路由传参 案例 通过${} 动态路由传参 动态路由使用params来进行接收 name 传参 总结 传的什么用什么接受...

手机上使用的记录笔记的软件推荐哪一款

在快节奏的生活中&#xff0c;一款好用的手机笔记软件就像随身携带的“外挂大脑”&#xff0c;能帮我们高效记录生活点滴、工作计划和灵感创意。今天&#xff0c;就来给大家详细对比一下Pendo、敬业签、MIGi日历记事本这三款热门笔记软件。 一、Pendo笔记&#xff1a;智能日程…...

SpringBoot 讯飞星火AI WebFlux流式接口返回 异步返回 对接AI大模型 人工智能接口返回

介绍 用于构建基于 WebFlux 的响应式 Web 应用程序。集成了 Spring WebFlux 模块&#xff0c;支持响应式编程模型&#xff0c;构建非阻塞、异步的 Web 应用。WebFlux 使用了非阻塞的异步模型&#xff0c;能够更好地处理高并发请求。适合需要实时数据推送的应用场景。 WebClie…...

Python学习笔记--Django的安装和简单使用(一)

一.简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。Django 提供了一套强大的工具和约定&#xff0c;使得开发者能够快速构建功能齐全且易于维护的网站。Django 遵守 BSD 版权&#xff0c;初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1…...

Java 17配置Jenkins

找到 Java 17 的安装路径 which java ls -l /usr/lib/jvm/ 修改 Jenkins 服务配置 sudo nano /etc/systemd/system/jenkins.service 修改为 [Unit] DescriptionJenkins Automation Server Afternetwork.target[Service] Typesimple Userjenkins Groupjenkins Environment&…...

前端面试每日三题 - Day 28

这是我为准备前端/全栈开发工程师面试整理的第28天每日三题练习&#xff1a; ✅ 题目1&#xff1a;HTTP缓存策略全景解析 核心缓存类型对比表 缓存类型验证方式响应头网络请求消耗强缓存无Cache-Control/Expires无协商缓存If-Modified-Since等ETag/Last-Modified304响应 1.强…...

B站pwn教程笔记-8

接着上次的习题刷&#xff0c;然后补充新的知识。这开始就接触花式栈溢出了 pwn3&#xff08;ret2libc较难&#xff09; 上次已经知道大致思路&#xff0c;现在看看怎么实现。 使用命令 ldd 可看出连接的LIBC是哪个&#xff0c;如下图所示。&#xff08;第一行&#xff09; …...

uniapp项目打包的微信小程序,设置uni-popup type=“bottom“时,底部有空隙

问题&#xff1a; uniapp项目打包的微信小程序&#xff0c;设置uni-popup type"bottom"时&#xff0c;底部有空隙 解决思路&#xff1a; 1、检查代码是否存在样式问题 2、使用微信小程序自带的调试器元素 3、查看源码定位底部是如何出现该空隙的 1、检查代码 检…...

《Zabbix Proxy分布式监控实战:从安装到配置全解析》

注意&#xff1a;实验所需的zabbix服务器的搭建可参考博客 zabbix 的docker安装_docker安装zabbix-CSDN博客 1.1 实验介绍 1.1.1 实验目的 本实验旨在搭建一个基于Zabbix的监控系统&#xff0c;通过安装和配置Zabbix Proxy、MySQL数据库以及Zabbix Agent&#xff0c;实现分…...

zookeeper实现分布式获取全局唯一自增ID的案例。

项目结构 所有配置写在 application.yml 文件中&#xff0c;代码进行了拆分&#xff0c;加入了相关依赖。 1. pom.xml 依赖 <dependencies><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><…...

微信小程序上传视频,解决ios上传完video组件无法播放

1.碰到问题 工单里面上传完视频video组件ios无法播放视频,安卓可以 2.原因 使用了后台接口返回的url拼域名 &#xff0c; 正确做法&#xff1a;使用wx.chooseMedia()里面的tempFilePath&#xff08;本地临时文件路径 (本地路径)&#xff09;&#xff0c;上传好了详情可以使用后…...

硕博士学位论文题目需要注意的几个问题

摘要: 论文题目既要高大上, 又要与别人的区别开. 本贴描述一些基本的思路. 研究生们应该从图书馆找 100 篇博士论文的题目参考&#xff0c;以跳出思维定式. 1. 题目要足够具体 需要把自己的几篇小论文覆盖&#xff0c;且最小的一个帽子 帽子大了就变成书籍的名字&#xff0c;…...

图像匹配导航定位技术 第 8 章

第 8 章 SAR 图像匹配定位技术 目前 &#xff0c;光学传感器已经能获取高分辨率&#xff0c;即与视觉效果相近的目标图像&#xff0c;但是光学传感器容易受到天气变化的影响&#xff0c;从而影响效率。而径雷达 ( synthetic aperture radar&#xff0c;SAR)传感器不仅能获得与…...

四、Hadoop 2.X vs 3.X:特性、架构与性能全解析

Hadoop 2.X 与 Hadoop 3.X 深度对比&#xff1a;版本特性、架构与性能剖析 在大数据处理的浪潮中&#xff0c;Hadoop 凭借其分布式存储与计算的强大能力&#xff0c;成为了业界的核心框架之一。随着技术的不断演进&#xff0c;Hadoop 也经历了多个重要版本的迭代。其中&#x…...

【Linux】FreeRTOS与Linux:实时与通用的终极对比

文章目录 FreeRTOS & Linux1 本质区别2 应用场景3 架构差异4 为什么容易混淆&#xff1f;5 合作与共存总结 FreeRTOS & Linux FreeRTOS 和Linux是两种完全不同的操作系统&#xff0c;设计目标和应用场景有显著区别。 1 本质区别 特性FreeRTOSLinux类型实时操作系统&…...

关于vue-office在vue3工程中的引用报错问题

在vue3项目工程中&#xff0c;根据vue-office文档在vue2中的引用&#xff1a; //引入VueOfficeDocx组件 相关样式import VueOfficeDocx from vue-office/docx;import vue-office/docx/lib/index.css; 报错信息&#xff1a; [plugin:vite:import-analysis] Failed to resolve …...

【NLP 71、常见大模型的模型结构对比】

三到五年的深耕&#xff0c;足够让你成为一个你想成为的人 —— 25.5.8 模型名称位置编码Transformer结构多头机制Feed Forward层设计归一化层设计线性层偏置项激活函数训练数据规模及来源参数量应用场景侧重GPT-5 (OpenAI)RoPE动态相对编码混合专家架构&#xff08;MoE&#…...

Java详解LeetCode 热题 100(13):LeetCode 53:最大子数组和(Maximum Subarray)详解

文章目录 1. 题目描述2. 理解题目3. 解题思路3.1 暴力法3.1.1 O(n) 暴力解法3.1.2 O(n) 优化的暴力解法3.2 分治法3.3 动态规划(Kadane算法)3.3.1 动态规划基本思路3.3.2 Kadane算法(空间优化版本)3.4 前缀和方法4. 具体实例解析5. 代码优化与技巧5.1 处理空数组和边界情况…...

数字化驱动下的智慧物流与零售创新:全流程无人仓与定制开发开源AI智能名片S2B2C商城小程序的协同实践

摘要&#xff1a;本文以京东"全球首个全流程无人仓"为技术载体&#xff0c;结合"定制开发开源AI智能名片S2B2C商城小程序"的零售创新实践&#xff0c;探讨数字化技术如何重构物流与零售场景。研究揭示&#xff0c;京东通过全流程无人仓实现仓储效率提升4倍…...

从“工地砌砖”到“工厂造房”:模块化集成建筑(MiC建筑)如何重塑建筑业

在城市化进程加速与资源环境约束加剧的双重挑战下&#xff0c;建筑业正经历着一场深刻变革。模块化集成建筑&#xff08;Modular Integrated Construction&#xff0c;简称MiC&#xff09;以“工厂造楼”为核心理念&#xff0c;通过将建筑拆解为标准化模块并在工厂完成全流程预…...

idea出现tomcat不能正确部署的问题--解决方案

启动tomcat 报如下错误&#xff1a;&#xff08;是因为已经在其他tomcat的中使用了这两个端口&#xff09; 改成新端口 注意&#xff1a;不管是新增了页面&#xff0c;还是修改了页面&#xff0c;都需要重新部署项目&#xff0c;方法就是点击下面的绿色图标。否则新的页面操作不…...

编专利或委托他人编专利属于学术不端行为吗?

原文链接&#xff1a;编专利或委托他人编专利属于学术不端行为吗&#xff1f; 自己编专利或委托他人编专利属于学术不端吗&#xff1f; 5月4日&#xff0c;一篇题为《针对性护理干预在子宫肌瘤围手术期的情绪和生活质量临床应用效果》的论文&#xff0c;受到网友的广泛议论。…...

IEEE PRMVAI Workshop 17 | 智能医疗数据分析与应用

科研小伙伴们看过来&#xff01;2025 年 IEEE 第三届模式识别、机器视觉和人工智能国际会议旗下的 Workshop 17——“Intelligent Health Monitoring and Inspection of Infrastructure&#xff08;智能医疗数据分析与应用&#xff09;” 超值得关注&#xff01; &#x1f4c5…...

网工实验——OSPF配置

网络拓扑图 配置 1.为每个路由器配置接口&#xff08;略&#xff09;&#xff08;详细见RIP实验&#xff09; 2.配置OSPF AR1 [AR1]ospf [AR1-ospf-1]area 1 [AR1-ospf-1-area-0.0.0.1]network 172.16.1.1 0.0.0.0 #精确配置网络&#xff0c;也可以像下面那条命令那样配置 …...

图灵码上爬第5题:屠龙刀--爬虫逆向

别问我&#xff0c;问我就是小菜鸡记录下学习成果&#xff0c;哈哈哈哈 第五题其实跟第四题的逻辑差不多&#xff0c;只不过加了点简单混淆的代码 题目&#xff1a; 请求参数经过特殊处理&#xff0c;适合JavaScript逆向入门练习 思路&#xff1a; 首先打开开发者工具&…...

Linux网络编程day7 线程池

线程池 typedef struct{void*(*function)(void*); //函数指针&#xff0c;回调函数void*arg; //上面函数的参数 }threadpool_task_t; //各子线程任务的结构体/*描述线程池相关信息*/struct threadpool_t{pthread_mutex_t lock; …...

【SpringMVC】详解cookie,session及实战

目录 1.前言 2.正文 2.1cookie与session概念 2.2返回cookie参数 2.3设置session 3.小结 1.前言 哈喽大家好吖&#xff0c;今天继续来给大家来分享SpringMVC的学习&#xff0c;今天主要带来的是cookie与session的讲解以及通过postman和fiddler来实战&#xff0c;废话不多…...

《Vuejs 设计与实现》第 4 章(响应式系统)( 上 )

目录 4.1 响应式数据和副作用函数 4.2 基本响应式数据实现 4.3 设计完善响应系统 4.4 分支切换与清理 4.5 嵌套的 effect 与 effect 栈 4.1 响应式数据和副作用函数 副作用函数是指那些产生副作用的函数 function effect() {document.body.innerText = hello vue3 }执行 …...

《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》

React Native和Flutter作为当下热门的跨平台开发框架&#xff0c;在社交应用开发领域各显神通。今天&#xff0c;我们深入探索它们在高可用架构中的部署与容灾策略。 React Native凭借其独特优势&#xff0c;在社交应用开发中拥有一席之地。它基于JavaScript和React&#xff0…...

K8s网络从0到1

K8s网络从0到1 前言 K8s是一个强大的平台&#xff0c;但它的网络比较复杂&#xff0c;涉及很多概念&#xff0c;例如Pod网络&#xff0c;Service网络&#xff0c;Cluster IPs&#xff0c;NodePort&#xff0c;LoadBalancer和Ingress等等。为了帮助大家理解&#xff0c;模仿TC…...

React Native基础环境配置

React Native基础环境配置 1.引言2.React-Native简介3.项目基础环境搭建1.引言 感觉自己掌握的知识面还是有点太窄了,于是决定看看移动端的框架,搞个react搭一个后端管理项目,然后拿react-native写个小的软件,试着找个三方上架一下应用市场玩玩。毕竟不可能一直在简历上挂一…...

k8s术语之DaemonSet

DaemonSet确保全部&#xff08;或者一些&#xff09;Node上运行一个Pod的副本。当有Node加入集群时&#xff0c;也会为它们新增一个Pod。当有Node从集群移除时&#xff0c;这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod 使用DaemonSet的一些典型用法&#xff1a; …...

接口自动化测试框架详解(pytest+allure+aiohttp+ 用例自动生成)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 近期准备优先做接口测试的覆盖&#xff0c;为此需要开发一个测试框架&#xff0c;经过思考&#xff0c;这次依然想做点儿不一样的东西。 接口测试是比较讲究效…...

Go:简洁高效,构建现代应用的利器

Go&#xff0c;又称 Golang&#xff0c;是由 Google 开发的一种开源编程语言。它以其简洁的语法、高效的性能以及强大的并发特性&#xff0c;在云计算、微服务、DevOps 等领域迅速崛起&#xff0c;成为构建现代应用的利器。本文将带你了解 Go 的魅力&#xff0c;探讨其核心特性…...

Minor GC与Full GC分别在什么时候发生?

一、Minor GC 触发条件 1.Eden区空间不足 • 核心机制&#xff1a;新对象优先分配在Eden区&#xff0c;当Eden区无法满足新对象分配时触发Minor GC。 示例&#xff1a; // 循环创建对象填满Eden区 for (int i 0; i < 1000000; i) {byte[] data new byte[1 * 1024]; // 持…...

Crawl4AI:高效的开源 Python 网页爬取与数据提取库

Crawl4AI:高效的开源 Python 网页爬取与数据提取库 在数据驱动的时代,网页爬取和数据提取是众多 AI 项目及语言模型性能提升的关键环节。Crawl4AI 作为一款开源的 Python 库,凭借强大且灵活的功能,致力于简化这一复杂工作流程。其全异步设计不仅大幅提升了处理速度,还增强…...