微调实战:LoRA 上手

全量微调大模型成本高昂。LoRA(Low-Rank Adaptation)冻结预训练权重,只在 Transformer 的权重旁注入可训练的低秩矩阵,把可训练参数量降低几个数量级,让单卡也能微调大模型。

为什么用 LoRA

全量微调需要更新全部参数,显存与存储开销巨大。LoRA 只训练新增的小矩阵,原权重保持不变,多个任务可共享一份底座、各自挂载不同适配器,切换与部署都很灵活。

原理简述

对某个权重矩阵 W,LoRA 不改动 W,而是学习分解后的低秩增量:W + BA,其中 B 与 A 是窄矩阵。反向传播只更新 B、A,参数量从 d×d 降到 d×r 级别(r 远小于 d)。

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()

实操要点

  • 选对目标模块:通常从注意力层的 q、v 投影入手。
  • 控制秩 r:小任务用 8 到 16 足够,过大反而易过拟合。
  • 学习率略高于全量微调即可,配合常规优化器。

小结

LoRA 用低秩适配在几乎不碰原模型的前提下完成微调,显存友好、可多任务复用。它是资源有限时让大模型适配专属场景的首选方案。

参考与延伸阅读

本文累计阅读