什么是LoRA微调

9、微调技术——Lora(论文阅读) 假设原本w为100x100大小,则A大小为100xK,B为Kx100,假设W中有用信息多,我们就可以让k大一点,否则就小一点。假设k=2,则AB中各有200个参数,一共400个,远远比W参数少得多。(1)对于改动的量,可能里面包含许多有限的有用值。比如100亿的参数,可能只有50亿有用,别的都是重复或者可根据已知来推导的。为了减少训练量,我们不会更新所有参数。假设预训练模型的参数矩阵为W,我们可以将其写成W=A*B的形式。(2)有时我们希望模型某一方面的能力更突出,所以只需要训练部分参数即可。 阅读详情
AI摘要

LoRA是大模型微调方法,只在部分权重添加可训练参数,通过低秩矩阵优化参数更新。它能极大降低显存消耗、适用于多任务适配器切换且训练速度快。训练时只更新小矩阵A和B,推理时合并A、B到原权重。还可借助unsloth等框架实现。

LoRA是大模型微调方法的一种,它的特点是只在模型的 部分权重(如 QKV 矩阵) 上 添加可训练参数
通过 低秩矩阵(A×B) 来优化参数更新
优点:
极大降低显存消耗(deepseek 7B 只需 10GB)
适用于多任务 LoRA 适配器切换
训练速度快

例如在 Transformer 里,自注意力(Self-Attention)计算:
Y=XW,
其中 X 是input, W是原始模型的权重矩阵(全连接层).
传统的Fine-tuning就是直接对 W 进行梯度更新,导致需要存储整个 W 的更新版本,显存占用极大。

LoRA 关键思想:
不直接更新 W,而是 用两个小矩阵 AAA 和 BBB 近似建模 W 的变化:
W′=W+ΔWW' = W + \Delta WW′=W+ΔW
ΔW=AB\Delta W = ABΔW=AB

其中:
A∈Rd×rA \in \mathbb{R}^{d \times r}A∈Rd×r
B∈Rr×dB \in \mathbb{R}^{r \times d}B∈Rr×d
r≪dr \ll dr≪d(低秩),一般 r=4, 8, 16,远小于 d。

所以只需要训练A 和 B,大幅减少训练参数量,用ABABAB近似ΔW\Delta WΔW, 使得最终W′W'W′仍然能适应新任务。
训练时,只更新A和B, W保持冻结。
推理时,计算W+ABW+ABW+AB得到微调后的完整模型, 但A,B远小于W,开销极小。

代码简单演示一下如何在transformer的q_proj里加入LoRA
在 Transformer 里,q_proj 是 nn.Linear 层

import torch
import torch.nn as nn
import math

class LoRAQProj(nn.Module):
    def __init__(self, hidden_size, r=16, lora_alpha=16):
        super().__init__()
        self.hidden_size = hidden_size
        self.r = r
        self.lora_alpha = lora_alpha
        self.scaling = lora_alpha / r  # LoRA 影响力
        
        # 原始 Q 投影层(冻结)
        self.q_proj = nn.Linear(hidden_size, hidden_size, bias=False)
        
        # LoRA 适配器:A 和 B
        self.lora_A = nn.Linear(hidden_size, r, bias=False)  # 低秩 A
        self.lora_B = nn.Linear(r, hidden_size, bias=False)  # 低秩 B
        
        # 初始化 LoRA 参数
        nn.init.kaiming_uniform_(self.lora_A.weight, a=math.sqrt(5))
        nn.init.zeros_(self.lora_B.weight)  # B 矩阵初始化为 0

    def forward(self, x):
        """
        计算 Self-Attention 里的 Query 矩阵:
            Q = X * (W_q + AB)
        """
        base_output = self.q_proj(x)  # 原始投影
        lora_output = self.lora_B(self.lora_A(x)) * self.scaling  # LoRA 适配器
        return base_output + lora_output  # 总输出

# 测试模型
hidden_size = 512
batch_size = 4
seq_len = 10

x = torch.randn(batch_size, seq_len, hidden_size)  # 输入数据
model = LoRAQProj(hidden_size)
output = model(x)

