news 2026/9/29 2:13:29

LoRA(Low-Rank Adaptation)模型核心基础知识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LoRA(Low-Rank Adaptation)模型核心基础知识

文章目录

  • 一、LoRA的背景与原理
    • (一)LoRA的原理
    • (二)LoRA矩阵的初始化
  • 二、LoRA与Stable Diffusion模型
  • 三、AdaLora和QLora
    • (一)AdaLora的原理
    • (二)QLora的原理
    • (三)用途上的区别

一、LoRA的背景与原理

在预训练大规模模型时,微调整个模型的参数可能会带来较大的计算和存储开销。对于像GPT-3这样的大型模型,直接微调所有参数不仅非常耗时,还需要大量的存储资源。

(一)LoRA的原理

LoRA的全称:Low-Rank Adaptation of Large Language Models。它通过引入低秩矩阵分解,在微调时不再调整原始模型的所有权重,而是通过将权重矩阵分解成两个较小的低秩矩阵来表示权重的变化。

对于主模型的权重矩阵W ∈ R d × k W \in \mathbb{R}^{d\times k}W∈Rd×k,LoRA不微调W WW本身,而是通过两个低秩矩阵A ∈ R d × r A\in \mathbb{R}^{d\times r}A∈Rd×r和B ∈ R r × k B\in \mathbb{R}^{r\times k}B∈Rr×k来近似微调权重矩阵。LoRA 的权重更新公式为:
W new = W 0 + α r Δ W = W 0 + α r ( A B T ) W_{\text{new}} =W_0+\frac{\alpha}{r}\Delta W=W_0+\frac{\alpha}{r}(AB^T)Wnew​=W0​+rα​ΔW=W0​+rα​(ABT)

  • W new W_{\text{new}}Wnew​为微调后的权重矩阵
  • W WW为预训练模型的原始权重矩阵,保持不变
  • α \alphaα是一个缩放因子,用于调节低秩矩阵的影响
  • r rr是秩的大小,表示低秩矩阵A AA和B BB的维度,通常r ≪ d , k r\ll d,kr≪d,k,从而大大减少需要训练的参数数量

假设原来的是100x1024的参数矩阵,那么参数量为102400,LoRA模型将矩阵拆成了两个矩阵相乘,如果设置Rank=8,那么就是100x8的B矩阵与8x1024的A矩阵做矩阵乘法,参数量为800+8192=8992,整体参数量下降了约11.39倍。


LoRA可以应用在模型的多种层次结构(如自注意力层、前馈网络层等),广泛适用于各类Transformer模型。

(二)LoRA矩阵的初始化

在LoRA的实现中,矩阵B初始化为零矩阵,矩阵A使用随机高斯分布初始化,这样做的主要目的是在微调开始时确保权重调整Δ W = 0 \Delta W = 0ΔW=0是零矩阵,从而稳定训练过程并保持模型在初始阶段的表现与预训练模型一致。

使用随机高斯分布初始化矩阵A可以确保它具有丰富的表示能力,使得低秩矩阵A B T AB^TABT能够探索广泛的权重调整空间。同时也可以防止梯度更新过程中出现梯度消失的问题,初始化时提供的非零梯度信息可以加速收敛,帮助模型更快地找到适应任务的最优参数。

二、LoRA与Stable Diffusion模型

  • LoRA可以作为stable diffusion模型的一种插件,用于满足一种特定的风格,或指定的人物特征属性;
  • 我们可以使用SD模型+LoRA微调训练的方式,只训练参数量很小的LoRA模型,就能在下游细分任务中取得不错的效果;
  • LoRA大幅降低了SD模型训练时的显存占用,因为并不优化主模型(SD),所以主模型对应的优化器参数不需要存储。但计算量没有明显变化,因为LoRA是在主模型的全参梯度基础上增加了“残差”梯度,同时节省了主模型优化器更新权重的过程。

训练逻辑:

  • 步骤一:冻结训练好的SD模型的权重;
  • 步骤二:在SD模型的U-Net结构中注入LoRA模块,并将其与CrossAttention模块结合,并只对这部分参数进行微调训练;
  • 步骤三:训练好新的参数后,利用重参的方式,将新参数和老的模型参数合并。

