LoRA:低秩适配到底在训练什么?

微调一个大模型,传统做法是把所有参数都更新一遍——又贵又慢还占显存。LoRA 提出一个更聪明的思路:冻结原始模型不动,只往里面塞一对极小的「适配器」矩阵,训练时只更新这一小撮参数。结果效果接近全量微调,但显存、存储、成本都砍掉一两个数量级。本文把它是什么、原理、作用、能干什么、解决什么问题一次讲清。

Low-Rank Adaptation rank r 冻结基座 Adapter QLoRA PEFT

1. LoRA 一句话讲清

LoRA(Low-Rank Adaptation,低秩适配)是 2021 年微软提出的一种参数高效微调(PEFT)技术。它的核心主张是:模型在适配新任务时产生的权重变化量 ΔW 其实是「低秩」的——可以用两个小矩阵相乘来近似表示,因此不必动原模型一个参数,只训练这两个小矩阵就够了。

🧊

冻结基座

原始预训练权重 W 全程不更新,像被冻住一样,省下大量反向传播的计算与显存。

旁路加残差

在权重旁边挂一对小矩阵 B·A,前向时把它的输出叠加到原输出上,即 h = Wx + BAx

🪶

只训小矩阵

训练对象只有 AB(参数量常是全集的 0.1%~1%),学完即得到一个轻量「适配器」。

一句话记忆:LoRA = 不动大模型 + 插一对超薄「贴纸」(适配器)让模型学会新本领;贴纸撕下来模型就回到原样,换个贴纸就能换本领。

2. 为什么需要 LoRA?

要理解 LoRA 的价值,先得看它想解决的痛点——全量微调(Full Fine-Tuning)的真实代价。

全量微调的「三座大山」

💾

显存爆炸

反向传播要存所有参数的梯度、优化器状态(如 Adam 的 m/v)。训练 7B 模型全量微调常需 60~80GB 显存,普通人根本跑不起。

📦

存储灾难

每个任务要存一整份完整模型副本。100 个任务 = 100 份 13GB 模型,空间与分发成本惊人。

⚠️

灾难性遗忘

更新所有参数容易让模型丢掉预训练学到的通用能力,还可能破坏基座稳定性。

全量微调(Full FT) 基座权重 W(全部解冻) ⬇ 反向传播更新每一层 输出:一份新完整模型 显存 ~60GB+ | 每任务存 13GB 痛点 LoRA 微调 基座 W 冻结(不更新) 只训旁路 B·A(极小) 显存 ~12GB | 每任务存几 MB
同样把模型适配到新任务,LoRA 把显存与存储都砍掉一两个数量级

3. 核心原理:低秩分解

LoRA 的理论基础是一个观察:模型适配新任务时权重的变化量 ΔW 具有很低的「内在秩」。换句话说,这个巨大的变化矩阵其实是高度冗余的,可以用两个瘦长的小矩阵相乘来逼近。

数学表达

设某层原始权重 W ∈ ℝ^(d×k)(如 4096×4096)。LoRA 将它改写为:

h = Wx + ΔW·x = Wx + B·A·x   ,其中  B ∈ ℝ^(d×r)A ∈ ℝ^(r×k)

  • W:预训练权重,冻结,训练中不更新(不存梯度)。
  • A → B:随机初始化(A 用高斯,B 用 0),是唯一要训练的部分。
  • r:秩(rank),是 LoRA 最核心的超参,通常取 8 / 16 / 32 / 64。r 越小越省,越大表达力越强。
  • 关键:ΔW = B·A 的秩最多为 r,远小于 d、k——这就是「低秩」二字的由来。
W d × k = 4096 × 4096 ≈ 1670 万参数 · 冻结 = W 冻结(不改) + A r × k = 8×4096 B d × r = 4096×8 ΔW = B·A 若全量更新 W:1670 万参数
把巨大的 ΔW(d×k) 拆成 B(d×r)·A(r×k),r=8 时只需训练约 6.5 万参数(占全集 0.4%)
直觉理解:全秩的 ΔW 是「完整重写整本书」,低秩的 B·A 相当于「在书边写一薄本批注贴纸」——贴纸很薄,但足以改变阅读重点与结论。秩 r 就是这本贴纸的「页数」。

4. 训练时到底发生了什么

前向传播

输入 x 同时过两条路:

  • 主干:Wx,用冻结的预训练权重算(normal 路径)。
  • 旁路:BAx,用可训练小矩阵算。
  • 两条路相加得到最终输出 h = Wx + BAx
  • 旁路的 ΔW 通常还乘一个缩放系数 α/r 来平衡量级。

反向传播与推理

  • 只有 AB 的梯度被计算与更新,W 的梯度被关掉。
  • 梯度/优化器状态只需为极小矩阵准备,显存骤降
  • 推理时:可把 BA 直接加回 W 合并,零额外延迟;也可保持分离便于随时换适配器。
x W(冻结) Wx B·A(可训) BAx + h = Wx + BAx 训练时只更新 B·A,W 的梯度被关闭
前向:x 同时走冻结主干与可训练旁路,相加得输出;反向:仅 B·A 获梯度

5. 进阶:量化版 QLoRA

LoRA 把可训练参数砍小了,但基座模型本身还是占显存。2023 年的 QLoRA 再补一刀:把冻结的基座量化为 4-bit(NF4 数据类型),再用 LoRA 微调,让 65B 模型能在单张 48GB 显卡上微调。

🔻

4-bit 量化基座

用 NF4 把权重压到 4-bit 存储,显存再降 ~3×。

🧱

分页优化器

