Skip to content

LoRA 高效微调技术深度指南

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

本文为 LoRA 进阶补充篇,涵盖 QLoRA、AdaLoRA、Rank 选取、初始化、继续训练等高级话题。基础概念请参考第 16 篇「LoRA 低秩适配面试题」。

1. LoRA 核心回顾

通过低秩分解模拟参数的改变量,以极小的参数量实现大模型的间接训练。

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

初始化策略

  • 矩阵 A:高斯分布初始化,保证学习能力
  • 矩阵 B:全 0 初始化,保证训练开始时旁路为 0 矩阵(ΔW = 0)

如果 BA 全部初始化为 0,容易导致梯度消失(所有神经元功能等价);如果全部高斯初始化,训练刚开始可能获得过大的偏移值,引入太多噪声导致难以收敛。


2. QLoRA

2.1 核心思路

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

2.2 特点

  • 显著降低对显存的要求
  • 训练速度慢于标准 LoRA
  • 使得在消费级 GPU 上微调大模型成为可能

3. AdaLoRA

3.1 动机

LoRA 对所有权重矩阵使用统一的 Rank,未考虑不同参数矩阵对任务的重要性差异。

3.2 核心思路

根据重要性评分动态分配参数预算给权重矩阵:

  • 关键的增量矩阵:分配高秩以捕捉更精细和任务特定的信息
  • 较不重要的矩阵:降低秩,防止过拟合并节省计算预算

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

可以。将训练好的低秩矩阵(B × A)与原模型权重相加,计算出新的权重:

Wmerged=W0+BA

合并后可直接使用标准推理流程,不引入任何额外推理延迟。


5. ChatGLM-6B LoRA 后的权重大小

rank=8target_module=query_key_value 条件下,LoRA 权重约 15MB


6. LoRA 微调优点

  1. 一个中心模型服务多个下游任务,节省参数存储量
  2. 推理阶段不引入额外计算量(合并后推理)
  3. 与其他参数高效微调方法正交,可有效组合
  4. 训练任务稳定,效果较好
  5. LoRA 几乎不添加推理延迟,因为适配器权重可与基本模型合并

7. LoRA 微调为什么能加速训练?

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

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


8. 如何在已有 LoRA 模型上继续训练?

推荐做法

将之前的 LoRA 与 Base Model 合并后继续训练,同时加入一部分之前的训练数据以保留旧知识。每次都从头训练成本过高。

# 1. 合并旧 LoRA
W_new_base = W_original + B_old × A_old
# 2. 在合并后的模型上训练新 LoRA(混入部分旧数据)

9. LoRA 的缺点

缺点说明
参数量有限仅百万到千万级别,效果比全量微调有差距
不节省训练时间相比全量微调需要更久训练才能收敛
数据容量受限同样大量数据下比不过全量微调
LLM 场景差距明显在 LLM 上比扩散模型场景感知差距更大

如果有足够计算资源且有 10k 以上数据,建议全参数微调


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

策略效果
将所有参数放到 Attention 的某一个矩阵效果不好
将参数分配到 Wq 和 Wv原论文结论中效果最好(实践可扩展到更多投影层)
即使是 Rank 仅为 4 也能在 ΔW 中获得足够信息Rank 在 4-8 之间效果最优

在实际操作中:应当将可微调参数分配到多种类型权重矩阵中,而不应该用更大的秩单独微调某种类型的权重矩阵。

LLaMA 的常见 target_modules 配置:

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

11. Rank 如何选取?

项目说明
论文对比范围Rank 1-64
最优区间Rank 4-8 之间效果最好
再提升效果不再提升(论文面向下游单一监督任务)
指令微调建议Rank 选择 8 以上进行测试(指令分布更广)

12. Alpha 参数如何选取?

Alpha 本质是缩放参数,和 Learning Rate 类似。推荐简化策略:

alpha = rank (默认让两者相等)
只调整 learning rate 即可

公式:scaling = lora_alpha / r


13. LoRA 如何避免过拟合?

  • 减小 r(Rank):降低模型容量
  • 增加数据集大小:更多数据提供更强泛化能力
  • 增加优化器的 Weight Decay:更强的正则化
  • 增加 LoRA 层的 Dropout 值

14. 微调大模型时优化器如何选择?

优化器特点
Adam / AdamW最常用,效果稳定
Sophia使用梯度曲率而非方差进行归一化,可能提高训练效率和性能

15. 哪些因素会影响内存使用?

  • 模型大小:最直接的影响因素
  • Batch Size:每增大一个 Batch,动态显存线性增长
  • LoRA 参数数量:由 Rank 和 Target Modules 决定
  • 数据集特性:使用较短的训练序列可节省内存

16. 是否可以逐层调整 LoRA 的最优 Rank?

理论上可以,类似于为不同层设定不同学习率。但由于增加了调优复杂度,实际上很少执行


17. 初始化为何至关重要?

策略问题
BA 全 0 初始化梯度消失,所有神经元功能等价
BA 全高斯初始化训练初期可能获得过大 ΔW,引入噪声,难以收敛
A 高斯 + B 全 0初始偏移为 0 维持网络原有输出,同时保证收敛能力