print("LoRA Q-Projection Output Shape:", output.shape)  # (4, 10, 512)

训练LoRA适配器

训练时,冻结self.q_proj, 只训练lora_A 和 lora_B

# 训练 LoRA
optimizer = torch.optim.AdamW(
    [p for n, p in model.named_parameters() if "lora" in n], lr=1e-4
)

for epoch in range(10):
    for batch in dataloader:  # 假设 dataloader 提供训练数据
        optimizer.zero_grad()
        output = model(batch["input_ids"])
        loss = loss_function(output, batch["labels"])  # 计算损失
        loss.backward()
        optimizer.step()

推理时合并LoRA

LoRA 训练完成后,我们需要合并 A, B 到 q_proj
计算 Wq′=Wq+ABW_{q}' = W_{q} + ABWq′​=Wq​+AB,
这样,可以移除A,B,只保留Wq′W_{q}'Wq′​, 加速推理

def merge_lora(model):
    """
    合并 LoRA 适配器到原始权重:
    W_q' = W_q + AB
    """
    with torch.no_grad():
        model.q_proj.weight += (model.lora_B.weight @ model.lora_A.weight) * model.scaling

    # 移除 LoRA 适配器
    del model.lora_A
    del model.lora_B

    return model

# 进行推理时合并 LoRA
merged_model = merge_lora(model)

不过实际中,不需要我们自己去写这些代码,可以用unsloth, LLaMA-Factory 等框架来实现。

LoRa无线网络技术概述 LoRa无线网络基础知识 阅读详情

相关推荐

使用LoRA进行高效微调

大型语言模型(LLMs)的低秩适应(Low-Rank Adaptation,简称LoRA)用于解决微调大型语言模型时面临的挑战。像GPT和Llama这样的模型,拥有数十亿个参数,通常对于特定任务或领域的微调来说成本过高。LoRA保留了预训练模型的权重,并在每个模型块内部加入了可训练的层。这导致需要微调的参数数量显著减少,并大幅降低了GPU内存需求。LoRA 的关键优势在于,它大幅减少了可训练参数的数量----有时高达10000倍——从而显著降低了对GPU资源的需求。

weixin_74923758的博客 2748

【语言大模型微调】LoRA — 尖端的大模型微调技术

讨论了微调的概念,以及LoRA如何将微调视为学习参数变化,而不是迭代学习新参数。我们学习了线性独立性和秩,以及由于大多数权重矩阵的秩较低,变化矩阵可以用小因子表示。我们将所有内容整合在一起,逐步介绍了LoRA,然后使用HuggingFace PEFT模块在问答任务中实现了LoRA

qq_45752541的博客 1万+

基于LoRA进行Stable Diffusion的微调

微调时只需要使用以下命令运行 train_text_to_image_lora.py 文件即可。需要根据下载的路径文件地址对相应的参数进行修改,如。样本数据量为883,这里设置了train_batch_size为2,max_train_steps为7500,数据集一共883条样本,包含两个部分:image(图)和 text(文),如下图所示。也可以根据GPU资源调整相应的参数,如。显存占用约11个G,训练时长约8个小时左右。使用git clone命令下载数据集。

dzysunshine的博客 8146

LoRA微调方法详解

大模型高效finetune方法LoRA。

3万+

大模型微调---Lora微调实战

LoRA是一种参数高效的微调技术,通过低秩转换对大型语言模型进行适应性更新,减少了权重矩阵的更新成本。它通过学习低秩矩阵来调整权重,以适应特定任务,同时保持计算效率。大模型都是过参数化的, 当用于特定任务时, 其实只有一小部分参数起主要作用。也就是参数矩阵维度很高, 但可以用低维矩阵分解近似。具体做法是, 在网络中增加一个旁路结构,旁路是A和B两个矩阵相乘。A矩阵的维度是[d,r]B矩阵的维度是[r,d], 其中r

niulinbiao的博客 3343

使用LoRA进行高效微调:基本原理

