LoRA 低秩适配
LoRA 把权重更新表示成两个小矩阵的乘积,在保留基座权重的同时,用较少可训练参数完成适配。
理解与应用
LoRA 是一种参数高效微调方法。对一个原有权重矩阵 W,它通常冻结 W,把需要学习的增量写成两个较小矩阵的乘积 BA,再按缩放系数加入原计算。这里的“低秩”是说增量受到较低维度的约束,而不是把原模型的所有权重直接删减成一个小模型。
例如把通用模型适配为报销说明整理器时,可以保留基座,在指定层加入 LoRA 参数,用审校示例训练这些新增参数。对于 m×n 的权重,秩为 r 的两个矩阵合计有 r(m+n) 个参数;当 r 远小于 m、n 时,它们比直接训练 mn 个参数少得多。这减少了可训练参数以及相关梯度、优化器状态的开销。
但整个训练仍需加载基座并处理激活,中间计算也需要空间,所以参数减少多少并不等于总显存就下降多少。选择秩、目标层和训练数据仍是效果的一部分:秩过小可能限制适配能力,增加秩也不保证每项任务都会变好。推理时能否把增量合并进基座,还取决于实现与量化等配置。
LoRA 属于 PEFT 这一方法家族,PEFT 也常指实现多种适配方法的软件库。它可以配合 SFT,也可以用于某些强化学习训练。保存适配器时,基座版本、分词器和目标模块同样属于必要信息;一个能加载成功的适配器,接到不匹配的基座上仍可能产生错误行为。
动手试一试:比较低秩更新与完整矩阵的参数量
算例只比较一个 4096×4096 权重矩阵与两个低秩因子的参数数目。没有计入基座、激活、其他层或优化器配置,也没有训练模型,因此不能把这些百分比直接当作整机显存节省比例或效果结论。
将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。
Python 代码
rows, columns = 4096, 4096
for rank in [8, 16]:
full = rows * columns
adapter = rank * (rows + columns)
print(f"秩 {rank}:{adapter:,} 个适配参数,占完整矩阵 {adapter / full:.2%}")
print(f"完整矩阵:{full:,} 个参数")运行结果
秩 8:65,536 个适配参数,占完整矩阵 0.39% 秩 16:131,072 个适配参数,占完整矩阵 0.78% 完整矩阵:16,777,216 个参数
常见误区
- 低秩更新不是压缩掉基座,训练和推理通常仍需访问原模型。
- 秩越大表示可训练空间变大,但收益还取决于数据和任务。
- 适配器的基座、分词器和目标模块需要匹配,文件能读取不代表适配关系正确。
前置与延伸
建议先读
相关概念
参考与版本
Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- LoRA: Low-Rank Adaptation of Large Language Models ↗
核对冻结原权重、学习低秩增量的定义;参数节省不等于整套训练显存同比下降。 · 核验:2026-10-10
- Hugging Face PEFT:LoRA ↗
官方文档补充 LoRA 配置与实现;PEFT 是参数高效微调方法集合及库名,不是 LoRA 的同义词。 · 核验:2026-10-10