游乐游手机版
首页/AI热点日报/热点详情

一篇文章掌握LoRA全系列微调技术的图解概述

类型:热点整理2026-06-26
引言 微调(Fine-tuning),简单来说,就是在新的数据集上调整预训练模型的权重,让模型在特定领域或任务上表现更好。下面这张图展示了这个过程: 在众多微调技术中,LoRA可以说是近年来对大模型领域最重要的贡献之一。它的核心思路是只修改模型极小一部分参数,却重新定义了大模型微调的方式。后来,围绕

引言

微调(Fine-tuning),简单来说,就是在新的数据集上调整预训练模型的权重,让模型在特定领域或任务上表现更好。下面这张图展示了这个过程:

在众多微调技术中,LoRA可以说是近年来对大模型领域最重要的贡献之一。它的核心思路是只修改模型极小一部分参数,却重新定义了大模型微调的方式。后来,围绕LoRA陆续出现了许多变体,每一个都在针对特定的挑战进行优化。下面这张图展示了LoRA之后出现的一些主流微调技术:

这篇文章会从LoRA讲起,逐一拆解每个变体的设计理念、技术创新,以及它们试图解决的具体问题。

1. LoRA:以小博大

LoRA的核心理念很直接:只训练极少的参数,却能保持和全量微调几乎一样的性能。

具体怎么做呢?它在模型的某些特定层中,加入了两个低秩矩阵A和B。这两个矩阵的参数量远小于原始权重矩阵,但它们就是训练中唯一需要更新的部分。数学上看,它修改了线性层中的权重更新ΔW:

这种低秩更新的设计不仅简洁,而且非常巧妙——它保留了预训练LLM的通用能力,同时放大了模型对新任务或新数据集的适应性。

举个例子,如果OpenAI想在GPT-3.5上给每个用户做微调,按照传统方式,每个用户都需要一个完整的模型副本。但有了LoRA后,OpenAI只需要存储那两个小小的矩阵A和B。原始的大权重矩阵W,作为所有微调版本的“通用”部分,可以在所有用户之间共享。这带来的效率提升是惊人的:

  • 根据论文,模型检查点的大小从350GB直接降到了35MB,减少了大约一万倍。
  • 在对GPT-3 175B模型训练时,相比全量微调,训练速度提高了25%,因为大部分参数都不用计算梯度。
  • 更妙的是,LoRA微调后的模型不会引入推理延迟。因为它的线性设计允许在部署时把新加的矩阵A和B与冻结的权重W合并,推理时完全照常。

还有一个有趣的发现:超参数r(控制低秩矩阵的维度)可以比权重矩阵的维度小好几个数量级。实验表明,当r=1时,效果几乎和更高的r值一样好。这意味着低秩矩阵A和B可以简单到只是行矩阵或列矩阵。

2. LoRA-FA:冻结A,节省内存

简介

LoRA-FA这个名字来自于Frozen-A,它在LoRA的基础上引入了一个微小但关键的改动:减少微调时的内存开销。

为什么LoRA会遇到内存问题?因为在LoRA层中,前向传播需要存储大量的输入激活X,用于在反向传播中构建矩阵A的梯度。这导致LoRA无法像人们期望的那样大幅降低激活内存。具体来说,对输入序列长度2048、批量大小为4的LLaMA-65B进行微调时,所有LoRA层需要超过50GB的激活内存(16位精度计算)。

LoRA-FA的解决方案很直接:它在初始化后冻结矩阵A,把它当作一个随机投影;矩阵B则用零初始化后进行训练。参数数量减半,但性能却不输给普通LoRA。下图清楚展示了这个区别:

结果

在LoRA-FA的论文中,研究者对RoBERTa、T5和LLaMA等不同架构、多个规模和任务进行了实验。结果很说明问题:

  • 在RoBERTa模型上,LoRA-FA在大多数情况下表现比LoRA更好或持平,没有出现明显的性能下降。
  • 在开源的LLaMA-7B模型上,LoRA-FA的表现始终优于LoRA。

括号中的数字是相对于未微调的LLaMA-7B基础模型的性能提升。在这两种情况下,LoRA-FA几乎把可训练参数的数量减少了一半。

3. VeRA:共享矩阵,只学缩放

介绍

VeRA的全称是Vector-based Random Matrix Adaptation,它进一步减少了LoRA中可训练参数的数量,同时还能匹配或接近LoRA的精度。

在LoRA中,每一层都有一对不同且需要训练的低秩矩阵A和B。而VeRA的做法更大胆:它把A和B矩阵冻结并随机化,然后在所有模型层之间共享这些矩阵。这意味着不再需要在不同层之间训练和更新大量参数,大大简化了架构。

VeRA不更新A和B,而是专注于学习小型的、层特定的缩放向量b和d。这些向量是此设置中唯一的可训练参数,且不跨层共享。

  • 矩阵A从正态分布中随机初始化,不训练,且在所有层之间共享。
  • 矩阵B也从正态分布中随机初始化(注意不是零,因为B不训练,初始化为零会导致输出全为零),也在所有层之间共享。
  • 向量d初始值全为1,训练时更新。
  • 向量b初始值全为0,训练时更新,确保开始时不对模型做任何更新。

最终,整个适应过程可以表示为:

结果

