核心要点
能写出核心公式:冻结预训练权重 W0,对其更新量 ΔW 做低秩分解 ΔW = B·A,其中 B ∈ R^(d×r)、A ∈ R^(r×k)、秩 r ≪ min(d, k),前向变为 h = W0·x + B·A·x
能说清训练对象:W0 全程冻结只参与前向,反向只更新 A、B 两个小矩阵,可训练参数从 d×k 降到 r×(d+k)
能讲出低秩有效的依据:大模型过参数化,微调引起的权重更新落在一个低维子空间里、本征秩(intrinsic rank)很低,所以用低秩矩阵就足以逼近全量微调的 ΔW
能说清初始化技巧:A 用高斯随机初始化、B 初始化为零,保证训练开始时 ΔW = B·A = 0,即初始等价于原模型、不破坏预训练能力;推理可把 B·A 合并回 W0 做到零额外延迟
标准回答
LoRA(Low-Rank Adaptation)的出发点是:全量微调要更新整个权重矩阵 W ∈ R^(d×k),参数量巨大;但实践观察到微调真正需要的「改动」其实很小,可以用一个低秩结构来表达。
数学形式
设预训练权重为 W0,全量微调后的权重为 W = W0 + ΔW。LoRA 不直接学 ΔW,而是把它约束为低秩分解:
ΔW = B · A,其中 B ∈ R^(d×r),A ∈ R^(r×k),r ≪ min(d, k)。
于是前向计算变为 h = W0·x + B·A·x。训练时 W0 冻结,反向传播只更新 A 和 B。原本 d×k 个可训练参数被压缩为 r×(d+k) 个,当 r 取 8、16 这种小值时,可训练参数常常只有原来的千分之几。
为什么低秩能近似全量微调
关键依据是大模型的「过参数化 + 低本征秩」性质。研究发现,预训练模型在适配下游任务时,权重的有效更新 ΔW 并不是满秩的随机扰动,而是集中在一个低维子空间里——也就是 ΔW 的本征秩(intrinsic rank)很低。既然真实更新本身就近似低秩,那么用 B·A 这样一个秩为 r 的矩阵去拟合它,信息损失就很小,因此能逼近全量微调的效果。
初始化与缩放
- A 高斯初始化、B 零初始化:保证起点 ΔW = B·A = 0,训练开始时模型严格等于预训练模型,不会一上来就破坏已学到的能力,训练更稳。
- 通常再乘一个缩放系数 α/r 来调节更新幅度,使不同 r 之间的学习率更可比。
推理优势
部署时可以把 B·A 直接加回 W0,得到合并权重 W0 + B·A,推理时不引入任何额外的矩阵和延迟;同一个底座还能挂载多个不同任务的 LoRA 适配器按需切换。
常见误区
⚠️ 常见踩坑
一是误以为 LoRA 在「压缩原模型权重」——其实 W0 一个数都没动,被低秩近似的只是微调的「更新量 ΔW」,原始权重始终全精度冻结。二是误以为低秩对任何模型任何任务都够用——低秩有效的前提是更新本征秩低,当任务与预训练分布差异很大、需要学大量新知识时,过小的 r 会欠拟合,需要调大 r 或扩大注入的层范围。三是把 A、B 都初始化成随机值,会导致起点 ΔW≠0、训练初期就扰动预训练表征,应保持 B 零初始化。
追问
追问 1:r 越大效果一定越好吗?该怎么选?
追问 2:LoRA 和 QLoRA 有什么区别?
QLoRA 在 LoRA 之上把冻结的底座权重 W0 量化到 4-bit(NF4)存储,前向时反量化参与计算,而可训练的 A、B 仍是高精度。这样大幅降低底座的显存占用,让单卡也能微调几十上百亿参数模型,再配合分页优化器等技术,几乎不损失效果。本质是「量化省显存」叠加「LoRA 省可训练参数」。
追问 3:为什么 LoRA 推理几乎零额外开销,而 Adapter 不行?
LoRA 的更新是与原权重同形状的线性项 B·A,可在部署前直接合并进 W0,推理时就是一个普通权重矩阵,没有新增结构。而传统 Adapter 是在层之间插入额外的小网络模块,属于串行的新增计算,无法合并回原权重,因此每次前向都会带来额外延迟。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习