LoRA 低秩分解的数学原理是什么?
数学原理与结构设计详解,对比全量微调优势
原题:请详细解释LoRA(Low-Rank Adaptation)的数学原理和结构设计,说明其如何通过低秩矩阵分解实现高效参数微调,并分析其相对于全量微调的优势。
模型训练 · 百度真题
回答与解析
LoRA从一个冻结线性层开始。若原权重W形状为输出维乘输入维,微调时不直接更新W,而是学习两个低秩矩阵A和B,使前向使用W加上缩放后的BA。中间秩r远小于输入和输出维时,可训练参数从输入维乘输出维,变成r乘输入维与输出维之和。
节省多少必须按被注入的矩阵逐项计算。只给attention的部分投影加LoRA,与给所有线性层加LoRA,可训练参数和效果都不同。训练显存还包含冻结权重、激活、梯度、优化器状态和临时工作区,所以不能把可训练参数比例直接等同于端到端显存节省,更不能报无配置的固定百分比。
alpha通常与rank一起形成增量缩放,常见实现使用alpha除以r,但框架也可能提供其他缩放约定。rank决定低秩更新的容量,alpha影响增量尺度,它们与学习率、初始化和训练步数耦合。rank更大不必然更好,可能增加成本,也可能在小数据上更难稳定选择。
target modules同样没有固定排序。Q、K、V、O投影和FFN各自可能对任务有不同贡献,原始LoRA论文的实验也不能推出所有模型都应只改Q和V。较稳妥的做法是从少量候选开始,对模块集合、rank和学习率做受控消融,并保持数据和评测完全一致。
普通LoRA只是低秩训练,并不自动把基座权重量化。QLoRA把冻结基座以低比特形式加载,再训练LoRA适配器,还涉及量化格式与分页优化器等设计。回答单卡容量时必须写明是哪一种方案、权重精度、序列长度和激活检查点,不能把QLoRA结果套给普通LoRA。
相对全量微调,LoRA的优势是减少可训练状态、便于保存和切换适配器,并在合适任务上保持竞争力;局限是低秩与模块选择可能约束更新。最终验收应同时看任务质量、训练稳定性、吞吐、峰值显存和合并后输出一致性,而不是只看参数数目。
口语版讲法(约4分钟)
- 推导低秩增量结构
- 计算可训练参数而非报固定比例
- 解释rank与alpha
- 区分训练状态和激活成本
- 给出模块选择实验
LoRA从一个冻结线性层开始。若原权重W形状为输出维乘输入维,微调时不直接更新W,而是学习两个低秩矩阵A和B,使前向使用W加上缩放后的BA。中间秩r远小于输入和输出维时,可训练参数从输入维乘输出维,变成r乘输入维与输出维之和。
节省多少必须按被注入的矩阵逐项计算。只给attention的部分投影加LoRA,与给所有线性层加LoRA,可训练参数和效果都不同。训练显存还包含冻结权重、激活、梯度、优化器状态和临时工作区,所以不能把可训练参数比例直接等同于端到端显存节省,更不能报无配置的固定百分比。
alpha通常与rank一起形成增量缩放,常见实现使用alpha除以r,但框架也可能提供其他缩放约定。rank决定低秩更新的容量,alpha影响增量尺度,它们与学习率、初始化和训练步数耦合。rank更大不必然更好,可能增加成本,也可能在小数据上更难稳定选择。
target modules同样没有固定排序。Q、K、V、O投影和FFN各自可能对任务有不同贡献,原始LoRA论文的实验也不能推出所有模型都应只改Q和V。较稳妥的做法是从少量候选开始,对模块集合、rank和学习率做受控消融,并保持数据和评测完全一致。
普通LoRA只是低秩训练,并不自动把基座权重量化。QLoRA把冻结基座以低比特形式加载,再训练LoRA适配器,还涉及量化格式与分页优化器等设计。回答单卡容量时必须写明是哪一种方案、权重精度、序列长度和激活检查点,不能把QLoRA结果套给普通LoRA。
相对全量微调,LoRA的优势是减少可训练状态、便于保存和切换适配器,并在合适任务上保持竞争力;局限是低秩与模块选择可能约束更新。最终验收应同时看任务质量、训练稳定性、吞吐、峰值显存和合并后输出一致性,而不是只看参数数目。
部署前还应验证合并与未合并适配器的等价性。在线性条件和相同精度下,把缩放后的BA并入W应得到一致结果,但量化、转置或框架命名错误会造成偏差。用固定输入比较logits,并确认切换多个adapter时没有状态串扰,能避免训练指标正常而上线权重错误。
举例计算时只需按矩阵维度代入公式,并把所有被注入层求和,不要从某个模型的结果外推。若共享适配器或使用不同rank,逐层参数也会变化。这个计算同时帮助核对训练日志中的可训练参数数目,发现target modules漏配或重复注入。
关键一句:可训练参数减少为何不能直接等同于相同比例的峰值显存减少。
核验来源
面试官还可能这样问
- 问法 1 · 场景切入
假设你做一个电商客服的意图分类模型,老板说只能加一小点参数微调,不能动整个BERT。你怎么在只训练几千个参数的情况下,让模型快速适应新的退款场景?
- 问法 2 · 层层追问
你平时怎么微调大模型的?……如果直接把增量权重ΔW拆成两个小矩阵,你觉得理论上讲得通吗?……那这两个矩阵的维度怎么设计,才能保证训练开始时模型输出不变?
- 问法 3 · 直球架构
请从数学原理和结构设计上解释LoRA,说明它怎么通过低秩分解减少参数量,以及相比全量微调在显存、存储、部署上的具体优势。