PEFT = Parameter-Efficient Fine-Tuning = 参数高效微调:冻结模型的大部分参数,只训练很少一部分参数,让模型适应新任务。
常见peft包括lora, Adapter、Prompt/Prefix/P-Tuning、IA³ 和 BitFit
<br>
LoRA 的提出源于大家在某个垂类领域微调大模型时发现的参数分布上的规律。由于我们现在的大模型的 OP 基本都是 Transformer,Transformer 里面参数主要都由 Linear 组成,比如 FFN 中的 MLP 和计算 QKV 用到的投影矩阵,它们本质上都是一个 Linear。而 Linear 这个 OP 的运算又可以表示为:
y=Wx,W∈Rdout×diny=Wx,W∈Rdout×din
其中 WW 就是参数矩阵。假设我们在垂类数据集上完成了微调,微调后的参数矩阵为 W′W′。长期的训练经验让我们注意到一个现象:在小数据上全量微调大模型时,模型虽然拥有非常多的参数,但真正有效的参数更新似乎并没有覆盖整个参数空间,而是集中在少数几个主要的变化方向上。
LoRA 的基本原理
为了用更加数学的语言来描述这个问题,我们不妨考察一下这两个矩阵的差距:
ΔW=W′−WΔW=W′−W
那么上面那句话就可以进一步翻译为:虽然 ΔWΔW 本身仍然是一个和 WW 维度完全相同的大矩阵,但它所包含的有效变化方向可能并没有矩阵维度看起来那么多。换句话说,ΔWΔW 可能具有较低的内在秩,或者至少可以被一个低秩矩阵很好地近似。
而训练的本质,其实就是在寻找这个 ΔWΔW。