大语言模型 LoRA 技术综述
引言
低秩适应(Low-Rank Adaptation,LoRA)通过可插拔的低秩矩阵更新密集神经网络层,是当前参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)范式中表现最佳的方法之一。它在跨任务泛化和隐私保护方面具有显著优势,因此受到了广泛关注。
预训练语言模型的参数规模迅速增加,从早期的 BERT 到如今的千亿级模型如 PaLM,极大地提升了泛化能力。然而,全参数微调(Full Fine-Tuning)计算开销巨大。例如,对 LLaMA2-7B 模型进行全量微调需要约 60GB 显存,超出了普通消费级 GPU 的容量。为了降低成本,PEFT 方法应运而生,主要分为额外参数方法和内部参数方法。LoRA 属于内部参数方法,冻结大部分原始参数,仅微调一小部分,在无法修改模型架构的情况下是理想选择。
低秩适应(LoRA)原理
低维固有维度假说提出,过度参数化模型存在于低固有维度上。LoRA 基于此假说,用低秩矩阵更新模型中的密集层,同时实现参数和计算效率。
核心机制
在 Transformer 架构中,密集层通常包含注意力模块的投影矩阵和前馈神经(FFN)模块。LoRA 假设权重矩阵的更新 $\\Delta W$ 可以分解为两个低秩矩阵 $B$ 和 $A$ 的乘积,即 $\Delta W = BA$,其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,且秩 $r \ll \min(d, k)$。
训练时,原始权重 $W_0$ 被冻结,前向传播公式变为: $$h = W_0x + \Delta W x = W_0x + BAx$$
这种设计使得 LoRA 插件独立于主模型,训练后可分离存储并在其他相关下游任务中重用。此外,多个 LoRA 插件可以组合以实现跨任务泛化。
代码示例
以下是一个简化的 PyTorch 风格 LoRA 实现概念:
import torch
import torch.nn as nn
class LoRALayer(nn.Module):
def __init__(self, in_features, out_features, rank):
super().__init__()
self.rank = rank
# 初始化低秩矩阵 A 和 B
self.A = nn.Linear(in_features, rank, bias=False)
self.B = nn.Linear(rank, out_features, bias=False)
# 缩放因子 alpha
self.scaling = 1.0 / rank
def forward(self, x):
return (self.B(self.A(x)) * self.scaling)
下游适应性改进
尽管 LoRA 性能优异,但在数学推理等复杂任务上与全量微调仍有差距。现有方法主要从以下角度改进:


