微信扫码
添加专属顾问
我要投稿
LoRA与QLoRA技术解析:大模型微调的革命性突破,让轻量化训练触手可及。核心内容:1. 大模型微调面临的资源挑战与常规解决方案的局限性2. LoRA技术的低秩矩阵分解原理与实现细节3. QLoRA在LoRA基础上引入量化策略的进阶优化
01
引言
随着ChatGPT的横空出世,大家都见证了大语言模型(LLM)的强大潜力——它们能够理解自然语言并以极高准确度响应人类需求。在LLM的缩写中,首字母"L"代表的"Large"(庞大)一词,直观体现了这类模型通常拥有的海量参数规模。
现代LLM往往包含超过十亿个参数。试想这样一个场景:我们需要将LLM适配到某个下游任务。常规做法是通过微调(Fine-tuning)——即在新的数据集上调整模型原有的权重参数。然而这个过程极其缓慢且资源密集,特别是在硬件受限的本地设备运行时尤为明显。
虽然微调过程中可以通过冻结部分神经网络层来降低训练复杂度,但由于高昂的计算成本,这种方法在规模化应用时仍显不足。
为攻克这一难题,本文将深入解析当下流行的LLM轻量化微调技术LoRA(低秩自适应)的核心原理。此外,我们还将探讨其进阶版本QLoRA——该技术在LoRA基础上引入量化(Quantization)策略,进一步提升了优化效能。
02
以全连接神经网络为例:其每一层由n个神经元构成,这些神经元与下一层的m个神经元形成全连接。总体而言,该层共包含n×m个连接关系,这些连接可通过一个n×m维矩阵精准表征。
当新输入传递至某一层时,我们所需执行的全部操作即是对权重矩阵与输入向量进行矩阵乘法运算。实践中,这类运算操作借助先进的线性代数库进行了深度优化,并常采用批量输入并行处理的方式以大幅提升计算效率。
03
在神经网络中,权重矩阵往往具有惊人的维度。我们可通过矩阵分解技术,将其拆解为两个小型矩阵的乘积来替代传统的完整矩阵存储与更新方式。具体而言,若原始权重矩阵为n×m维度,可采用尺寸分别为n×k和k×m的两个矩阵进行近似,其中k作为内在维度(k << n, m)显著小于原矩阵维度。
以8192×8192的权重矩阵为例,原始参数规模约6700万。当选取k=8时,分解后的矩阵组合将包含8192×8和8×8192两个矩阵,参数总量仅为13.1万——相较原矩阵缩减超过500倍,大幅降低了内存与算力需求。
尽管存在这一明显缺陷:小型矩阵相乘重构的近似结果无法完全复现原始矩阵的精度,但这是为显著降低资源消耗所必须接受的建模代价。令人惊讶的是,即使采用k=8这类极小维度值,仍能在多数场景下保持较高近似精度。实践表明,有时甚至k=2或k=4的极端设置也能取得理想效果。
04
前文所述的矩阵分解思想完美阐述了LoRA技术的核心精髓。LoRA全称低秩自适应(Low-Rank Adaptation),其核心在于通过秩为k的低维矩阵分解(k<<n,m)来近似表示庞大权重矩阵。这种方法在保持模型核心能力的同时,将可训练参数量压缩至极低水平。
训练机制解析
假设输入向量x传递至全连接层,原始权重矩阵为W,输出计算式为y = Wx。在微调过程中,我们通过增量矩阵ΔW进行参数调整,表达式变为y = (W + ΔW)x = Wx + ΔWx。通过引入矩阵分解BA代替ΔW,最终得到y = Wx + BAx。此时冻结原始权重W,仅需优化低秩矩阵A(n×k)和B(k×m)的参数——其参数量远小于原始ΔW矩阵。
矩阵运算优化技巧
原式BAx的直接计算存在效率瓶颈,因为BA的矩阵相乘运算量较大。为此,LoRA巧妙利用矩阵乘法结合律,将其重构为B(Ax)的运算顺序:先将维度压缩的A与x相乘,再进行升维运算。这种分步计算策略显著提升了前向传播效率。
反向传播优势
尽管单个神经元梯度计算量基本不变,但参数量的锐减带来双重优势:
梯度计算量指数级减少:仅需计算A、B的梯度而非整个W矩阵
内存占用显著降低:无需存储庞大的W梯度矩阵
初始参数设定
技术细节层面,在微调之前,矩阵 A 使用高斯分布进行初始化,而矩阵 B 则用零进行初始化。在开始时使用零矩阵 B 可以确保模型表现得与之前完全相同,因为 BAx = 0 · Ax = 0,所以 y 仍然等同于 Wx。
这使得微调的初始阶段更加稳定。然后,在反向传播过程中,模型会逐渐调整 A 和 B 的权重,以学习新知识。
训练后参数整合
完成训练后,只需执行一次BA矩阵相乘得到ΔW,并将其叠加到原权重W上即可获得最终模型权重。虽然BA相乘运算量较大,但仅需执行一次且后续无需保留中间矩阵,实际影响微乎其微。
理论深度思考
一个值得探讨的问题是:为何常规训练不直接采用BAx替代Wx的设计?关键在于模型容量限制——纯低秩结构难以支撑海量知识的学习需求。
LoRA的智慧在于:将Wx视为预训练模型积淀的通用知识,BAx则作为微调引入的领域专属知识。这种分而治之的策略既保留了基础模型的强大能力,又实现了特定任务的高效适配。
05
在探索大语言模型(LLM)理论时,“适配器”(Adapter)这一高频出现的专业术语值得特别关注。在LoRA框架下,适配器实质上是由矩阵A和B构成的组合模块,它们用于为给定的矩阵 W 解决特定的下游任务。
例如,假设我们已经训练了一个矩阵 W,使得模型能够理解自然语言。然后,我们可以执行几次独立的 LoRA 优化,为模型调整不同的任务。结果是我们获得几对矩阵:
(A₁, B₁) — 用于执行问答任务的适配器。
(A₂, B₂) — 用于文本摘要问题的适配器。
(A₃, B₃) — 为聊天机器人开发训练的适配器。
鉴于此,我们可以只存储一个矩阵,并根据需要拥有任意数量的适配器来处理不同的任务!由于矩阵 A 和 B 非常小,因此非常容易存储。
适配器的实时调整
适配器最棒的一点是我们可以动态地切换它们。想象一个场景,我们需要开发一个聊天机器人系统,允许用户根据所选角色(例如哈利·波特、愤怒的小鸟或克里斯蒂亚诺·罗纳尔多)来选择机器人如何响应。
然而,由于大型模型体积庞大,系统限制可能会阻止我们存储或微调三个独立的大型模型。有什么解决方案呢?
这时适配器就派上用场了!我们只需要一个大型模型 W 和三个独立的适配器,每个角色一个。
我们只将矩阵 W 和三个矩阵对:(A₁, B₁), (A₂, B₂), (A₃, B₃) 保存在内存中。每当用户为机器人选择一个新角色时,我们只需执行 W 与 (Aᵢ, Bᵢ) 之间的矩阵加法,即可动态替换适配器矩阵。结果是,如果我们将来需要添加新角色,我们就会得到一个扩展性极好的系统!
06
QLoRA 是另一个热门术语,它与 LoRA 之间的唯一区别在于首字母“Q”,代表“量化(quantized)”。“量化”一词指的是用来减少存储神经元权重的比特数。
例如,神经网络的权重通常以浮点数表示,每个权重需要 32 位。量化的思想是将神经网络的权重压缩为更低的精度,而不会显著损失模型性能或产生重大影响。因此,不再使用 32 位,而是可以舍弃部分比特,例如只用 16 位。
说到 QLoRA,量化技术主要用于对预训练矩阵 W 进行处理,以减小其存储和传输的大小。
prefix-tuning
前缀调优(Prefix-tuning)是LoRA的一种有趣替代方案。其核心思想同样是为不同下游任务使用适配器,但这次适配器被集成在Transformer的注意力层内部。
具体而言,在训练过程中,除了那些作为前缀添加到注意力层内部计算的嵌入向量的可训练部分外,所有模型层都会被冻结。与LoRA相比,前缀调优不会改变模型表征,且通常具有更少的可训练参数。如前所述,为了适配前缀结构,我们仍需进行加法运算,但此次参与运算的元素数量更少。
除非面临极其有限的计算和内存限制,在多数情况下,LoRA适配器仍比前缀调优更受青睐。
07
在本文中,我们探讨了先进的LLM概念,以理解如何在不增加计算开销的情况下高效调整大模型的技术。LoRA通过矩阵分解优雅地压缩权重矩阵的方法,不仅加快了模型的训练速度,还显著减少了内存占用。更重要的是,LoRA作为适配器思想的典范,展示了这类模块在下游任务中可以灵活运用和切换的优势。
在此基础上,我们还可以引入量化处理技术,通过减少表示每个神经元所需的比特数来进一步压缩内存空间。
最后,我们探索了另一种替代方案——prefix tuning。这种方法发挥着与适配器相同的作用,但无需改变模型的表征方式。这种创新为模型参数的优化开辟了新路径,特别是在需要保持原模型结构完整性的应用场景中展现出独特价值。
点击上方小卡片关注我
添加个人微信,进专属粉丝群!
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-30
2025-05-26
2025-05-07
2025-05-21
2025-05-15
2025-06-17
2025-04-27
2025-05-10
2025-05-10
2025-06-21