LoRA:Low-Rank Adaptation 是PEFT(Parameter-Efficient Fine-Tuning)的一种
全参数微调:使用特定任务数据对预训练模型的所有参数进行更新,提升任务性能,但训练代价昂贵。
Adapter Tuning与Prefix Tuning:
Adapter Tuning:在模型中添加额外知识模块(Adapter),其余参数保持冻结,降低训练代价,但会增加模型层数和训练推理速度。
Prefix Tuning:通过在输入数据前添加前缀(prefix)进行微调,引导模型提取相关信息,但训练困难且减少输入层有效信息长度。
LoRA微调方法:提出LoRA以解决全参数微调成本高和Adapter Tuning、Prefix Tuning的劣势。LoRA通过使用低秩矩阵A和B来近似表示全参数微调中的增量权重ΔW,从而减少参数量。
LoRA架构:在原始预训练矩阵旁路上使用低秩矩阵A和B近似替代增量更新ΔW,减少参数量同时保持输出数据维度不变。
训练和推理过程:
训练:固定预训练权重W,只训练低秩矩阵A和B,保存时只需保存A和B。 训练时可以将AB矩阵加到 q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj、或者 q_proj,v_proj
(B 是降维矩阵,A是升维矩阵,其中 A 正常随机数初始化,B 全 0 初始化,从而保证训练初期的稳定性)
推理:合并低秩矩阵和预训练权重进行推理,不改变模型架构。
LoRA低秩适配原理:
秩的概念:表示矩阵的信息量,秩亏表示信息冗余,满秩表示信息独立。
SVD分解:用于找出矩阵中信息量丰富的维度,LoRA使用SVD分解的思想,让模型学习如何近似ΔW。
超参α:在LoRA中,α用于调整低秩矩阵的影响,类似于调整学习率。
一般 α设置为32,r设置为 4
LoRA实验:通过实验验证了LoRA低秩矩阵的有效性,包括不同r值下的微调效果、不同低秩空间的相交程度、不同层的r值设置,以及预训练权重与微调权重的关系。
实验的结论:
1、低秩确实有效果:较小秩空间中信息量较高的维度与较大秩空间的相似度较高
2、不同层可能需要不同的r值以捕捉最有用的信息
3、增量权重确实强调了预训练权重中未充分表示的信息,且秩越小,放大程度越明显
代码库:
LLaMA-Factory