大语言模型 LoRA 技术综述:原理、变体与应用前景
引言
低秩适应(Low-Rank Adaptation,LoRA)通过可插拔的低秩矩阵更新密集神经网络层,是当前参数高效微调范式中表现最佳的方法之一。此外,它在跨任务泛化和隐私保护方面具有显著优势。因此,LoRA 最近受到了广泛关注,相关文献的数量呈指数增长。
预训练语言模型参数规模的迅速增加提升了它们的泛化能力,并带来了新的能力。近年来,预训练语言模型的参数规模增加了数千倍(例如,从具有 3.3 亿参数的 BERT 到具有 5400 亿参数的 PaLM)。这些具有大参数规模的预训练语言模型被称为大语言模型(LLMs)。然而,由于 LLMs 的知识边界,它们在某些下游任务中的能力仍然有限。为了扩展知识边界,仍然有必要在下游任务上微调 LLMs。
然而,对 LLM 进行全参数微调(即全量微调)计算开销极其巨大。例如,对 LLaMA2-7B 模型进行全量微调需要大约 60GB 的内存,超出了普通消费级 GPU 的容量。为了减少计算成本,提出了各种参数高效微调(PEFT)方法。这些方法通过只微调少量(额外的)模型参数来使 LLMs 适应下游任务。从是否涉及额外参数的角度来看,PEFT 方法可以分为两类:额外参数方法和内部参数方法。
额外参数方法冻结 LLM 的所有原始参数,并插入一组可学习的参数来优化模型输入或模型层,如适配器调优和提示调优。相比之下,内部参数方法冻结 LLM 的大部分原始参数,只微调 LLM 的一小部分参数,如 BitFit、LISA 和 LoRA。
在无法修改模型架构的情况下,内部参数方法是理想的。在内部参数方法中,LoRA 是使用最广泛的方法,因为它在多个下游任务上可以实现与全量微调相当或更好的下游适应性能,且易于实施。此外,还提出了许多变体,以进一步提高 LoRA 在更具挑战性的下游任务中的适应能力。

随着 LoRA 插件的累积,管理 LoRA 插件的计算成本也在增加。尽管 LoRA 计算效率高,但管理大量 LoRA 插件的计算成本不可忽视。因此,有必要进一步提高 LoRA 的计算效率。改进可以通过减少单个 LoRA 插件的计算成本和加速多个插件的可扩展服务来实现。这可以促进 LoRA 在现实世界中的应用,如生成即服务(GaaS)云产品。
在某些情况下,训练数据由多个客户端私有且无法集中。为了使用分布式训练数据使 LLMs 适应,我们可以采用联邦学习来保护每个客户端的数据隐私。然而,联邦学习会产生高昂的通信和计算成本。为了降低成本,LoRA 是一个自然的选择。其参数高效特性有助于降低每个客户端的计算成本和跨客户端共享参数的通信成本。此外,LoRA 的可插拔特性有助于在联邦学习中保留每个客户端的参数隐私。因此,LoRA 在隐私保护方面具有巨大潜力。
在本综述中,我们对 LoRA 的当前进展进行了全面概述,包括:提高 LoRA 下游适应性能的方法;混合 LoRA 插件以实现跨任务泛化的方法;提高 LoRA 计算效率的方法;在联邦学习中采用 LoRA 的方法。此外,还简要介绍了 LoRA 的应用。
低秩适应(LoRA)原理
低维固有维度假说提出,过度参数化模型存在于低固有维度上,这表明我们可以通过仅更新与固有秩相关的参数来实现适当的学习性能。基于这一假说,LoRA 提出用低秩矩阵更新模型中的密集层。它可以同时实现参数和计算效率。
LoRA 在参数上非常高效,因为它仅更新模型参数的一小部分,从而在不增加推理延迟的情况下减少了微调所需的内存和计算要求。此外,可以通过从低秩矩阵扩展到低秩张量或与克罗内克分解结合进一步提高参数效率。除了参数效率,LoRA 也是可插拔的,因为 LoRA 参数在训练后可以从模型中分离出来。LoRA 的可插拔特性使其可以被多个用户共享和重用。当我们拥有多个任务的 LoRA 插件时,可以组合这些插件,并期望获得适当的跨任务泛化性能。
在实践中,对于基于 Transformer 的 LLM,密集层通常由两种类型的权重矩阵组成:注意力模块中的投影矩阵和前馈神经(FFN)模块。在原始研究中,LoRA 应用于注意力层的权重矩阵。后续工作表明,在 FFN 层中使用它可以进一步提高模型性能。
数学形式化
假设预训练权重为 $W_0 \in \mathbb{R}^{d \times k}$,LoRA 将其分解为两个低秩矩阵 $A \in \mathbb{R}^{r \times k}$ 和 $B \in \mathbb{R}^{d \times r}$,其中 $r \ll \min(d, k)$。前向传播时,权重更新为:
$$ W' = W_0 + BA $$
在反向传播过程中,只有 $A$ 和 $B$ 被更新,$W_0$ 保持冻结。这种机制使得显存占用大幅降低,因为只需要存储梯度关于 $A$ 和 $B$ 的部分。
下游适应性改进
尽管 LoRA 在某些下游任务上可以实现适当的适应性能,但在许多下游任务上(如数学推理),LoRA 与全量微调之间仍存在性能差距。为填补这一差距,许多方法被提出以进一步提高 LoRA 在下游任务中的适应性能。

