热搜词:

我是这样理解 LoRA 微调的

LoRA微调到底怎么理解?本文将从“为什么是LoRA”到“LoRA怎么做”,系统拆解其核心机制、适用场景与工程优势,并结合实际案例,帮助你建立对LoRA的清晰认知框架。

接触AI的朋友,大多数人可能都听过目前最热门的参数高效微调方法——LoRA。但它到底是怎么回事,你了解吗?这篇文章就来给大家扫扫盲,从原理、流程到适用场景,帮你构建一个扎实、清晰的基础认知。

什么是LoRA?

LoRA,全称是Low-RankAdaptation,是一种高效的模型微调技术。它的主要目标是:在不影响模型性能的前提下,减少训练参数的数量、降低计算和存储成本。

传统的微调方法是:直接修改模型的全部参数或大部分参数,这样做虽然能适应新任务,但带来高昂的计算成本和显存占用。

而LoRA的做法是:不去直接修改原始模型的大型权重矩阵,LoRA会为每一个被微调的矩阵引入一对低秩矩阵的补丁(A和B),并训练它们,而不修改原始权重。

用更简单的话来说:

把原始大模型比作发动机,LoRA就是在选定的关键零部件(那些会影响模型行为的矩阵)分别加装一对“小补丁”,这些补丁分别“修正”这些部件的行为,使整体适配任务需求,但不重造整台发动机。

什么是低秩矩阵?

实际秩(r)表示矩阵中线性无关的行或列的最大数量,即矩阵中有多少独立信息。

原始模型矩阵M(a×b)矩阵,其最大可能的秩L=min⁡(a,b)。

低秩矩阵:当实际秩r

示例说明

考虑一个10×10的矩阵:

最大秩L=10;

若其秩为r=3,则仅有3条独立信息,其余行/列可由这3条线性组合得出;

故该矩阵为典型的低秩矩阵。

疑问:

你现在是否会好奇r怎么设置?继续往下看为你解答

LoRA微调怎么实现的?

整体流程简介

1、选定模型中需要插入LoRA的对应的层的矩阵;

2、把这些矩阵分别“补充”一对新的小矩阵(补丁),叫做A和B(维度是[r,d]和[d,r],r是秩,d是原始矩阵的层数);

3、保持原始模型不变(即冻结参数);

4、只微调这两个小矩阵A和B;

5、微调后模型与原模型合并。

关键流程拆解

一、怎么选:哪些层、哪些矩阵该插LoRA?

LoRA并不是在所有模型层里都加,它是有策略地选择目标层和矩阵来插入的。实际使用中有以下规律:

1、优先选择Q和V

Q(Query)和V(Value)是Transformer中Attention的核心;

控制了模型对哪些信息更关注;

插在这里,能有效调整模型的注意力行为,对生成文本影响最大;

也是HuggingFace等平台的主流做法。

2、有时插在前馈网络(FeedForward,MLP)部分的线性层

某些任务下,MLP对语义转换有影响;

插入LoRA可以微调语义加工的过程;

但用得比较少,不是标准做法。

3、不要插在LayerNorm或Embedding上

这些层参数很少,对模型最终输出的影响也不大;

插入LoRA不仅无效,还可能引起梯度不稳定、性能下降。

一句话总结:该插的插,不该动的别动。二、选择好之后干嘛:补丁长啥样?秩怎么选?

假设你在Transformer中选择了Q和V层进行LoRA微调,下面以Q矩阵为例说明:1、在Q矩阵旁添加可训练补丁假设原始Q矩阵有维度512x512,LoRA会插入一对补丁矩阵:

这对补丁相乘后生成的Q补=QAQB具有与原始Q矩阵相同的维度[512,512]。

QA:维度为[r,512]

QB:维度为[512,r]

2、冻结原始权重,仅训练补丁在训练过程中,原始Q矩阵完全被冻结,只有QA和QB(也就是补丁矩阵)参与更新。这样做的目的是将微调集中于“调整特定方向”的任务,避免修改整个大矩阵。

3、秩r的选择推荐秩r是你指定的小维度,对补丁的表达能力与参数数量起决定作用。经验推荐:

r越大:补丁的调节能力更强,但计算与参数量也增多;

r越小:参数少、效率高,但可能无法充分调动模型行为。

4、训练与测试流程

在训练阶段,模型只更新补丁矩阵QA、QB;

注:r往往是事先设定的超参数,而非训练时优化的变量。

三、最后怎么合并:补丁叠加到模型的哪里?

LoRA微调结束后,一般会把补丁和原始模型合并为一个新模型,方便部署。这里的规则是:

只合并你插入过LoRA的位置;

没插过的地方(比如你没选的矩阵或层)保持不变;

所以,合并后的模型体积稍微变大,但参数结构基本不变;

效果上,相当于你用LoRA完整调好了那几个关键的“螺丝”。

举例:

原模型是512层;

你只对第400层的Q/V做了LoRA;

合并时,也只合并第400层中的Q/V,其它不变;

其余层结构原封不动。

LoRA适合用在哪些场景?

从前面的整个流程来看,我自己的理解是:

LoRA微调的核心,是对模型中某些层的某些矩阵做了补丁式的更新,这样可以让模型在保持原有“核心知识”不变的前提下,更好地适配具体任务。

换句话说,LoRA不是重造模型,而是对部分结构做了轻量调整,让它更“听话”。

所以到这里,我对LoRA的理解是:不改知识,只改表达方式。

基于这个特点,我觉得LoRA比较适合以下几类场景:

控制模型说话的语气、语法、输出格式;

让模型把原来就知道的内容,用你希望的方式说出来;

固化一些提示词的效果,避免反复试prompt;

快速把通用模型适配到某个特定领域,比如医疗、法律这类风格明确的任务。

但它也有明显的边界,不太适合做这些事:

教模型全新的知识点(模型原本从未接触过的内容);

建立新的因果推理路径或复杂的逻辑链条;

把模型从一个“知道很多”的通用模型,变成一个“真正理解”的专家模型。

总的来说,LoRA更像是在已有知识之上做“表达方式的微调”,它不会让模型更聪明,但可以让模型说话更稳、更像你想要的样子。