banner
NEWS LETTER

LoRA (Low-Rank Adaptation)

Scroll down

1. LoRA 是什么 & 为什么出现

  • 背景问题
    大模型参数多、显存占用高,直接全量微调(Full Fine-tuning)成本巨大。

  • LoRA 的核心思路
    不直接更新原模型的权重矩阵 $W_0$,而是在它的基础上加一个 低秩矩阵近似
    $$W’ = W_0 + \Delta W,\quad \Delta W = BA$$

    其中:

    • $A \in \mathbb{R}^{r \times d}$,$B \in \mathbb{R}^{d \times r}$

    • $r$ 是秩(rank),远小于 $d$(比如 r=8)

    • $A$、$B$ 是需要训练的,$W_0$ 冻结不动

  • 优点

    • 显存占用小(参数量缩小到 $O(rd)$)

    • 可以快速切换不同任务(加载不同 LoRA 权重)

    • 与原模型推理速度几乎一样

面试常问

  1. 为什么低秩分解能减少参数量?

  2. r 取太小或太大会有什么影响?


2. LoRA 的数学原理

  • 假设 Transformer 里的一个线性层是:

    h=W0xh = W_0 xh=W0​x

  • LoRA 加入的变化:

    h=W0x+BAxh = W_0 x + BAxh=W0​x+BAx

  • $A$、$B$ 在初始化时通常是:

    • $A$:正态分布初始化(小值)

    • $B$:全零初始化(这样初始时等于原模型推理结果)

  • 优化时只更新 $A$ 和 $B$ 的参数。

面试常问

  • LoRA 为什么要把低秩矩阵拆成 $A$ 和 $B$,而不是直接训练 $\Delta W$?

  • 为什么要用零初始化 B?


3. LoRA 在 Transformer 中的应用位置

常见的注入位置:

  1. Self-Attention 的 Q、V 投影层(最常见)

  2. 也可以在 FFN(前馈层)中加 LoRA

  3. 可以只在部分层加,节省更多显存

面试常问

  • 为什么 LoRA 常加在 Q、V 而不是 K?

  • 如果显存特别紧,可以怎么裁剪 LoRA 注入位置?


