LoRA 是什么?大模型低秩适配微调详解

LoRA微调参数高效

LoRA 是一种参数高效微调方法:冻结原模型权重,只在旁边训练一组很小的低秩矩阵。训练成本降到全量微调的很小一部分,产出的适配器文件通常只有几十兆,可以随时挂载和切换

LoRA 是 Low-Rank Adaptation 的缩写,中文一般译作「低秩适配」。它是今天最常用的微调方法:不去改动原模型的几十上百亿个权重,而是把它们全部冻结,只在旁边新增并训练一小组参数。

这个改动带来的差别是量级上的。全量微调一个 70B 模型需要一整个集群和上百 GB 显存;用 LoRA,一张消费级显卡加一个下午往往就够,产出的文件通常只有几十到几百兆,可以像插件一样挂到基座模型上,用完就卸。

先用一句话抓住它

LoRA 不修改原模型,只在旁边训练一层很薄的「修正量」,用的时候叠加上去。

生活里的类比是给相机加滤镜。你不会为了拍暖色调的照片就去拆机改传感器,而是在镜头前加一片滤镜——底子没动,效果变了,换个场景换片滤镜就行。LoRA 之于大模型就是这片滤镜:基座模型是共用的,不同任务各自挂不同的适配器。

它为什么能只训这么少的参数

LoRA 的论文里有个关键观察:微调时权重的更新量虽然形状很大,但内在维度很低——真正有效的变化集中在一个低维子空间里。既然如此,就不必用一个和原权重同样大的矩阵去表达这个更新,用两个瘦长的小矩阵相乘来近似就够了。

输入 原权重 W冻结不动 相加 降维矩阵 Ad × r 升维矩阵 Br × d 输出

图里的 r 就是「秩」,通常取 8、16、32 这类很小的值。假设原权重是 4096×4096(约 1600 万个参数),秩取 16 的 LoRA 只需要 4096×16 + 16×4096 ≈ 13 万个参数,不到千分之一。训练时只有 A 和 B 参与更新,原权重连梯度都不用算,显存立刻降下来。

推理时有两种用法:把 A×B 的结果合并回原权重,得到一个和普通模型无异的新模型,零额外延迟;或者保持分离,运行时动态叠加,好处是同一个基座可以同时服务多个不同的适配器。

QLoRA:让消费级显卡也能微调大模型

LoRA 解决了「要训多少参数」,但基座模型本身仍要装进显存。QLoRA 补上了这一环:先把基座量化到 4 位并冻结,再在上面训练 LoRA。两者叠加后,原本需要多卡集群的微调任务,在单张大显存消费级显卡上就能做。

这基本上是今天开源社区微调的默认配置,也是各类平台上「一键微调」背后最常见的实现。

它适合做什么,不适合做什么

LoRA 擅长的是调整行为和风格:让模型固定用某种输出格式、遵循某套行业术语、模仿特定文风、把某类分类任务做得更准。这些任务的共同点是——模型本来就有相关能力,你只是要把它的倾向固定下来。

它不擅长的是灌注大量新知识。想让模型掌握你公司几万份内部文档的内容,LoRA 不是合适的工具,RAG 才是:知识会更新,而重训一次适配器远比更新一个索引麻烦,而且幻觉不会因为微调过就消失。一个实用的判断口径是:要改的是「怎么说」用微调,要补的是「说什么」用检索。

在图像生成那边,LoRA 的用法几乎完全一样,而且更为人熟知:社区里大量的角色 LoRA、画风 LoRA,都是在同一个扩散模型基座上挂不同的小文件。

和其他方法的区别

和全量微调:全量微调能改动的空间更大,在数据量很大、要求彻底改变模型行为时上限更高,但成本高、容易灾难性遗忘,而且每个任务都要存一份完整模型。LoRA 在绝大多数实际场景下的效果接近全量微调,成本却低一两个数量级。

和提示词工程:能靠写清楚提示词解决的,就别微调——提示词改起来是秒级的,微调是小时级的。只有当提示词已经写得很长、效果仍不稳定,或者你想把这段长提示的成本省掉时,微调才划算。

和蒸馏蒸馏是训练一个更小的模型去逼近大模型的行为,目标是省推理成本;LoRA 不改变模型大小,目标是改变行为。

容易误解的地方

「LoRA 会让模型变强」——它让模型在你的目标任务上更贴合,通用能力通常略有下降。训练数据越窄、训得越狠,这种偏移越明显。

「秩越大效果越好」——秩过大不仅接近全量微调的成本,还更容易过拟合。常见做法是从 8 或 16 起步,按验证集表现决定要不要加,同时注意学习率和 alpha 的配比。

「数据越多越好」——LoRA 对数据质量极其敏感。几百条高度一致、格式统一的高质量样本,通常好过几万条参差不齐的数据。实践中大部分失败案例是数据问题,不是超参数问题。

「微调完就不用评估了」——恰恰相反。微调后必须同时测目标任务和原有能力,确认没有为了一个指标牺牲掉别的,这属于评估的基本功。

什么时候值得做

先按顺序排除:提示词能不能解决?few-shot 示例能不能解决?RAG 能不能解决?三个都不行,且你手上有几百条以上高质量、格式一致的样本,才轮到 LoRA。

另外一个常被忽略的动机是省钱:把一段两千 Token 的系统提示训进适配器里,每次调用就不用再付这两千 Token。当调用量足够大时,这笔账比效果提升更划算,也和提示词缓存构成互补选项。

资料来源