发现 LoRA 很适合作为面试题来考察。首先,基本大模型领域人人都用过,候选人即便是没实际训过模型,也多半对 LoRA 有所耳闻;其次,LoRA 既涉及工程落地经验,也牵扯到数学原理,无论面试对象是初级还是高级,都能试探出深浅。
一、基础认知与实践经验:破冰与背景考察
1. 你在什么场景下使用过 LoRA?具体微调的是什么模型?
考察点在于了解候选人的真实项目经历。究竟只是跑通了开源脚本(如 LLaMA-Factory),还是具备实际的业务落地能力(例如垂直领域知识注入、角色扮演、代码生成等)。
2. LoRA 与全量微调(Full Fine-Tuning,FFT)相比,在显存消耗、训练速度和最终效果上有什么差异?
参考要点如下:
- 显存:大幅降低。通常只需 FFT 的 1/3 到 1/10,因为无需保存全量参数对应的优化器状态和梯度。
- 速度:训练更快,因为计算梯度的参数量大幅减少。
- 效果:在大部分下游任务中,LoRA 可以达到与 FFT 媲美的效果(通常能达到 90% 以上);但在需要注入大量全新知识的场景下,FFT 的上限往往更高。
3. 在训练 LoRA 时,你通常会调整哪些超参数?它们分别有什么作用?
秩大小(Rank,$r$)、缩放系数(Alpha,$\alpha$)、Dropout 率、学习率(LR)、作用的模块(Target Modules)都是常见调整项。
二、核心原理与数学基础:深度考察
4. 请简述 LoRA 的核心原理。
核心思想是冻结预训练模型的权重 $W_0$,通过引入两个低秩矩阵 $A$ 和 $B$ 来近似权重的更新量 $\Delta W$。
前向传播公式变为:
$$h = W_0x + \Delta Wx = W_0x + BAx$$
其中 $A$ 通常使用高斯分布初始化,$B$ 使用零初始化,这样能保证训练开始时 $\Delta W = 0$。
5. 什么是低秩矩阵?什么是低秩分解?为什么大模型的权重更新可以被假设为低秩的?
- 低秩矩阵:矩阵的秩(线性无关的行或列的最大数量)远小于其行数或列数。
- 低秩分解:将一个大矩阵近似表示为两个小矩阵的乘积。例如将 $d \times d$ 的矩阵分解为 $d \times r$ 和 $r \times d$ 两个矩阵的乘积,其中 $r \ll d$。
- 为什么可行:借鉴了 Aghajanyan 等人(2020)的研究结论——预训练大模型具有极低的"内在维度"(Intrinsic Dimension)。模型在预训练阶段已学到通用表征,下游任务的微调只需在特定的低维子空间内进行参数更新即可。
6. 你还知道其他的矩阵分解方法吗(如 SVD、PCA 等)?为什么 LoRA 不直接使用 SVD 进行分解?
- 其他方法:奇异值分解(SVD)、主成分分析(PCA)、LU 分解、QR 分解等。
- 为什么不用 SVD:SVD 是对已确定的矩阵做分解。但在微调开始时,我们并不知道目标更新矩阵 $\Delta W$ 是什么——它是需要通过反向传播学出来的。
- LoRA 的做法是直接定义两个低秩矩阵 $A$ 和 $B$ 作为可学习参数,通过梯度下降让模型自行寻找最优的低秩空间,而非对已知矩阵做数学分解。
7. LoRA 公式中通常有一个缩放因子(Scaling factor,通常是 $\alpha/r$),它的作用是什么?
它的作用是在改变秩 $r$ 的大小时,保持梯度和激活值的数量级稳定。调参时通常会固定 $\alpha$ 和 $r$ 的比例(例如 $\alpha = 2r$),这样调整 $r$ 时就不需要大幅修改学习率。
三、工程细节与调优:考察踩坑经验
8. LoRA 通常作用于 Transformer 的哪些模块?只微调 Attention 模块和同时微调 MLP 模块有什么区别?
最初的 LoRA 论文主要作用于 Attention 的 $W_q$ 和 $W_v$。
但后续实践(如 QLoRA 论文)表明,将 LoRA 应用于所有线性层——包括 $W_k$、$W_o$ 以及 MLP 层的 gate_proj、up_proj、down_proj——通常能取得更好的效果,代价是参数量会略有增加。
9. LoRA 在推理(Inference)阶段会增加延迟吗?为什么?
不会增加延迟。
因为在推理前,可以通过重参数化(Reparameterization)把训练好的低秩矩阵合并到原权重中:
$$W_{merged} = W_0 + BA$$
推理时只需使用 $W_{merged}$ 进行计算,网络结构和参数量与原模型完全一致。
10. 如果在使用 LoRA 微调时发现模型出现了严重的"灾难性遗忘"(比如只会回答特定领域问题,丧失了通用对话能力),你会怎么排查和解决?
排查与解决思路:
- 减小 $r$ 或 $\alpha$;
- 降低学习率;
- 在训练数据中按比例混合通用领域的预训练/指令微调数据(Data Mixing);
- 减少训练的 Epoch。
四、前沿变体与横向对比:区分优秀候选人
11. 了解过 QLoRA 吗?它和普通的 LoRA 有什么区别?
QLoRA 引入了 4-bit NormalFloat(NF4)量化、双重量化(Double Quantization)和分页优化器(Paged Optimizers)。
区别在于:LoRA 的基座模型通常以 FP16/BF16 加载,而 QLoRA 将基座模型量化到 4-bit,大幅降低了显存需求(可以在单张 24G 显卡上微调 33B 模型),同时通过 LoRA 保持了接近全量微调的性能。
12. 社区后来提出了很多 LoRA 的变体,比如 AdaLoRA、DoRA 等,你能挑一个讲讲它解决了 LoRA 的什么痛点吗?
- AdaLoRA:解决了 LoRA 中所有模块共享相同秩 $r$ 的问题,它可以根据模块重要性动态分配秩的大小,对更重要的层分配更大的 $r$。
- DoRA(Weight-Decomposed Low-Rank Adaptation):将权重分解为"幅度"(Magnitude)和"方向"(Direction),只对方向进行低秩更新,效果比普通 LoRA 更好,学习模式更接近全量微调。
13. 除了 LoRA 系列,你还了解哪些 PEFT(参数高效微调)方法?
Prompt Tuning、Prefix Tuning、P-Tuning v2、Adapter 等都属于此列。
候选人能说出它们的大致原理即可,比如在输入前拼接可学习的 Embedding,或在 Transformer 块之间插入小型网络。
面试官使用建议
- 初级/中级候选人:重点考察第一层和第三层,确认他们能干活,知道如何调参和合并模型。
- 高级/算法研究员候选人:重点考察第二层和第四层,要求不仅知其然,还要知其所以然,并且对前沿论文保持持续跟进。
作者:DolbyUUU,来源:知乎专栏