三、AdaLora和QLora

(一)AdaLora的原理

AdaLoRA(Adaptive Low-Rank Adaptation)通过在微调模型时将权重矩阵分解为低秩矩阵,并且引入了自适应调整低秩(rank)的机制。在此过程中,模型在不同层可以根据梯度信息自适应地调整分配给每层的秩值。这个机制通过动态调整秩值,在保持模型性能的同时有效减少了计算和内存需求。

给定原始模型权重矩阵W WW。通过LoRA将其分解为两个低秩矩阵:
W ≈ W 0 + Δ W = W 0 + A B T W\approx W_0+\Delta W =W_0+AB^TW≈W0​+ΔW=W0​+ABT
其中,W 0 W_0W0​是预训练模型的固定权重,A ∈ R m × r A\in \mathbb{R}^{m\times r}A∈Rm×r和B ∈ R n × r B\in \mathbb{R}^{n\times r}B∈Rn×r分别是低秩矩阵,r rr是低秩值。AdaLoRA引入的改进是通过自适应调整r rr来使得不同层的权重矩阵分解具有不同的秩值。具体来说,使用 Frobenius 范数等指标来动态调整:
Δ r = α ∥ ∇ W ∥ F ∑ i = 1 L ∥ ∇ W i ∥ F \Delta r = \alpha \frac{\| \nabla W\|_F}{\sum_{i=1}^L\| \nabla W_i\|_F}Δr=α∑i=1L​∥∇Wi​∥F​∥∇W∥F​​

  • Δ r \Delta rΔr:表示在某一层上,低秩分解矩阵的秩值r rr需要调整的量
  • α \alphaα:是一个调整系数,用来控制变化量的比例
  • ∥ ∇ W ∥ F \| \nabla W\|_F∥∇W∥F​:表示某层权重的梯度的Frobenius范数,即对该层的权重矩阵W WW进行梯度更新时的变化量的度量,它衡量了在当前训练步骤中,这一层的权重矩阵被更新的程度
  • ∑ i = 1 L ∥ ∇ W i ∥ F \sum_{i=1}^L\| \nabla W_i\|_F∑i=1L​∥∇Wi​∥F​:表示某层权重的梯度的Frobenius范数的总和,用来归一化不同层之间的影响

优势:动态调整秩值减少了资源浪费,同时保留了模型的强大性能,适合用于大模型的微调过程。

(二)QLora的原理

QLoRA(Quantized Low-Rank Adaptation)结合了量化和 LoRA 的优势。它通过对模型进行4-bit 量化,将模型权重的精度降低,从而显著减少计算和存储需求。随后,QLoRA 在量化后的模型上应用 LoRA 微调技术,保持低秩矩阵分解的效率和适应性。

量化公式:量化的核心思想是将模型的权重W WW从高精度浮点数压缩到低精度表示。4-bit 量化的过程可以表示为:
W q = round ( W − W m i n W m a x − W m i n ⋅ ( 2 4 − 1 ) ) W_q = \text{round}(\frac{W-W_{min}}{W_{max}-W_{min}}\cdot (2^4-1))Wq​=round(Wmax​−Wmin​W−Wmin​​⋅(24−1))

虽然基座模型是 4-bit 的,但为了保持训练效果,计算过程并非全程低精度。QLoRA 对模型的不同部分采用了不同的精度策略:

  • 基座模型(冻结,不更新):以 4-bit NormalFloat (NF4) 格式存储。在前向和反向传播时,会临时反量化(Dequantize) 为 16-bit BrainFloat (BF16) 精度参与计算,但不计算针对基座权重的梯度;
  • LoRA 适配器(可训练):始终保持 16-bit 精度。反向传播时,梯度仅计算并更新 LoRA 的权重(即低秩矩阵 A 和 B)。

