核心要点

  • rank r:低秩旁路的秩,决定 LoRA 的容量。常用 8/16/32/64,任务越复杂、数据越多取越大;r 过大会增加显存且易过拟合,过小则欠拟合。

  • alpha:缩放系数,实际增量为 ΔW 乘以 alpha/r。常令 alpha=2r 或 alpha=r;改 r 时同步改 alpha 可保持有效缩放稳定,避免重新调学习率

  • target_modules:选哪些层加 LoRA。最少加注意力的 q、v(常加 k、o),覆盖到 MLP(gate/up/down)效果更好但参数更多;覆盖越全越接近全量、成本越高。

  • dropout 与学习率:lora_dropout(0~0.1)防过拟合,数据少时调大;学习率通常比全量微调大一个量级,常用 1e-4 ~ 3e-4,配 warmup 与 cosine 衰减。

标准回答

LoRA 调参可按「容量 → 缩放 → 覆盖范围 → 正则与学习率」四步走。

rank r(容量):r 是低秩旁路 B、A 的秩,直接决定能学多少新信息。经验默认 r=8 或 16 起步;任务越复杂(如复杂推理、风格迁移)、数据越多就上调到 32/64。r 太大不仅显存与参数上升,还可能过拟合、泛化变差;太小则欠拟合学不动。建议在验证集上做 8/16/32 的小网格。

alpha(缩放):LoRA 实际加到权重上的增量是 (alpha/r)·BA,alpha 控制这条旁路的「强度」。常见做法是 alpha=2r(即缩放系数为 2)或 alpha=r(缩放为 1)。重要技巧:当你调整 r 时,按比例同步调 alpha,可保持有效缩放 alpha/r 不变,从而不必每次重调学习率

target_modules(覆盖范围):决定 LoRA 加在哪些权重上。最小集是注意力的 q_proj、v_proj;加上 k_proj、o_proj 通常更稳;进一步覆盖 MLP 的 gate/up/down_proj 效果最接近全量但参数显著增多。2026 常见默认是「all-linear」即覆盖所有线性层,在显存允许时往往效果最好。

dropout 与学习率lora_dropout 一般取 00.1,数据量小、易过拟合时调到 0.050.1。学习率因为可训练参数少、旁路初始为 0,通常比全量微调大一个量级,常用区间 1e-4 ~ 3e-4,配合 warmup(几十到几百步)与 cosine 衰减;batch 不够大时用梯度累积。

经验默认 + 调参顺序:先用一套稳妥默认(r=16、alpha=32、target=all-linear 或 q/k/v/o、dropout=0.05、lr=2e-4)跑通;再按「先 r/alpha → 再 target_modules → 最后 lr 与 dropout」的顺序微调,每次只动一组、以验证集 loss/指标为准。欠拟合就加 r、扩 target、提 lr;过拟合就减 r、加 dropout、降 epoch

常见误区

⚠️ 常见踩坑

误区一:以为 r 越大效果越好——r 过大不仅吃显存,还常过拟合、泛化反降。误区二:改了 r 却忘了 alpha——有效缩放是 alpha/r,单改 r 会让实际更新强度漂移,导致结果不可比。误区三:沿用全量微调的小学习率(如 2e-5)——LoRA 参数少且初始为 0,学习率太小会几乎学不动,需大一个量级。误区四:只加 q/v 就以为够了——难任务下不覆盖 MLP 往往欠拟合,应按效果扩到 all-linear。误区五:不设 warmup、epoch 拉太多,小数据集上极易过拟合并遗忘通用能力。

追问

追问 1alpha/r 这个有效缩放为什么重要?把 alpha 固定、只调 r 会发生什么?

LoRA 实际加到权重上的增量是 (alpha/r)·BA,alpha/r 决定旁路对前向输出的影响强度,相当于和学习率耦合的一个增益。如果固定 alpha 只增大 r,有效缩放 alpha/r 会变小,旁路影响被削弱、可能学不充分,且不同 r 的实验不可直接比较。正确做法是按比例同步调 alpha(如恒定 alpha=2r),保持 alpha/r 稳定,这样换 r 时无需重调学习率,实验更可控。也有 rsLoRA 等用 alpha/√r 缩放以改善大 r 下的稳定性。

追问 2target_modules 只加注意力层和加到全部线性层(含 MLP),实践中怎么取舍?

只加注意力 q/v(或 q/k/v/o)参数最少、显存最省、训练最快,适合简单任务、数据少或资源紧张;但 MLP 承载了大量知识,难任务下不覆盖 MLP 容易欠拟合。覆盖到 all-linear(含 gate/up/down)容量最大、最接近全量效果,代价是参数与显存上升。实践上:资源紧或任务简单 → q/v 起步;追求效果且显存允许 → all-linear,再用稍小的 r 平衡参数量。最终以验证集对比为准。

追问 3数据集很小(几百条)做 LoRA,超参该怎么调以避免过拟合?

小数据要「降容量、强正则、少训练」:把 r 调小(48)、target_modules 收敛到 q/v 而非 all-linear,减少可训练参数;提高 lora_dropout 到 0.050.1;学习率取区间偏小一端并加 warmup、用 cosine 衰减;epoch 控制在 1~3 并用 early stopping 盯验证集;必要时混入少量通用数据缓解灾难性遗忘。核心是让模型「刚好学会任务、别背下训练集」。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习