跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LoRA 技术详解:原理、训练理论与面经问答总结

LoRA 是一种参数高效微调方法,通过低秩分解模拟参数变化,冻结预训练模型权重,仅训练旁路矩阵 A 和 B,显著减少参数量并节省显存。LoRA 推理时可合并权重,无延迟,适合多任务切换。相比全量微调,它在资源受限时效果接近,但在大数据下略逊。常见变体包括 DoRA、AdaLoRA 和 QLoRA,进一步优化了训练效率与性能。总结了 LoRA 的概念、训练理论、面经问答及家族演进。

佛系玩家发布于 2025/2/7更新于 2026/7/2338 浏览
LoRA 技术详解:原理、训练理论与面经问答总结

LoRA 技术详解:原理、训练理论与面经问答总结

随着大模型的发展,显存资源日益紧张,LoRA(Low-Rank Adaptation)及其家族成员成为微调大模型的主流方案。基于 PEFT 库,使用消费级显卡(如 RTX 4090 24G)即可进行大模型微调。近期出现的 DoRA 等改进版本也获得了良好的反馈。

LoRA 系列主要分为两部分:LoRA 总述与 LoRA 家族演进。本文重点介绍第一部分 LoRA 总述,以面试常见问题形式整理并解答。

一、概念

1. 简单介绍一下 LoRA

LoRA 通过低秩分解来模拟参数的改变量,从而以极小的参数量实现大模型的间接训练。其核心思想是冻结预训练模型的矩阵参数,选择用两个低秩矩阵 A 和 B 来替代更新量,在下游任务时只更新 A 和 B。

2. LoRA 的思路

  • 主要思想:在原模型旁边增加一个旁路,通过低秩分解(先降维再升维)来模拟参数的更新量。
  • 训练:原模型固定,只训练降维矩阵 A 和升维矩阵 B。
  • 推理:可将 BA 加到原参数上,不引入额外的推理延迟。
  • 初始化:A 采用高斯分布初始化,B 初始化为全 0,保证训练开始时旁路为 0 矩阵。
  • 可插拔式的切换任务:当前任务 W0+B1A1,将 LoRA 部分减掉,换成 B2A2,即可实现任务切换。

3. LoRA 的特点

  • 将 BA 加到 W 上可以消除推理延迟;
  • 可以通过可插拔的形式切换到不同的任务;
  • 设计的比较简单且效果好。

4. LoRA 的优点

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

5. LoRA 的缺点

LoRA 参与训练的模型参数量不多,通常为百万到千万级别,因此在数据及算力满足的情况下,效果比全量微调差一些。原则上微调的参数越多越好。

二、训练理论

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

可以。将训练好的低秩矩阵(B*A)与原模型权重合并(相加),计算出新的权重后,即可直接加载使用,无需保留 LoRA 模块。

2. ChatGLM-6B LoRA 后的权重多大?

在 rank 8、target_module 为 query_key_value 条件下,大约 15MB。

3. LoRA 微调方法为啥能加速训练?

  1. 只更新了部分参数:例如 LoRA 原论文选择只更新 Self Attention 的参数,实际使用时还可以选择只更新部分层的参数;
  2. 减少了通信时间:由于更新的参数量变少,多卡训练时传输的数据量减少,从而减少了传输时间;
  3. 采用了各种低精度加速技术:如 FP16、FP8 或者 INT8 量化等。 这三部分原因确实能加快训练速度,但并非 LoRA 独有。LoRA 的核心优势在于低秩分解直观,在不少场景下跟全量微调效果一致,且在预测阶段不增加推理成本。

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

如果已有的 LoRA 模型只训练了一部分数据,要训练另一部分数据时,建议将之前的 LoRA 跟 base model 合并后,继续训练。为了保留之前的知识和能力,训练新的 LoRA 时,加入一些之前的训练数据是必要的。每次都要重头训练的话成本比较高。

5. LoRA 这种微调方法和全参数比起来有什么劣势吗?

如果有足够计算资源以及有 10k 以上数据,还是建议全参数微调。LoRA 的一个初衷就是为了解决不够计算资源的情况下微调,只引入了少量参数,就可以在消费级 GPU 上训练。但 LoRA 的问题在于它不能节省训练时间,相比于全量微调,它往往要训练更久,同时因为可训练参数量很小,在同样大量数据训练下,性能上限可能不如全量微调。

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

实验表明:

  1. 将所有微调参数都放到 attention 的某一个参数矩阵的效果并不好,将可微调参数平均分配到 Wq 和 Wk 的效果最好;
  2. 即使是秩仅取 4 也能在 ΔW 中获得足够的信息。 因此实际操作中,应当将可微调参数分配到多种类型权重矩阵中,而不应该用更大的秩单独微调某种类型的权重矩阵。

7. LoRA 微调参数量怎么确定?

LoRA 模型中可训练参数的结果数量取决于低秩更新矩阵的大小,主要由秩 r 和原始权重矩阵的形状确定。实际使用过程中,通过选择不同的 lora_target 决定训练的参数量。 以 Llama 为例:--lora_target q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj

8. Rank 如何选取?

Rank 的取值比较常见的是 8。理论上说 Rank 在 4-8 之间效果最好,再高并没有明显效果提升。不过论文的实验是面向下游单一监督任务的,因此在指令微调上根据指令分布的广度,Rank 选择还是需要在 8 以上的取值进行测试。

9. Alpha 参数如何选取?

