核心要点

  • 能写出核心公式:冻结预训练权重 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 零初始化。

追问

追问 1r 越大效果一定越好吗?该怎么选?

不是。r 增大可训练参数和拟合能力上升,但超过更新的本征秩后收益迅速饱和,还增加显存过拟合风险。实践常从 r=8/16 起步,任务越复杂、与预训练分布差距越大就适当调大,并配合调 α;同时关注注入哪些层(如只在注意力的 q、v 投影上加)往往比一味加大 r 更划算。

追问 2LoRA 和 QLoRA 有什么区别?

QLoRA 在 LoRA 之上把冻结的底座权重 W0 量化到 4-bit(NF4)存储,前向时反量化参与计算,而可训练的 A、B 仍是高精度。这样大幅降低底座的显存占用,让单卡也能微调几十上百亿参数模型,再配合分页优化器等技术,几乎不损失效果。本质是「量化省显存」叠加「LoRA 省可训练参数」。

追问 3为什么 LoRA 推理几乎零额外开销,而 Adapter 不行?

LoRA 的更新是与原权重同形状的线性项 B·A,可在部署前直接合并进 W0,推理时就是一个普通权重矩阵,没有新增结构。而传统 Adapter 是在层之间插入额外的小网络模块,属于串行的新增计算,无法合并回原权重,因此每次前向都会带来额外延迟。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习