LoRA 微调
LoRA 微调
LoRA(Low-Rank Adaptation)是一种高效微调大型模型的技术,通过低秩分解减少参数量,显著降低计算成本。其核心思想是为原始权重矩阵WWW添加一个低秩增量ΔW\Delta WΔW:
ΔW=BA
\Delta W = BA
ΔW=BA
其中:
- B∈Rd×rB \in \mathbb{R}^{d \times r}B∈Rd×r和A∈Rr×kA \in \mathbb{R}^{r \times k}A∈Rr×k为可训练的低秩矩阵
- 秩r≪min(d,k)r \ll \min(d,k)r≪min(d,k),通常r∈{1,2,4,8}r \in \{1,2,4,8\}r∈{1,2,4,8}
- 更新后权重为Wnew=W+ΔWW_{\text{new}} = W + \Delta WWnew=W+ΔW
实现步骤
- 冻结原始模型:保持预训练权重WWW不变
- 注入适配层:在Transformer的注意力模块(如Q/K/V投影层)旁添加BABABA矩阵
- 仅训练增量参数:优化BBB和AAA,梯度仅作用于低秩矩阵
伪代码示例
class LoRALayer(nn.Module):def __init__(self, base_layer, rank=8):super().__init__()self.base = base_layer # 原始冻结层 (e.g., nn.Linear)self.lora_A = nn.Parameter(torch.randn(base_layer.in_features, rank))self.lora_B = nn.Parameter(torch.zeros(rank, base_layer.out_features))def forward(self, x):base_output = self.base(x) # 原始输出lora_output = x @ self.lora_A @ self.lora_B # 低秩适配return base_output + lora_output
核心优势
- 参数效率:可训练参数量减少100×100 \times100×以上(例如:175B模型仅需0.1%参数)
- 无推理延迟:增量矩阵可合并回原权重:Wmerged=W+BAW_{\text{merged}} = W + BAWmerged=W+BA
- 模块化适配:不同任务对应独立BABABA矩阵,支持动态切换
典型应用场景
- 大语言模型(LLaMA, GPT)的领域适配
- 多任务学习(不同任务使用不同LoRA模块)
- 资源受限设备上的轻量微调
注意:秩rrr需平衡表达能力和效率;建议在注意力层应用,全连接层效果次之。