选择一个预训练的神经网络模型,例如ResNet、Transformer等。为了简单起见,您可以选择一个轻量级的卷积神经网络(CNN)。

数字人生 7934

LoRA微调

它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入Transformer架构的每一层,从而大大减少了下游任务的可训练参数数量。LoRA 是一个非常重要的可调优结构,简单来说,就是增加了一个额外可训练部分,比如原来的 Linear 的矩阵是 MxN 维,增加一个 LoRA,该 LoRA 会包含两个参数量较少的矩阵:Mxd, dxN,这两个矩阵相乘后仍然是 MxN 维的,训练时原 MxN 矩阵冻结,只训练 LoRA 的两个矩阵,参数量就会大大减少。训练过程中冻结参数𝑊0,仅训练A和B中的参数。

m0_69109706的博客 1460

ChatGLM LoRA微调实战方案

本文主要介绍了ChatGLM LoRA微调实战方案,希望对学习大语言模型的同学们有所帮助。微调后的推理截图如下所示。 文章目录 0. 简介 1. 安装虚拟环境 2. 下载文件 2.1 下载源代码 2.2 下载模型依赖文件 2.3 下载模型文件 3. 安装依赖库 4. LoRA微调 4.1 下载源代码 4.2 数据格式转换 4.3 tokenize 4.4 微调 5. 推理

herosunly的博客 17万+

LoRA微调实践

该函数将每个样本的和input编码为input_idsoutput编码为labels。MAX_LENGTH = 384 # Llama分词器会将一个中文字切分为多个token,因此需要放开一些最大长度,保证数据的完整性# 构建指令部分的编码f"<|im_start|>system\n现在你要扮演皇帝身边的女人--甄嬛<|im_end|>\n"

xnuscd的博客 2521

山景BP10_128DBG开发板通过蓝牙连接手机放歌实验回顾

最近在学习上海山景公司的BP10_128DBG的开发板,因为网上关于BP10开发板的帖子也比较少,在学习的时候也没有太多的参考资料,基本上都是官方的历程。蓝牙放歌这个demo对我来说也比较复杂,特写下此博客进行记录、总结,大家有需要的可以参考。

weixin_56646002的博客 2019

STM32H7多通道ADC数据采集实战:CubeMX配置ADC1/2/3+DMA/BDMA+Cache避坑全记录

本文详细解析了STM32H7多通道ADC数据采集的实战配置,涵盖CubeMX中ADC1/2/3与DMA/BDMA的协同设置及Cache一致性处理。通过硬件架构分析、DMA优化技巧和Cache避坑指南,帮助开发者实现高精度数据采集,适用于电机控制、环境监测等嵌入式系统。

weixin_28744613的博客 292

LoRA指令微调

指令微调 (Instruction Tuning) 是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,这一术语由谷歌研究员在2022年的一篇ICLR论文中正式提出。在另外一些参考文献中,指令微调也被称为有监督微调 (Supervised Fine-Tuning) 或多任务提示训练 (Multi-task Prompted Training)。

Twilight737的博客 2263

Social-Auto-Upload实战:如何用Python+Playwright实现抖音/B站/小红书一键三连发?

本文详细介绍了如何使用Python和Playwright框架构建Social-Auto-Upload自动化上传工具,实现抖音、B站、小红书等平台的一键多发布。通过模拟真实用户操作和Cookie管理技术,该工具能有效解决内容创作者跨平台发布的重复劳动问题,提升工作效率。

day7的博客 1399

LoRA基于BERT模型微调实践

LoRA微调过程的学习和思考

weixin_42924890的博客 3117

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4586

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4058

大语言模型微调实践——LoRA 微调细节

在本文中,我们探讨了 LoRA 微调方法,并以 StarCoder 模型的微调为例介绍了实践过程。通过实践过程的经验来为大家展示一些细节及需要注意的点,希望大家也能通过这种低资源高效微调方法微调出符合自己需求的模型。​。

