LoRA 技术详解:原理、训练理论与面经问答总结
随着大模型的发展,显存资源日益紧张,LoRA(Low-Rank Adaptation)及其家族成员成为微调大模型的主流方案。基于 PEFT 库,使用消费级显卡(如 RTX 4090 24G)即可进行大模型微调。近期出现的 DoRA 等改进版本也获得了良好的反馈。
LoRA 是一种参数高效微调方法,通过低秩分解模拟参数变化,冻结预训练模型权重,仅训练旁路矩阵 A 和 B,显著减少参数量并节省显存。LoRA 推理时可合并权重,无延迟,适合多任务切换。相比全量微调,它在资源受限时效果接近,但在大数据下略逊。常见变体包括 DoRA、AdaLoRA 和 QLoRA,进一步优化了训练效率与性能。总结了 LoRA 的概念、训练理论、面经问答及家族演进。

随着大模型的发展,显存资源日益紧张,LoRA(Low-Rank Adaptation)及其家族成员成为微调大模型的主流方案。基于 PEFT 库,使用消费级显卡(如 RTX 4090 24G)即可进行大模型微调。近期出现的 DoRA 等改进版本也获得了良好的反馈。
LoRA 系列主要分为两部分:LoRA 总述与 LoRA 家族演进。本文重点介绍第一部分 LoRA 总述,以面试常见问题形式整理并解答。
LoRA 通过低秩分解来模拟参数的改变量,从而以极小的参数量实现大模型的间接训练。其核心思想是冻结预训练模型的矩阵参数,选择用两个低秩矩阵 A 和 B 来替代更新量,在下游任务时只更新 A 和 B。
LoRA 参与训练的模型参数量不多,通常为百万到千万级别,因此在数据及算力满足的情况下,效果比全量微调差一些。原则上微调的参数越多越好。
可以。将训练好的低秩矩阵(B*A)与原模型权重合并(相加),计算出新的权重后,即可直接加载使用,无需保留 LoRA 模块。
在 rank 8、target_module 为 query_key_value 条件下,大约 15MB。
如果已有的 LoRA 模型只训练了一部分数据,要训练另一部分数据时,建议将之前的 LoRA 跟 base model 合并后,继续训练。为了保留之前的知识和能力,训练新的 LoRA 时,加入一些之前的训练数据是必要的。每次都要重头训练的话成本比较高。
如果有足够计算资源以及有 10k 以上数据,还是建议全参数微调。LoRA 的一个初衷就是为了解决不够计算资源的情况下微调,只引入了少量参数,就可以在消费级 GPU 上训练。但 LoRA 的问题在于它不能节省训练时间,相比于全量微调,它往往要训练更久,同时因为可训练参数量很小,在同样大量数据训练下,性能上限可能不如全量微调。
实验表明:
LoRA 模型中可训练参数的结果数量取决于低秩更新矩阵的大小,主要由秩 r 和原始权重矩阵的形状确定。实际使用过程中,通过选择不同的 lora_target 决定训练的参数量。
以 Llama 为例:--lora_target q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj
Rank 的取值比较常见的是 8。理论上说 Rank 在 4-8 之间效果最好,再高并没有明显效果提升。不过论文的实验是面向下游单一监督任务的,因此在指令微调上根据指令分布的广度,Rank 选择还是需要在 8 以上的取值进行测试。
Alpha 其实是个缩放参数,本质和学习率相同。为了简化可以默认让 alpha=rank,只调整 lr,这样可以简化超参。
过拟合还是比较容易出现的。减小 r 或增加数据集大小可以帮助减少过拟合,还可以尝试增加优化器的权重衰减率或 LoRA 层的 dropout 值。
内存使用受到模型大小、批量大小、LoRA 参数数量以及数据集特性的影响。例如,使用较短的训练序列可以节省内存。
可以将多套 LoRA 权重合并。训练中保持 LoRA 权重独立,并在前向传播时添加,训练后可以合并权重以简化操作。
理论上,可以为不同层选择不同的 LoRA rank,类似于为不同层设定不同学习率,但由于增加了调优复杂性,实际中很少执行。
矩阵 B 被初始化为 0,而矩阵 A 正常高斯初始化。
除了基础 LoRA,社区还涌现了多种改进版本:
DoRA 将 LoRA 的权重更新分解为幅度(Magnitude)和方向(Direction)两部分。相比 LoRA 仅学习方向,DoRA 同时学习幅度和方向,理论上能更好地逼近全量微调的效果,尤其在复杂任务上表现更佳。
AdaLoRA 引入了自适应秩分配机制,根据权重的敏感度动态调整不同层的秩,而不是对所有层使用相同的秩。这进一步提高了参数效率。
QLoRA 结合了 4-bit 量化技术与 LoRA,使得在单张消费级显卡上微调超大模型(如 65B)成为可能,大幅降低了显存门槛。
LoRA 作为目前最流行的参数高效微调方法之一,在工业界和学术界都得到了广泛应用。它平衡了训练成本与模型效果,特别适合资源受限的场景。理解其原理、参数设置及优缺点,对于从事大模型应用开发的人员至关重要。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online