4. LoRA 的超参数

  • r(秩):秩越大,模型表达能力越强,但参数也多

  • alpha(缩放系数):控制 LoRA 增量的权重

  • dropout:防止过拟合

  • target_modules:指定在哪些模块注入 LoRA(比如 q_proj, v_proj

面试常问

  • r 和 alpha 如何配合调参?

  • 训练 LoRA 时 batch size 和学习率会有什么变化?


5. LoRA 与其他微调方式的比较

方法 参数更新量 显存占用 推理速度 适用场景
全量微调 全部参数 高精度需求
LoRA 极少 几乎不变 多任务快速适配
Prefix Tuning 极少 略低 自然语言任务
Adapter 较少 中等 略低 中等规模模型

面试常问

  • LoRA 和 Prefix Tuning 的差异?

  • LoRA 在多任务中如何快速切换?


6. LoRA 的部署与合并

  • 训练好 LoRA 后,有两种用法:

    1. 推理时动态加载(模型保持原权重 + LoRA 权重)

    2. 合并到原模型权重W_0 ← W_0 + BA

面试常问

  • 为什么推理时通常选择合并 LoRA?

  • 多个 LoRA 权重能叠加吗?


7. 面试可能延伸到的点

  • 量化 + LoRA(QLoRA)
    把原模型权重量化到 4-bit,然后用 LoRA 训练,进一步降低显存

  • LoRA 在多模态模型中的应用(如 LLaVA)

  • 安全性问题:LoRA 权重容易被滥用(因为小文件也能影响模型输出)

问题

1. 为什么低秩分解能减少参数量?

解释
模型中一个权重矩阵通常很大,比如 $W$ 是 $d \times d$ 大小,如果直接训练全部参数,参数量是 $d^2$。低秩分解是把这个矩阵近似为两个小矩阵相乘:

ΔW=BA\Delta W = B AΔW=BA

假设 $B$ 是 $d \times r$,$A$ 是 $r \times d$,其中 $r$ 很小(比如8),所以参数量是 $2dr$,远小于 $d^2$。这样大幅减少了需要训练和存储的参数。


2. r 取太小或太大会有什么影响?

解释

  • $r$ 越小,表示用更低的秩来近似权重矩阵,模型学习能力有限,可能无法捕捉复杂的任务特征,表现欠佳。

  • $r$ 越大,参数多,模型表达更强,但显存和计算成本提高,且训练难度加大,可能过拟合。

通常需要在性能和资源之间做平衡。


3. LoRA 为什么要把低秩矩阵拆成 A 和 B,而不是直接训练 $\Delta W$?

解释
如果直接训练完整矩阵 $\Delta W$,参数量还是很大。拆成两个小矩阵 $A$ 和 $B$,就像把一个大矩阵拆成“细长矩阵乘积”,实现参数量压缩和计算加速。这就是低秩分解的思想。


4. 为什么要用零初始化 B?

解释
初始时让 $\Delta W = B A$ 等于零,保证刚开始模型的行为和原模型 $W_0$ 一致,这样训练更稳定,避免模型性能突然下降。

一般做法是让 $B$ 全零,$A$ 小随机值。


5. 为什么 LoRA 常加在 Q、V 而不是 K?

解释

  • Q(查询)和 V(值)矩阵在注意力机制中直接影响信息的提取和输出表达,调整这两部分能更有效地改动模型表现。

  • K(键)矩阵负责匹配,调整它对模型影响相对较小,且增加训练负担。
    因此,注入 LoRA 多选在 Q 和 V。


6. 如果显存特别紧,可以怎么裁剪 LoRA 注入位置?

解释

  • 可以只给少数关键层加 LoRA,比如靠近输出层的几层

  • 只加在 Q 或 V 的某一个,而不是两个都加

  • 也可以调低秩 $r$,减少参数量

这样在保证微调效果的同时,控制显存使用。


7. r 和 alpha 如何配合调参?

解释

  • $r$ 是秩,决定参数量和模型容量

  • $\alpha$ 是缩放因子,控制 LoRA 增量的强度

一般,$\alpha$ 选为 $r$ 的倍数(比如 $\alpha=16$,$r=8$),让增量更稳定。若 $\alpha$ 太大,可能导致训练不稳定;太小则收敛慢。


8. 训练 LoRA 时 batch size 和学习率会有什么变化?

解释

  • 因为参数量大幅减少,batch size 可以适当加大,提高训练效率

  • 学习率通常也会比全量微调稍高,方便快速收敛

  • 但需要根据实际训练表现调节,避免过拟合或震荡


9. LoRA 和 Prefix Tuning 的差异?

解释

  • LoRA 是直接修改权重矩阵,微调模型参数

  • Prefix Tuning 是在输入序列前添加一段可训练的“提示”,不改动模型权重

  • LoRA 适合需要模型参数调整的场景,Prefix Tuning 更像软提示调整


10. LoRA 在多任务中如何快速切换?

解释
因为 LoRA 的微调参数是独立的小模块,可以为不同任务训练不同 LoRA 权重,推理时只需加载对应 LoRA,快速切换,不用重新加载完整模型。


11. 为什么推理时通常选择合并 LoRA?

解释
推理时为了速度和方便,常把 $W_0$ 和 $BA$ 合并成一个权重矩阵,减少计算步骤,提升效率。合并后就是一个普通线性层,推理时无额外开销。


12. 多个 LoRA 权重能叠加吗?

解释
可以叠加多个 LoRA 权重(比如不同任务),但要注意权重间的冲突和模型稳定性,最好保证它们针对的任务相关且不矛盾。

Support me with a coffee?

其他文章
cover
REASON
  • 25/07/02
  • 17:27
目录导航 置顶
  1. 1. 1. LoRA 是什么 & 为什么出现
  2. 2. 2. LoRA 的数学原理
  3. 3. 3. LoRA 在 Transformer 中的应用位置
  4. 4. 4. LoRA 的超参数
  5. 5. 5. LoRA 与其他微调方式的比较
  6. 6. 6. LoRA 的部署与合并
  7. 7. 7. 面试可能延伸到的点
  8. 8. 问题
    1. 8.1. 1. 为什么低秩分解能减少参数量?
    2. 8.2. 2. r 取太小或太大会有什么影响?
    3. 8.3. 3. LoRA 为什么要把低秩矩阵拆成 A 和 B,而不是直接训练 $\Delta W$?
    4. 8.4. 4. 为什么要用零初始化 B?
    5. 8.5. 5. 为什么 LoRA 常加在 Q、V 而不是 K?
    6. 8.6. 6. 如果显存特别紧,可以怎么裁剪 LoRA 注入位置?
    7. 8.7. 7. r 和 alpha 如何配合调参?
    8. 8.8. 8. 训练 LoRA 时 batch size 和学习率会有什么变化?
    9. 8.9. 9. LoRA 和 Prefix Tuning 的差异?
    10. 8.10. 10. LoRA 在多任务中如何快速切换?
    11. 8.11. 11. 为什么推理时通常选择合并 LoRA?
    12. 8.12. 12. 多个 LoRA 权重能叠加吗?