研究者比较了VeRA和LoRA在内存需求、可训练参数数量和准确率上的表现,覆盖了RoBERTa-base/ large、LLaMA和GPT-3等模型。

  • VeRA的内存需求明显更低,可训练参数数量比LoRA小了几个数量级。
  • 在准确率上,大多数情况下VeRA与LoRA的性能差异不大。在LLaMA模型的MT-bench上,尽管差距不显著,但VeRA的可训练参数总量仅为LoRA的1/100。

4. Delta-LoRA:更新大权重矩阵

介绍

Delta-LoRA的思路有所不同。LoRA的做法是只更新低秩矩阵A和B,从不碰大权重矩阵W。但Delta-LoRA的作者认为,这种微调方式并非最优,与全量微调相比,性能差距依然很大。原因在于,LoRA只更新了一小部分参数,不足以捕捉新数据中的细节。

Delta-LoRA的解决方案很巧妙:它也更新矩阵W,但不用传统微调的方式。它关注的是连续训练步骤之间,低秩矩阵乘积A·B的变化量(delta)。简单来说,它会计算t+1和t这两个连续步骤之间A·B的差异,并假设这个差异能反映出大矩阵W的梯度更新。然后,用一个常量c对这个差异进行缩放,用来更新W。

在Delta-LoRA中,对A和B的更新方式与LoRA相同,没有改变。关键改进在于如何利用A·B的差值来间接更新W,而不需要直接计算W的梯度。

结果

实验结果表明,Delta-LoRA在所有测试方法中始终表现最佳。这主要是因为它的核心知识存在于权重矩阵W中,更新W能带来更好的微调效果。

⚠️ 潜在问题

一个值得注意的细节是,Delta-LoRA的这种方法并不适合大模型厂商。以OpenAI为例,它提供微调API,允许用户定制模型。如果按传统方式,每个希望拥有定制版本的用户,都需要一台专门的GPU服务器。而部署一个GPT-3级别的模型检查点,存储空间大约要350GB,这还只是静态权重。

LoRA之所以完美,是因为它允许所有用户共享同一个原始权重矩阵W,只需存储自己专属的小矩阵A和B。但Delta-LoRA引入了对W的更新,这意味着无法再维持单独的集中式大模型副本和用户特定的低秩矩阵了。对OpenAI这类服务商来说,这会导致巨大的存储成本,实际上并不可行。

5. LoRA+:给A和B不同的学习率

介绍

LoRA+与LoRA的差异很小,但很关键。在LoRA中,低秩矩阵A和B使用了相同的学习率。但LoRA的作者指出,当处理大嵌入维度d时,这种设置会导致微调效果不理想。

原因主要有三点:一是低秩近似的限制,在d很大时,低秩矩阵的表达能力有限,无法很好地表示嵌入向量间复杂的交互;二是信息瓶颈,如果秩r太小,低秩矩阵不足以捕捉输入特征的多样性;三是优化难度增加,参数空间复杂度随d增大而升高。

LoRA+的解决方案很简单:为矩阵B设置更高的学习率。通过这种方式,可以更有效地克服上述问题。

结果

从损失曲线图可以清楚看到这种改进的效果:

  • 蓝线是矩阵B学习率较高时的损失曲线,下降更快更稳。
  • 浅橙色线是A和B学习率相同时的曲线,即标准LoRA的情况。

作者通过多种实验发现,LoRA+的性能比标准LoRA提高了1%-2%,在相同计算成本下,微调速度最多提升了2倍。其核心直觉在于初始化步骤:矩阵B初始值为零,对输出没有贡献,需要较大的学习率;而A是随机初始化的,一开始就有贡献,只需要较小的精细调整。

6. LoRA-drop:有选择地添加LoRA层

引言

激活剪枝(Activation Pruning)是一种常见技术,通过分析神经元的激活值来确定哪些神经元不重要,从而删除它们。核心思想是:如果一个神经元很少有较高的激活值,那么它对模型输出的贡献就很小。

把这个思路应用到LoRA上,就引出了一个问题:是不是每一层都需要添加低秩矩阵?LoRA-drop正是基于这个想法构建的——它先判断哪些层添加LoRA矩阵是必要的,然后只在这些层上做微调。

LoRA层虽然小,但添加得越多,微调成本就越高。所以LoRA-drop的做法是:

  1. 先把低秩矩阵添加到所有层。
  2. 在数据集上采样,对低秩矩阵进行几个回合的训练。
  3. 然后分析低秩矩阵A·B·X生成的激活值。
  4. 如果某一层的激活值整体较大,说明对输出有显著贡献,保留LoRA矩阵;反之则移除。
  5. 最后用整个数据集对选定的层进行训练。

主要优势

LoRA-drop的最大优势不在于提升准确率,而在于显著加快模型的训练速度。

总结

这篇文章从LoRA出发,介绍了其后出现的各种大型语言模型微调方法。重点放在了每种方法的设计理念和解决的问题上,数学层面的细节并未过多展开。如果对矩阵分解的思路感兴趣,可以直接去读原论文。

另外,像AdaLoRA和DoRA等变体由于需要补充更多数学背景,文中没有涉及,后续如果有机会再详细展开。

参考文献

  1. LoRA:https://arxiv.org/abs/2106.09685
  2. LoRA-FA:https://arxiv.org/abs/2308.03303
  3. VeRA:https://arxiv.org/abs/2310.11454
  4. Delta-LoRA:https://arxiv.org/abs/2309.02411
  5. LoRA+:https://arxiv.org/abs/2402.12354
  6. LoRA-drop:https://arxiv.org/abs/2402.07721
来源:https://www.53ai.com/news/finetuning/2024101307549.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。