Skip to content

LoRA 低秩适配面试题

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 什么是 LoRA?

LoRA(Low-Rank Adaptation)通过低秩分解来模拟参数的改变量,以极小的参数量实现大模型的间接训练。

核心思想:冻结预训练模型的权重矩阵,在旁边增加一个旁路,用两个低秩矩阵(A 和 B)来近似参数更新量。

2. LoRA 的实现思路

原始前向:h=W0xLoRA 前向:h=W0x+BAx(W0 冻结,只训练 A,B)推理合并:W=W0+BA(无额外推理延迟)

关键步骤

  1. 在原模型旁增加旁路,通过低秩分解(先降维再升维)模拟参数更新量
  2. 训练时冻结原模型,只训练降维矩阵 A 和升维矩阵 B
  3. 推理时将 BA 加到原参数上,不引入额外推理延迟
  4. 初始化:A 采用高斯分布,B 初始化为全 0,保证训练开始旁路为 0 矩阵
  5. 可插拔式任务切换:W₀ + B₁A₁ → W₀ + B₂A₂

3. LoRA 的优点

  1. 参数效率:一个中心模型服务多个下游任务,大幅节省参数存储
  2. 零推理延迟:推理时合并权重,不增加推理成本
  3. 可组合:与其他参数高效微调方法正交,可组合使用
  4. 训练稳定:效果较好且训练过程稳定
  5. 任务切换灵活:可插拔式切换不同任务

4. LoRA 为何能加速训练?

原因说明
只更新部分参数减少计算量(如只更新 Self Attention 参数或部分层)
减少通信时间多卡训练时传输数据量减少
低精度加速支持 FP16、FP8 或 INT8 量化

但这些加速能力并非 LoRA 独有,几乎所有参数高效方法都具有。LoRA 的核心优势在于:低秩分解直观、效果接近全量微调、推理无额外成本。

5. QLoRA

在 LoRA 基础上进一步降低显存需求:

  1. 使用新颖的高精度技术将预训练模型量化为 4 bit
  2. 添加一小组可学习的低秩适配器权重,通过量化权重的反向传播梯度进行微调

特点:显著降低对显存的要求,但训练速度慢于标准 LoRA。

6. AdaLoRA

对 LoRA 的改进,根据重要性评分动态分配参数预算给权重矩阵:

  • 关键矩阵 → 分配高秩,捕捉精细任务特定信息
  • 次要矩阵 → 降低秩,防止过拟合并节省计算预算

7. LoRA 权重是否可以合入原模型?

可以。将训练好的低秩矩阵(B×A)与原模型权重直接相加,即可计算新权重。推理时无需额外开销。

8. ChatGLM-6B LoRA 后权重多大?

Rank=8,target_module=query_key_value 条件下,约 15MB

9. LoRA 的缺点

  1. 参与训练的参数量有限(百万到千万级别),效果比全量微调差不少
  2. 不能节省训练时间(计算图变大,可能训练更慢)
  3. 在大量数据训练下,比不过全量微调
  4. 在 LLM 上表现差距比扩散模型更大

10. 如何在已有 LoRA 上继续训练?

建议将之前的 LoRA 与 Base Model 合并后继续训练新的 LoRA。为保留之前的知识和能力,新训练时应加入一些之前的训练数据。

11. LoRA 应作用于 Transformer 的哪个参数矩阵?

实验结果

  • 所有微调参数集中在某一个参数矩阵 → 效果差
  • 将可微调参数分配到 Wq 和 Wv → 原论文中效果最好(实践中也常扩展到 q/k/v/o 与 FFN)
  • 即使是 Rank=4 也能获得足够的信息

实践中应作用于多类权重矩阵(而非用更大的秩单独微调某一种):

--lora_target q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj

12. Rank 如何选取?

  • 论文实验范围:1-64
  • 最优区间:Rank 4-8(更高并无提升)
  • 注意:论文针对下游单一监督任务,指令微调因指令分布更广,建议 Rank 8 以上进行测试

13. Alpha 参数如何选取?

Alpha 本质是缩放参数,与 Learning Rate 作用相同。为了简化超参,可设置 alpha = rank,只调整 LR。

14. 如何避免 LoRA 过拟合?

  • 减小 Rank(r)
  • 增加数据集大小
  • 增加优化器的权重衰减率
  • 增加 LoRA 层的 Dropout 值

15. LoRA 矩阵初始化:为什么 B 初始化为全 0?

  • A:高斯初始化B:全 0 初始化
  • 若全部初始化为 0 → 梯度消失(所有神经元功能等价)
  • 若全部高斯初始化 → 训练开始可能得到过大偏移值 ΔW,引入噪声难以收敛
  • 半零半随机初始化:训练开始维持原有输出(初始偏移为 0),同时保证后续能良好收敛

16. LoRA vs 全参数微调的劣势

  • 如果有足够计算资源且数据量 > 10K,建议全参数微调
  • LoRA 初衷:解决计算资源不足时的微调,引入少量参数即可在消费级 GPU 上训练
  • LoRA 核心问题:不能节省训练时间,且可训练参数量小,大量数据下效果不如全量微调

17. LoRA 微调参数量计算

可训练参数数量取决于低秩更新矩阵的大小,主要由秩 r 和原始权重矩阵形状决定。以 LLaMA 为例,选择不同的 lora_target 决定训练参数量:

python
# 在 Q、K、V、O、Gate、Up、Down 投影层上应用 LoRA
lora_target = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]