用 NVIDIA 统一内存避免显存峰值 OOM。

🪶

双量化

对量化常数再量化一次,进一步省显存。

一句话:LoRA 省「训练参数」,QLoRA 连「基座本身」也一起压——两者常常组合使用,是如今消费级显卡微调大模型的事实标准。

6. LoRA 能干什么 / 作用

LoRA 不是「换个更好的模型」,而是一个让微调变得便宜、灵活、可量产的方法。它的作用体现在四个层面:

🎯

把大模型适配特定任务

给通用基座挂上专属 LoRA,就能变成「法律助手」「医疗问答」「客服口吻」等垂直模型。

🗣️

学习特定风格/人设

用少量样本训练,让模型模仿某作者的文风、某角色的语气,而不必重训全模型。

🔀

多能力并存、按需切换

一个基座 + 多个 LoRA 适配器:用时加载对应「贴纸」,不用时换下,像换镜头一样灵活。

🧪

低成本快速实验

单卡几小时就能训一个适配器,方便做 A/B、试不同数据配比,迭代飞快。

不止 LLM:LoRA 是「通用适配器」

虽然起源于大模型语言微调,同一思想已被广泛用于:

LLM
文本大模型微调
扩散
Stable Diffusion 画风/角色
视觉
ViT 等视觉模型适配
语音
语音/音频模型适配

7. LoRA 解决了什么问题

💰

显存/算力门槛

把全量微调的 60GB+ 显存降到 12GB 甚至单卡 4-bit 可跑,普通人也能微调大模型。

📦

存储与分发

一个适配器只有几 MB~百 MB,对比完整模型 13GB+;存 100 个任务的适配器也不占多少空间。

🧩

任务隔离与组合

不同任务互不干扰、各自独立存;可按需加载/合并,避免「一个模型只为一件事重训」的浪费。

🛡️

稳定性与遗忘

冻结基座,训练只动极小增量,大幅降低灾难性遗忘与破坏预训练通用能力的风险。

它不解决什么(要诚实):LoRA 的「表达上限」受秩 r 限制,极端复杂的全新能力(与原分布偏离极大)仍可能不如全量微调;超大 r 也会逼近全量微调的成本。它解决的是性价比与可量产,而非「上限更高」。

8. 关键超参数一览

超参数含义经验取值影响
r(rank)低秩矩阵的秩,适配器「容量」8 / 16 / 32 / 64越大表达力越强、参数越多、越接近全量微调
α(alpha)缩放系数,实际增量 = (α/r)·BA常为 r 的 1~2 倍控制旁路贡献强度,α=r 时等价于无缩放
lora_dropout作用在 A 输入上的 dropout0 / 0.05 / 0.1正则化,防过拟合小数据集
target_modules对哪些权重挂 LoRAq,k,v,o / q,v / all linear挂注意力层足够,挂全量更贵但可能更优
量化位宽基座是否 4-bit(QLoRA)FP16 / 4-bit NF44-bit 进一步降显存,略有精度折损

9. 全量微调 vs LoRA 对比

维度全量微调(Full FT)LoRA / QLoRA
可训练参数100%(全部权重)0.1% ~ 1%
显存占用极高(需存全部梯度+优化器状态)低,QLoRA 可单卡跑大模型
产出物一整份新模型(GB 级)一份适配器(MB 级)
多任务每任务一份完整副本一基座 + 多适配器,按需切换
遗忘风险较高低(基座冻结)
推理延迟基准合并后零额外延迟
表达上限最高受秩 r 约束,常态任务够用
适用场景资源充足、需极致适配绝大多数微调、个人/中小团队

10. 典型应用场景

🏢

企业私有知识

用内部语料训 LoRA,让通用模型说「自家话」,权重不泄露、部署轻。

🎨

AI 绘画定制

SD 的 LoRA 能学特定画风、角色、概念,社区海量「风格包」即此物。

🌐

多语言/方言

给基座加一个语言 LoRA,切换即用,不必为每个语种训整模型。

🤖

人设与角色扮演

用少量对话样本训出某角色口吻的适配器,随时挂载。

🧪

科研快速验证

几小时出一个适配器验证假设,大幅降低实验成本。

🔧

指令/对齐微调

LoRA 常用于 SFT、甚至是 RLHF 阶段的轻量适配(如 LoRA+PPO)。

11. 总结

一句话回顾

LoRA 是一种「低秩适配」的参数高效微调技术:冻结预训练基座,只在权重旁挂一对极小的可训练矩阵 B·A 来近似权重的更新量 ΔW。它让微调从「重训整个模型」变成「训练一张轻薄贴纸」。

  • 是什么:低秩分解 + 冻结主干 + 旁路残差的 PEFT 方法。
  • 原理:h = Wx + BAx,只更新秩为 r 的小矩阵,r 越小越省。
  • 作用:把大模型便宜地适配到具体任务/风格,支持多适配器切换与快速实验。
  • 能干什么:LLM、扩散模型、视觉、语音等几乎所有需要「微调适配」的地方。
  • 解决什么:全量微调的显存爆炸、存储灾难、任务隔离难、易遗忘等痛点。
  • 进阶:QLoRA 在 4-bit 基座上做 LoRA,把门槛压到消费级显卡。
面试怎么答:先说「LoRA 是微软提出的参数高效微调方法,核心是用低秩矩阵 B·A 近似权重增量 ΔW,只训练这小撮参数、冻结基座」;再补「省显存省存储、支持多适配器、QLoRA 进一步量化基座」;最后点一句「代价是表达上限受秩约束,极端任务不如全量微调」——这就很完整了。