NormalFloat(NF4):一种改进的 4-bit 量化数据类型,采用非对称的数据表示来优化量化精度。它将量化区间分为负数部分和正数部分,每部分分别使用2 k − 1 2^{k-1}2k−1个分位数来表示,其中k kk为位数(在此为4)。具体而言,NF4 将数据区间[ 0 , 1 ] [0,1][0,1]划分为8个部分,将[ 0 , 1 ] [0,1][0,1]分为9个部分,从而生成总共16个分位数。所以 NF4 有 16 个量化级别。
分位数的计算:

  • 分位数用于定义每个量化区间的边界。NF4 量化通过分位数函数来计算这些边界,确保量化区间内的数据分布尽可能均匀。
  • 对于标准正态分布,分位数函数Q X ( ⋅ ) Q_X(\cdot)QX​(⋅)是标准正态分布的分位数函数。
    q i = 1 2 ∗ Q X ( i 2 k + 1 ) + Q X ( i + 1 2 k + 1 ) q_i=\frac{1}{2}*Q_X(\frac{i}{2^k+1})+Q_X(\frac{i+1}{2^k+1})qi​=21​∗QX​(2k+1i​)+QX​(2k+1i+1​)

NF4的优势:让每个量化区间包含等量权重

  • 0 附近区间窄,量化更精细
  • 两端区间宽,合理覆盖

理论保证:对于正态分布数据,NF4 是信息论最优的 4-bit 量化(分位数量化使量化误差最小)。

(三)用途上的区别

  • AdaLoRA用于模型微调:适合用于训练阶段,尤其是在对大语言模型进行任务特定微调时,能够高效利用计算资源。通过动态调整秩值,它能够针对不同任务自适应地分配计算能力,提升微调效果。
  • QLoRA 用于模型部署 : 主要用于模型的低资源部署场景。通过 4-bit 量化,它显著减少了大模型的计算和存储需求,允许在硬件限制较多的环境中运行大模型。同时,结合 LoRA 微调,QLoRA 保证了模型的任务性能不会因量化而大幅下降。

参考:
深入浅出完整解析LoRA(Low-Rank Adaptation)模型核心基础知识
什么是LoRA模型,如何使用和训练LoRA模型?你想要的都在这!
图像生成:SD LoRA模型详解

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 2:13:17

Jenkins任务实战:五种类型、配置与排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:12:21

文本生成的解码策略与质量评估

同一条提示词连续运行两次,为什么有时回答相同,有时措辞差异很大?变化来自模型参数、解码策略,还是输入本身?读完本文,可以比较温度对候选概率的影响,并从事实、任务完成度和可读性评估结果。 语言模型每一步给出下一项的候选分布,解码器再决定选谁。这个选择会影响整…

作者头像 李华
网站建设 2026/9/29 2:12:19

【GitHub项目实战】GPT4All 探索大语言模型应用生态

本文介绍了GPT4All这一强大的开源大型语言模型生态系统的基本使用方法与配置。GPT4All的核心优势在于能够在消费级硬件上本地运行,为用户提供了在不依赖云端的情况下训练与部署自定义模型的能力。 该系统通过Nomic AI的支持确保质量与安全,适用于希望在本地运行模型的个人用…

作者头像 李华
网站建设 2026/9/29 2:10:59

Flink与Greenplum集成实战:构建混合负载实时数仓的完整方案

如果有人让你在一套数仓里同时扛住实时写入、离线ETL、即席查询和报表输出,你会怎么设计?这就是我最近在做的Flink与Greenplum集成项目:用Flink承担实时计算和增量数据管道,用Greenplum接住大规模并行分析,两者互相配合…

作者头像 李华
网站建设 2026/9/29 2:10:54

本地部署DeepSeek与Ollama:构建私有知识库的RAG实践指南

简介:这份资源是面向AI初学者与个人开发者的DeepSeek本地化实践教程,围绕本地部署、WebUI可视化与数据投喂训练三条主线展开,帮助读者在自有终端上稳定运行开源大模型,摆脱在线服务响应迟缓或宕机的困扰。资源包内含1个docx文档&a…

作者头像 李华
网站建设 2026/9/29 2:10:50

Moviepy批量拼接开场和结束视频

在现代视频处理需求中,常常需要将多个视频文件合并成一个完整的视频片段,且每个视频都需要添加统一的片头和片尾。例如,在制作课程或宣传片时,将多个模块视频批量合并并添加品牌标识,既可以提高视频的连贯性,又能保证品牌传播的完整性。 为满足这种需求,本教程讲解如何…

作者头像 李华