https://thinkingmachines.ai/blog/lora/
当今领先的语言模型包含多达万亿个参数,并在数以十万亿计的词元(tokens)上进行了预训练。
基础模型的性能随着规模的扩大而不断提升,因为这万亿级的参数对于学习和表征所有已记录下来的人类知识中的模式是必需的。
相比之下,训练后阶段(post-training)涉及的数据集更小,并且通常专注于更窄的知识领域和行为范围。
使用太比特(terabit)级别的权重来表征来自吉比特(gigabit)或兆比特(megabit)级别训练数据的更新,似乎是一种浪费。
这种直觉催生了参数高效微调(PEFT)方法,该方法通过更新一小得多的参数集来调整大型网络。
领先的PEFT方法是低秩适配(low-rank adaptation),即LoRA。
LoRA将原始模型中的每个权重矩阵 W 替换为一个修改后的版本 W′ = W + γBA,其中 B 和 A 是矩阵,它们共同拥有的参数数量远少于 W,而 γ 是一个恒定的缩放因子。
实际上,LoRA 为微调所带来的更新创建了一个低维表示。
在训练后阶段的成本和速度方面,LoRA可能提供优势,并且,相比于完全微调(下文简称FullFT),也有一些操作上的原因使其更受青睐:
多租户服务。
由于LoRA在训练适配器(即A和B矩阵)的同时保持了原始权重不变,单个推理服务器可以在内存中保留许多适配器(代表不同的模型版本),并以批处理的方式同时从中进行采样。
像vLLM和SGLang这样的现代推理引擎实现了这一功能。(引用文献:Punica: Multi-Tenant LoRA Serving (Chen, Ye, et al, 2023))
训练的内存布局大小。
当对整个模型进行微调时,优化器状态需要与原始权重一起存储,并且通常使用更高的精度。
因此,FullFT所需的加速器数量通常比从同一模型进行采样要多一个数量级,因而需要不同的内存布局。
(注释内容)在训练时,除了存储权重,我们通常还需要为所有权重存储梯度和优化器动量;而且,这些变量的存储精度(float32)通常高于推理时存储权重所用的精度(bfloat16或更低)。
由于LoRA训练的权重数量和使用的内存都少得多,它可以在一个仅比采样所用布局稍大的内存布局上进行训练。
这使得训练的门槛更低,并且通常效率更高。
- 便于加载和传输。
由于需要存储的权重更少,LoRA适配器能够快速、轻松地在机器之间进行配置或传输。
原文:These reasons are sufficient to explain the growing popularity of LoRA since the publication of the original LoRA paper in 2021.
翻译:这些原因足以解释自2021年最初的LoRA论文发表以来,LoRA为何越来越受欢迎。
(引用文献:LoRA:大型语言模型的低秩适配 (Hu et al, 2021))
然而,关于LoRA相对于FullFT(完全微调)的表现究竟如何,现有文献尚未明确。
人们普遍认为,在类似于预训练的场景中,LoRA的表现不佳——也就是在那些使用超出LoRA参数存储极限的超大数据集的场景中。(引用文献:LoRA学得更少,忘得也更少 (Biderman et al, 2024))
但是,对于训练后阶段常见的数据集规模而言,LoRA拥有足够的容量来存储必要的信息。
然而,这一事实并不能保证其样本效率和计算效率。
问题是:LoRA能否达到与完全微调相当的性能,如果可以,又是在什么条件下呢?
在我们的实验中,我们确实发现,当我们正确处理好一些关键细节时,LoRA能以与FullFT相同的样本效率进行学习,并达到相同的最终性能。
LoRA的关键要素
本文涵盖了我们为确定LoRA在何种条件下能达到与全量微调(FullFT)相当的效率而进行的一系列监督式微调和强化学习实验。为此,我们的实验与以往关于LoRA的实验有几处不同:
- 我们研究了训练集大小与LoRA参数数量之间的普遍关系,而非仅仅关注特定的数据集和任务。
- 在监督学习中,我们测量的是对数损失(log loss),而不是采用基于采样的评估方法,其目的同样是为了保持通用性。对数损失的测量能够在不同的训练步数和训练参数范围内,提供清晰的结果和缩放定律。
我们发现:
- 对于在中小规模的指令微调和推理数据集上进行的监督式微调,LoRA的表现与全量微调相同。
- 对于超出LoRA容量的数据集,LoRA的表现不及全量微调。其损失函数并非达到一个无法逾越的明确下限,而是表现为训练效率的下降,这种效率下降取决于模型容量与数据集大小之间的关系。
- 在某些场景下,LoRA对大批量大小(large batch sizes)的容忍度低于全量微调——当批量大小超过某个点后,其损失值的惩罚(penalty)会更大。这种惩罚不会因为增加LoRA的秩(rank)而减轻;它是矩阵乘积参数化(product-of-matrices parametrization)本身的一个特性,其训练动态与直接优化原始权重矩阵不同。
- 即使在小数据集场景下,当LoRA应用于所有权重矩阵时(特别是MLP和MoE层),其表现也更好。仅作用于注意力层的LoRA表现较差,即便我们通过提高其秩来匹配可训练参数的总数,情况依然如此。
- 在强化学习方面,即便使用很小的秩,LoRA的表现也与全量微调相当。我们发现强化学习仅需要非常低的容量,这一结果与我们基于信息论的论证所预期的相符。
我们还研究了LoRA所使用的超参数对其相对于全量微调的学习率的影响。我们检验了诸如初始化缩放因子和乘数等超参数中的一些不变性,并解释了为何 1/r 的前置因子使得最优学习率(LR)近似独立于秩。我们还通过实验展示了LoRA的最优学习率与全量微调的最优学习率之间是如何关联的。
我们实验的成果是描绘出了一个“低遗憾区间”(low-regret regime),在该区间内,就数据集大小和LoRA参数而言,LoRA的表现与全量微调相似。我们发现这个区间覆盖了大多数训练后场景,从而为在众多应用中使用高效微调打开了大门。
方法与结果
我们设计实验的目的是为了详细衡量在一系列条件下,LoRA相对于全量微调(FullFT)的性能表现。以下是我们实验设置的一些细节:
- 我们将LoRA的秩(rank)在1到512之间调整,使其跨越三个数量级,并将其结果与全量微调进行比较。
- 为了消除因使用次优学习率而可能产生的混淆因素,我们针对每一种实验条件都进行了学习率扫描。我们采用了恒定的学习率策略(无预热或冷却阶段)。
- 我们的实验使用了Llama 3系列模型和Qwen3模型,其中包含一个混合专家(MoE)模型。
- 主要的监督学习实验使用了Tulu3和OpenThoughts3数据集,它们分别侧重于指令遵循和推理。这两个数据集在范围、结构和应用方面存在显著差异,这为我们研究结果的普适性提供了支持。
- 我们的强化学习(RL)实验采用了数学推理任务,并以答案的正确性作为奖励。
LoRA秩
我们在Tulu3数据集和OpenThoughts3数据集的一个子集上训练了单个周期(epoch)。针对每个数据集和模型大小,我们都对LoRA的秩和学习率进行了扫描。在下方的图表中,我们为每个秩绘制了一条彩色线条,该线条是通过在每个训练步数上,取所有学习率对应结果的逐点最小值而得到的:
在Tulu3和OpenThoughts3数据集上,不同秩的LoRA训练曲线。全量微调(FullFT)和高秩LoRA拥有相似的学习曲线,其损失值随着训练步数的对数呈线性下降。当适配器容量耗尽时,低秩LoRA会偏离最低损失曲线。在下方图表中(1B参数模型),高秩LoRA在一个数据集上的表现优于全量微调,而在另一个数据集上则表现更差。这可能是由于训练动态或泛化行为的差异,导致LoRA在不同数据集上的表现存在一些随机变化。
我们观察到,全量微调(FullFT)和高秩LoRA的学习曲线相似,其损失值随着训练步数对数的增加而线性下降。中秩和低秩的LoRA在达到某个与秩相关的步数阈值后,便会偏离最低损失学习曲线。直观来看,当适配器(adapter)的容量耗尽时,学习速度就会减慢,而容量的大小又取决于秩。
接下来,我们绘制损失值随学习率(LR)变化的图表,以检验我们的扫描范围是否覆盖了每个秩的最佳学习率。
我们发现,全量微调(FullFT)的最佳学习率比高秩LoRA低了10倍。我们将在下文讨论LoRA超参数时再回到这一点。
对于不同秩的所有LoRA运行,其最佳学习率似乎是相似的;我们将在下文对这一发现给出理论解释。然而,似乎确实存在一些与秩相关的依赖性,秩为1时的最佳学习率要低于更高秩的LoRA。在秩从4变化到512的过程中,最佳学习率的变化因子小于2。
批量大小(Batch Size)效应
我们发现,在某些设置下,LoRA对大批量大小的容忍度低于全量微调。随着批量大小的增加,性能差距会扩大,并且这种现象与秩无关。在接下来的这个实验中,我们使用了OpenThoughts3数据集中一个包含10,000个样本的小型子集。
图3左侧的图表显示,在大批量大小的情况下,LoRA(虚线)和全量微调(FullFT,实线)的学习曲线之间存在一个持续的差距。
在批量大小为32的较小情况下,这个差距更小,并随时间推移而缩小。
右侧的图表绘制了最终损失作为批量大小的函数。
我们看到,对于更大的批量大小,LoRA在损失上的差距与全量微调的差距越来越大。
大批量下的学习差距似乎不依赖于秩,而更像是LoRA本身的一个特性。
可能的原因是,在这个数据集上,矩阵乘积参数化(BA)的优化动态不如全矩阵(W)有利。
然而,LoRA和全量微调都在较小的批量大小下达到了它们的最佳损失,因此这个差距在实践中可能并不那么重要。
LoRA应用在哪些层
我们研究了将LoRA应用于网络中不同层所产生的影响。
Hu等人的原始论文建议仅将LoRA应用于注意力矩阵,许多后续论文也遵循了这一做法,尽管最近的趋势是将其应用于所有层。
确实,当我们将LoRA应用于所有层,特别是MLP(包括MoE)层时,我们取得了远好于之前的结果。
与我们的结果类似,QLoRA论文也发现,(仅应用于注意力层的)LoRA表现不如(仅应用于)MLP或MLP+注意力层,不过他们发现MLP+注意力 > MLP > 注意力,而我们发现前两者大致相等。
事实上,将LoRA应用于注意力矩阵,相比于仅将其应用于MLP层,并未显示出额外的益处。
仅在注意力层应用LoRA导致的性能不佳,并不能用参数量更少来解释。
在这个特定案例中,尽管秩为256的仅注意力层LoRA与秩为128的仅MLP层LoRA拥有大致相同的参数数量,但前者的表现却更差。(比较下表中的粗体数字。)
在MoE实验中,我们为每个专家(expert)训练了一个独立的LoRA,每个LoRA的秩等于总秩除以激活专家的数量(对于Qwen3 MoE模型,该值为8)。这种缩放方式确保了MoE层中LoRA参数与全量微调参数的比例,与其他层保持一致。
我们在另外两个设置中进行了类似的实验,比较了不同LoRA层的效果:(1)在OpenThoughts3数据集的一个小型子集上,使用秩为256进行监督学习;以及(2)在MATH数据集上进行强化学习。我们将在下一节描述我们的实验设置。在这些设置中,仅注意力层LoRA的表现同样不如仅MLP层LoRA(后者的表现与MLP+注意力层相似)。
强化学习
我们实验的一个关键发现是,在运行用于强化学习的策略梯度算法时,LoRA完全能够匹配全量微调(FullFT)的学习性能,即使秩低至1也能做到。
在这些实验中,我们使用了一种带有重要性采样校正的基础策略梯度算法;目标函数为objective = Σ_t (p_learner / p_sampler) * Adv_t。我们使用了一种类似GRPO的中心化方案,即对每个问题采样多个补全(completion),并减去每组的平均奖励。
下图6显示了在MATH和GSM8K数据集上进行的学习率(LR)扫描,每种情况都使用了典型的超参数。我们使用了Llama-3.1-8B基础模型,因为根据Qwen的技术报告,Qwen2.5和Qwen3模型已知在能够提升其数学性能的数据上进行了预训练,这使得衡量仅在强化学习期间学到了什么变得更加困难。
LoRA展现了更宽的有效学习率范围,并达到了与全量微调(黑线)相同的峰值性能,至少在强化学习的噪声所允许的精度范围内是如此。这一结果可以通过信息论的论证得到预见。监督学习每个回合(episode)大概能提供O(词元数量)比特的信息。相比之下,在策略梯度方法中,学习是由优势函数(advantage function)驱动的,每个回合仅提供O(1)比特的信息。当每个回合包含数千个词元时,强化学习在训练中每个词元吸收的信息量比监督学习少约1000倍。
我们可以根据我们的实验使用更精确的数字。在MATH的例子中,我们对约10,000个问题进行了训练,每个问题有32个样本。假设每个补全产生1比特的信息,整个训练过程只需要吸收320,000比特。而Llama-3.1-8B的秩为1的LoRA已经拥有300万个参数,几乎是所需信息量的10倍。我们通过将模型中所有权重矩阵的rank * d_in(对于矩阵A)和rank * d_out(对于矩阵B)相加来计算这个数字。即使在秩为1时,LoRA也拥有绰绰有余的容量来吸收训练期间提供的所有信息。
作为另一个比较点,DeepSeek-R1-Zero在530万个回合上进行了训练,这对应于530万比特的信息。训练进行了10,400步,每步包含32个独特问题,每个问题采样16次。这个信息量小于一个低秩LoRA的参数数量,我们预测其结果可以用LoRA复现。
为了进一步验证我们在推理任务的强化学习中发现的LoRA有效性,我们在DeepMath数据集上使用Qwen3-8b-base模型进行了更大规模的实验,因为该数据集比MATH数据集大得多,并且通常包含更难的问题。为了加速实验,我们将训练和评估的样本长度限制在8192个词元。这个样本长度允许回溯和推理,但相对于更长的思维链,限制了性能。
我们观察到,当为每种设置选择最佳学习率时,不同大小的LoRA和全量微调的训练进程几乎完全相同。此外,当我们在AIME 2024和AIME 2025的保留问题上评估模型时,也看到了类似的发现。而且,我们从LoRA和全量微调的运行中观察到了相似的定性行为:两者都发展出了高级推理行为,如回溯、自我验证和上下文内探索,这在模型思维链(CoT)的延长中清晰可见。
设置LoRA超参数
阻碍LoRA应用的一个障碍是必须选择最佳的超参数,而这些超参数与为全量微调优化的参数不同。在本节中,我们表明这个问题并不像初看起来那么令人望而生畏,并讨论我们关于超参数选择的发现。
最佳学习率和秩
遵循Hu等人的研究,我们考虑以下LoRA的参数化形式:
W' = W + (α / r) * BA
其中r是LoRA的秩,α是LoRA的缩放因子,A和B是LoRA的权重矩阵(秩为r)。本文的实验中,我们遵循其他实现的常规做法,使用α = 32。
1/r的缩放因子使得最佳学习率近似独立于秩。事实上,一个更强的条件成立——无论秩如何,学习曲线在训练开始时是完全相同的。这个效果非常显著,在我们的实验中,不同秩的学习曲线的接近程度曾让我们担心是不是有bug导致秩参数被忽略了。由此可以推断,在短期训练中,最佳学习率也与秩无关。然而,正如我们在上面关于学习率与损失的图表(图2)中所示,在更长的训练周期中,最佳学习率确实与秩存在一定的依赖关系。我们可以通过观察第一次训练更新后对LoRA矩阵的期望更新来部分解释这个结果。我们可以将LoRA的乘积BA看作是r个秩为1的外积之和:BA = Σ_{i=1 to r} b_i * a_i^T = Σ_{i=1 to r} Δ_i,其中我们定义Δ_i = b_i * a_i^T。这里,∂Loss/∂Δ_i对所有i都是相同的;然而梯度∂Loss/∂b_i和∂Loss/∂a_i将取决于初始化(例如,∂Loss/∂b_i取决于a_i)。由于a_i和b_i的初始化不依赖于秩,因此E[Δ_i]对所有i都是相同的,并且不依赖于秩。在训练的第一步,这些项中每一项的期望更新都是相等的,并且与秩无关。因此,(1/r) * Σ_{i=1 to r} Δ_i只是r个具有相同期望的项的样本均值,所以这个均值的期望,即对适配器(1/r)BA的改变,不依赖于秩。
参数化不变性
有四个超参数可能适用于LoRA:
- 出现在
α/r中的缩放因子α。 - 下投影矩阵
A的学习率LR_A。 - 上投影矩阵
B的学习率LR_B。 - 矩阵
A的初始化尺度init_A。对于随机初始化,这是A初始元素的标准差。矩阵B初始化为零,所以不需要定义init_B。
需要调整四个不同的参数似乎让人不知所措。然而,训练动态中的不变性意味着其中两个是多余的,学习行为由两个决定。我们通过注意到,当使用Adam优化器且ε=0时,我们可以将此结果扩展到ε>0;我们需要将其按1/q缩放,因为梯度也按该因子缩放。优化过程对以下双参数变换是不变的。
对于p, q > 0:
α → (1 / pq) * αinit_A → p * init_ALR_A → p * LR_ALR_B → q * LR_B
由于四个自由度中有两个不影响学习过程,我们只剩下了一个二维的参数空间。我们可以为这个二维空间选择不同的基,例如下面这个易于直观解释的基:
α * init_A * LR_B。这决定了初始更新的尺度,或者等效地说,学习曲线的初始斜率。由于B初始化为零,LR_A和对A的初始更新是无关紧要的。init_A / LR_A。由于Adam在每一步中大致将A的元素更新LR_A,这个时间尺度参数决定了需要多少步才能使A从其初始状态发生显著转变。
我们可以用这个基来重新解释之前关于LoRA的一些工作中的提议。
- LoRA+ 提出了在
A和B上使用不同的学习率,B的学习率更高。用我们上面的基来表示,增加LR_B等效于增加init_A / LR_A,从而使A在更长的时间尺度上发生变化。 - Unsloth的LoRA超参数指南建议对高秩LoRA使用更高的
α值,例如避免使用1/r缩放。这也等效于增加init_A / LR_A。当我们增加α时,需要相应地降低LR_A和LR_B以获得相同的更新大小。这反过来只是使得LR_A相对于init_A更小。
在我们的实验中,我们使用了Huggingface peft库中由Hu等人提出的标准参数化:A使用均匀分布,尺度为1/sqrt(d_in),B初始化为零,两者使用相同的学习率,以及α=32。在我们的实验中,我们未能改进这些超参数。
LoRA与全量微调的最佳学习率
我们的实验表明,在相同的应用中,无论是监督学习还是强化学习,LoRA的最佳学习率始终是全量微调所用学习率的10倍。这在每一个将性能(损失或奖励)与学习率作图的U形曲线中都有体现。这一观察应能使将学习超参数从全量微调迁移到LoRA变得更加直接。
我们目前还没有对这一观察的充分理论解释。我们可以尝试从“LoRA的最佳学习率与秩无关”以及“全秩LoRA可与全量微调直接比较”这两个事实来推导这个结果。这个分析表明学习率比率为模型的隐藏层大小除以2*α,但这与实证结果——最佳比率固定为10,且与基础模型无关——不符。
为了进行实证分析,我们在Tulu3数据集上对14个不同的Llama和Qwen模型进行了LoRA和全量微调的学习率扫描。从这些扫描中,我们拟合了一个函数,该函数根据模型的隐藏层大小以及一个指示它是Llama还是Qwen的标志来预测最佳学习率。使用的函数形式是:
LR = M_LoRA * (2000 / hidden_size)^(model_pow + LoRA_pow)
其中:
M_LoRA是使用LoRA时应用的乘数(如果使用全量微调则为1)model_pow是一个指数调整项,为每个模型来源(Llama和Qwen)单独计算LoRA_pow是针对LoRA的额外指数调整项hidden_size是模型残差流的维度。
我们通过使用线性插值,根据扫描数据来预测损失,从而评估一个预测的学习率,并通过将14个问题上的预测损失相加来评价参数。我们的优化发现,LoRA相对于全量微调的乘数为9.8,并且Qwen3和Llama模型对hidden_size的依赖性不同,但LoRA的学习率对hidden_size的依赖性与全量微调的学习率相同,即优化找到了LoRA_pow=0。
短期与长期运行的学习率
LoRA的典型初始化方式在有效学习率的变化中创造了一个隐式的时间表。这导致了短期和长期训练运行之间的差异,以及与全量微调相比学习曲线形状的一些差异。
在训练开始时,B初始化为零。当B非常小时,A的变化对添加到原始网络权重上的适配器BA产生的影响可以忽略不计。随着B变大,对A的更新开始对网络输出产生更大的影响,有效学习率在训练过程中随着B的尺度接近A而增加。我们发现,在Tulu3和OpenThoughts数据集上的完整训练运行结束时,B矩阵的谱范数最终比A矩阵更大。
这意味着对于较短的训练运行,应该设置更高的最优学习率。初步证据表明,对于短期运行,最佳乘数大约是全量微调的15倍左右,基于坊间证据,更高的乘数在大约100步左右是有效的。对于更长的运行,则收敛到前述的10倍乘数。
讨论
我们希望超越我们的实证结果,讨论一些与LoRA性能和适用性相关的更广泛的考虑因素,这些因素对研究人员和开发者都会感兴趣。
首先,让我们更深入地审视我们的主要结果,即LoRA表现与全量微调相似的两个条件:
- LoRA应用于网络的所有层,特别是包含大部分参数的MLP/MoE层。
- 当容量不受限时,LoRA表现良好,即,可训练参数的数量超过了要学习的信息量,后者可以根据数据集大小来估计。
当条件(1)满足时,我们在训练的最开始阶段会得到与全量微调相似的学习动态。然后,根据条件(2),LoRA会继续表现得像全量微调,直到我们开始达到容量限制。
为什么LoRA可能需要应用于所有层
正如我们之前展示的,如果只将LoRA应用于注意力层,即使在极小数据集的情况下,我们也会得到较慢的学习速度。
一个可能的解释可能来自于将经验神经正切核(eNTK)看作是我们进行少量微调时发生情况的一种近似,遵循Malladi等人的观点。eNTK基于梯度的点积,特别是梯度g_i = ∂/∂θ log p(token_i | prefix_i),以及K(i, j) = g_i · g_j。因此,参数最多的层通常对核的影响最大。该论文还指出,当训练所有层时,LoRA的eNTK与全量微调的eNTK近似相同。所以LoRA训练 ≈ eNTK(LoRA) ≈ eNTK(FullFT) ≈ 全量微调。eNTK(LoRA) ≈ eNTK(FullFT)这个近似只有在我们把LoRA应用于构成点积的大部分参数所在的层时才成立。
监督学习和强化学习需要多少容量?
过去的研究表明,神经网络每个参数可以存储2比特的信息。这些结果关系到在长期训练极限下吸收的最大信息量,而不是计算效率或学习速率。
“每个参数2比特”的结果依赖于巧妙构建的、包含精确信息量的合成数据集。要估计一个给定的现实学习问题所需的信息内容并不那么直接。一个经典的观察是,当最小化对数损失时,在第一个训练周期测得的总对数损失提供了数据集描述长度的度量。也就是说,这是记忆该数据集所需比特数的上限。大语言模型数据集的损失通常在每个词元1比特左右(0.69 nats),具体取决于数据集和模型大小。
这个估计衡量了完美记忆数据集所需的容量,这高估了能够减少测试数据对数损失的“可泛化”学习所需的实际容量。衡量监督学习的容量需求以及这些需求如何与可训练参数数量相互作用,是未来工作的一个开放问题。
对于强化学习,我们声称策略梯度算法每个回合大约学习1比特的信息,因为在回合结束时只有一个奖励值。这不是强化学习的一个基本属性,因为其他算法可以想象从每个回合中学到更多东西。例如,基于模型的强化学习算法训练学习代理来预测观察结果并建立一个世界模型,可能从每个回合中提取更多信息。“每个回合1比特”的说法可能只狭义地适用于策略梯度算法。
我们可以用信息论的术语来使这个比特计数的论证更精确。考虑一个回合,由一个轨迹τ和最终奖励组成,作为一个提供关于未知奖励函数R的一些信息的消息(即一个有噪信道)。我们以当前策略和训练历史为条件,考察策略梯度估计器和R之间的互信息。REINFORCE更新是G = S · Adv,其中S = ∇ log p_θ(τ)。在给定历史的情况下,S与R无关,所以唯一与R相关的部分是标量优势函数。
根据数据处理不等式:
I(G; R | history) ≤ I((S, Adv); R | history) = I(Adv; R | S, history) ≤ H(Adv)。
如果我们将优势函数量化为B个区间,那么H(Adv) ≲ log(B)。也就是说,每个回合收集到的有用信息比特数是O(1),与模型大小无关。这些比特告诉我们我们处于一个离散的奖励函数集合(或等效地,最优策略类别)中的哪一个。这种互信息的分析反映了某些优化算法理论分析中使用的方法。请注意,这个估计是训练所吸收信息的上限;实际学到的量将取决于策略的初始化和其他细节。例如,如果我们用一个得不到任何奖励的策略来初始化,那么优势函数的熵为零(而不是log(B)),它什么也学不到。
LoRA的计算效率优势
我们上面的实验衡量了学习进度与训练步数的关系,但我们可能也对不同方法的计算效率感兴趣。我们计算出,LoRA每次传递(pass)所需的浮点运算次数(FLOPs)略多于全量微调的三分之二。因此,它在整体计算效率上通常会优于全量微调。
我们通过分析在给定权重矩阵上的前向-后向传递中使用的FLOPs来推导出这个三分之二的比例。这些运算占了神经网络模型中绝大部分的FLOPs。我们使用以下符号:
W ∈ R^(N×N)是一个权重矩阵x ∈ R^N是一个输入向量y = Wx ∈ R^N是一个输出向量x̄, ȳ ∈ R^N是损失函数关于x和y的梯度,在后向传递中计算W̄ ∈ R^(N×N)是损失函数关于W的梯度
全量微调执行以下操作:
- 前向
y = Wx(N^2次乘加运算) - 后向
x̄ = W^T ȳ(N^2次乘加运算)W̄ += x ȳ^T(N^2次乘加运算)
前向传递需要N^2次乘加运算,后向传递需要另外2 * N^2次,总共3N^2次。因此,需要同时进行前向和后向传递的训练,其FLOPs是仅前向推理的3倍。
使用LoRA时,我们将W替换为W + BA,其中B ∈ R^(N×R)且A ∈ R^(R×N),且R ≪ N。由于我们只更新Ā和B̄,我们用一个计算成本低得多的操作来替换更新W̄的第三步。A和B是N·R矩阵,所以对每个矩阵进行完整的前向-后向计算需要3NR次乘加运算,而不是W的3N^2次。两者的总和是6NR。我们还对Wx和x̄执行前向-后向传递,相当于全量微调的前两步。总的乘加次数是2N^2 + 6NR。当R ≪ N时,这略多于3N^2的三分之二。
如果我们将LoRA的性能与FLOPs而不是训练步数作图,这种分析忽略了用于注意力的FLOPs,这在长上下文设置中可能很重要。它将显示出比全量微调明显的优势。
开放性问题
有几个与我们结果相关的问题,我们很希望在未来看到相关的研究:
- 更精确地预测LoRA性能以及它与全量微调表现相当的确切条件。我们大致描述了性能相当的区间,并可以根据词元或回合数来估计所需的容量,但我们还不能做出准确的预测。
- 我们对LoRA学习率和训练动态的理论理解是有限的。一个能够解释LoRA和全量微调学习率之间比率的更完整的理论将非常有价值。
- 当按照本文的方法论进行衡量时,LoRA的变体如PiSSA表现如何?
- 将LoRA应用于MoE层有多种选择。LoRA用户将受益于对它们表现如何,以及每种方法与张量并行和专家并行等对大型MoE模型很重要的技术兼容性的调查。
结语
在Thinking Machines,我们相信微调的力量能够推动人工智能在许多专业领域的实用性。我们对LoRA的兴趣源于一个目标,即让这种力量被广泛获取,并能轻松地根据特定需求进行定制。
除了其实用价值,对LoRA的研究也引导我们更深入地探讨了模型容量、数据集复杂性和样本效率。通过观察学习速度和性能如何依赖于容量,为研究机器学习中的基本问题提供了一个视角。我们期待在未来推进这项研究。
致谢
我们感谢Dan Alexander Biderman、Weizhu Chen、Daniel Han和Sadhika Malladi对本文早期草稿提出的富有洞见的反馈。