Alpha 其实是个缩放参数,本质和学习率相同。为了简化可以默认让 alpha=rank,只调整 lr,这样可以简化超参。

10. LoRA 高效微调如何避免过拟合?

过拟合还是比较容易出现的。减小 r 或增加数据集大小可以帮助减少过拟合,还可以尝试增加优化器的权重衰减率或 LoRA 层的 dropout 值。

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

内存使用受到模型大小、批量大小、LoRA 参数数量以及数据集特性的影响。例如,使用较短的训练序列可以节省内存。

12. LoRA 权重是否可以合并?

可以将多套 LoRA 权重合并。训练中保持 LoRA 权重独立,并在前向传播时添加,训练后可以合并权重以简化操作。

13. 是否可以逐层调整 LoRA 的最优 rank?

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

14. LoRA 的矩阵怎么初始化?为什么要初始化为全 0?

矩阵 B 被初始化为 0,而矩阵 A 正常高斯初始化。

  • 如果 B、A 全都初始化为 0,那么缺点与深度网络全 0 初始化一样,很容易导致梯度消失(因为此时初始所有神经元的功能都是等价的)。
  • 如果 B、A 全部高斯初始化,那么在网络训练刚开始就会有概率得到一个过大的偏移值 ΔW,从而引入太多噪声,导致难以收敛。 因此,一部分初始为 0,一部分正常初始化是为了在训练开始时维持网络的原有输出(初始偏移为 0),但同时也保证在真正开始学习后能够更好的收敛。

三、LoRA 家族演进

除了基础 LoRA,社区还涌现了多种改进版本:

1. DoRA (Weight-Decomposed Low-Rank Adaptation)

DoRA 将 LoRA 的权重更新分解为幅度(Magnitude)和方向(Direction)两部分。相比 LoRA 仅学习方向,DoRA 同时学习幅度和方向,理论上能更好地逼近全量微调的效果,尤其在复杂任务上表现更佳。

2. AdaLoRA

AdaLoRA 引入了自适应秩分配机制,根据权重的敏感度动态调整不同层的秩,而不是对所有层使用相同的秩。这进一步提高了参数效率。

3. QLoRA

QLoRA 结合了 4-bit 量化技术与 LoRA,使得在单张消费级显卡上微调超大模型(如 65B)成为可能,大幅降低了显存门槛。

四、总结

LoRA 作为目前最流行的参数高效微调方法之一,在工业界和学术界都得到了广泛应用。它平衡了训练成本与模型效果,特别适合资源受限的场景。理解其原理、参数设置及优缺点,对于从事大模型应用开发的人员至关重要。

目录

  1. LoRA 技术详解:原理、训练理论与面经问答总结
  2. 一、概念
  3. 1. 简单介绍一下 LoRA
  4. 2. LoRA 的思路
  5. 3. LoRA 的特点
  6. 4. LoRA 的优点
  7. 5. LoRA 的缺点
  8. 二、训练理论
  9. 1. LoRA 权重是否可以合入原模型?
  10. 2. ChatGLM-6B LoRA 后的权重多大?
  11. 3. LoRA 微调方法为啥能加速训练?
  12. 4. 如何在已有 LoRA 模型上继续训练?
  13. 5. LoRA 这种微调方法和全参数比起来有什么劣势吗?
  14. 6. LoRA 应该作用于 Transformer 的哪个参数矩阵?
  15. 7. LoRA 微调参数量怎么确定?
  16. 8. Rank 如何选取?
  17. 9. Alpha 参数如何选取?
  18. 10. LoRA 高效微调如何避免过拟合?
  19. 11. 哪些因素会影响内存使用?
  20. 12. LoRA 权重是否可以合并?
  21. 13. 是否可以逐层调整 LoRA 的最优 rank?
  22. 14. LoRA 的矩阵怎么初始化?为什么要初始化为全 0?
  23. 三、LoRA 家族演进
  24. 1. DoRA (Weight-Decomposed Low-Rank Adaptation)
  25. 2. AdaLoRA
  26. 3. QLoRA
  27. 四、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 构建跨平台前端界面:Flet 库详解
  • 基于机器学习的智能家居温度个性化控制实践
  • CSS 核心机制解析:层叠、继承与优先级实战
  • C++ STL 容器 vector 详解:定义、访问与操作
  • Web 触发离线升级:Systemd 异步机制与 A/B 状态机切换详解
  • 毕业论文如何降低 AI 检测率:实战经验与技巧指南
  • 大模型训练核心算法:损失函数详解
  • 前端面试核心知识点与常见问题整理
  • 基于 AutoGPT 与 Python 构建自主 AI 智能体实战指南
  • OpenClaw 接入通义千问、文心一言与 DeepSeek 配置指南
  • 双指针技巧详解:从基础到进阶(Java 实现)
  • Java 面试核心考点梳理:基础、并发与容器篇
  • 计算机视觉高级应用与前沿技术发展
  • SBUS 协议详解:从原理、硬件接口到 STM32 代码实现
  • Seedance 2.0 多模态视频生成操作指南
  • ZeroClaw 开源:基于 Rust 的轻量级 AI Agent 框架
  • 基于腾讯云HAI和DeepSeek快速设计个人网页
  • Apache SeaTunnel Web 可视化数据集成平台搭建与使用指南
  • Web IM 聊天信息加密的三种实现方案对比与实战
  • C++ string 类:接口、陷阱与模拟实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online