LoRA微调实战指南:参数高效微调的原理、实践与陷阱
LoRA:用0.1%的参数达到全量微调效果 LoRA(Low-Rank Adaptation)已成为大模型微调的事实标准。其核心思想简单而优雅:冻结预训练权重,仅训练注入的低秩矩阵。 数学原理 对于预训练权重矩阵 $W_0 \in \mathbb{R}^{d \times k}$,LoRA将权重更新表示为两个小矩阵的乘积: $$W = W_0 + \Delta W = W_0 + BA$$ 其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,$r \ll \min(d, k)$。 初始化时,$A$用高斯随机初始化,$B$用零矩阵初始化,确保训练开始时 $\Delta W = 0$,不破坏预训练效果。 参数缩减比率为 $\frac{r(d+k)}{dk}$。以7B模型为例,当 $r=8$ 时,可训练参数仅约10M,占全量参数的0.14%。 关键超参数调优 秩(Rank)的选择 秩 $r$ 是LoRA最重要的超参数。经验法则: r=4~8:简单任务(文本分类、风格迁移) r=16~32:中等任务(指令跟随、领域适配) r=64+:复杂任务(代码生成、数学推理) 但更大的秩并不意味着更好的效果。研究表明,当秩超过某个阈值后,性能增益趋缓甚至下降,因为低秩约束本身具有正则化作用。 目标模块选择 LoRA可以注入到不同层:注意力层的Q/K/V/O矩阵、FFN层的up/down矩阵。实践建议: # 推荐配置:同时微调注意力和FFN target_modules = [ "q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj" ] 仅微调注意力层往往不够,FFN层包含大量领域知识,加入FFN层通常能提升3-5个点。 学习率与调度器 LoRA的学习率通常比全量微调高10倍: 全量微调:1e-5 ~ 5e-5 LoRA:1e-4 ~ 5e-4 QLoRA:1e-4 ~ 3e-4 调度器推荐cosine decay配合warmup,warmup步数占总步数的3-5%。 ...