zhishi0000的博客 8183

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了遇到‘Floating point exception’错误时的7个详细排查步骤。从理解浮点异常的本质到边界条件检查、时间步长设置、求解器选择、网格优化、亚松弛因子调节以及高阶格式的取舍,帮助用户快速定位并解决问题,确保CFD仿真的稳定性和准确性。

weixin_30480075的博客 260

大语言模型微调实践——LoRA 微调细节_lora微调的原理 旁路

在本文中,我们探讨了 LoRA 微调方法,并以 StarCoder 模型的微调为例介绍了实践过程。通过实践过程的经验来为大家展示一些细节及需要注意的点,希望大家也能通过这种低资源高效微调方法微调出符合自己需求的模型。​。

2401_85280307的博客 2285

RT-DETR训练自己的数据集(从代码下载到实例测试)

在Windows10上配置CUDA环境教程是百度提出的一种实时目标检测模型。RT-DETR采用了与DETR相同的编码器和解码器结构,但对其进行了大量的优化,在保持较高检测精度的同时,实现了实时目标检测,为目标检测领域提供了一种新的有效解决方案,具有广泛的应用前景,如自动驾驶、智能监控、机器人等领域。以上是RT-DETR官方的论文和代码,详细介绍了RT-DETR的构成和实现。在YOLOv10中也实现了RT-DETR的代码,所以本文使用YOLOv10的项目文件进行RT-DETR的训练和测试。YOLOv10。

Limiiiing的博客 4万+

YOLOv12改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv12的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv12原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 1737

peft lora微调代码解析,llama2-7b lora微调实战

运行微调使用的peft版本是v0.11.1, 代码解析使用的peft版本是0.11.2.dev0,这个版本单独将dora提取出来了。

weixin_45761030的博客 2723

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SD模型微调之LoRA

SD模型微调方法LoRA详细介绍,包括数据集准备,模型微调过程,推理过程,优缺点等。

haopinglianlian的博客 2609

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LORA 微调 - LoRA 介绍与 LoRA 微调指南

LoRA(Low-Rank Adaptation)是一种高效的大模型微调技术,通过在预训练模型的权重矩阵中引入低秩矩阵来减少参数量,从而在保持模型性能的同时降低计算和存储开销。LoRA的核心思想是冻结预训练模型的大部分参数,仅通过低秩矩阵微调少量参数,适用于自然语言处理任务。其优势包括计算高效、内存友好和可插拔性,特别适合资源受限的环境。LoRA微调步骤包括选择预训练模型、定义低秩矩阵、冻结原始权重、训练低秩矩阵和评估模型性能。尽管LoRA在小数据集和低资源场景下表现优异,但在复杂任务或大数据场景下,其性能

weixin_51265669的博客 1562

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

一文搞定 LoRa 微调技术

是 Meta 推出的开源大模型(如LLama-2-7B/13B/70B),由于其性能优异且开源,成为LoRA微调的热门对象。LoRA 并非独立模型,而是一种 “微调插件”,通常嵌入在 Transformer 架构的注意力模块中(这是大模型学习任务信息的核心区域)LoRA(Low-Rank Adaptation,低秩自适应)是由微软研究院在2021年提出的一种大模型参数高效微调技术,相关论文。研究表明,基于LoRA的微调在中文指令数据上能达到与全参数微调相近的效果,但训练成本大幅降低。

zhangxulang 4142

LoRA微调学习_lora微调学习率

直接上干货:大语言模型可以做什么?LoRA的核心思想:随着机器学习的最新发展,对模型性能的期望也在增加,需要更复杂的机器学习方法来满足对性能的需求。在机器学习的早期阶段,构建一个模型并在单次训练中训练它是可行的。训练,在其最简单的意义上。您将一个未经训练的模型,提供给它数据,并获得一个高性能的模型。对于简单问题来说,这仍然是一种流行的策略,但对于更复杂的问题,将训练分为两个部分,即“预训练”和“微调”,可能会很有用。总体思路是在一个大规模数据集上进行初始训练,并在一个定制的数据集上对模型进行优化。

HUANGXIN9898的博客 699
上一篇: xfeat paper笔记
下一篇: LoRA微调deepseek R1(7B)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值