Lora微调流程(2)
总结
rank / target modules 是“模型容量旋钮”
lr / a / dropout 是“训练动力与稳定性旋钮”
所以顺序一定是:
先用 rank + modules 决定“模型能不能学到”
只有在“能学到但学得不好”时,才动 lr / a
下面我给你一版逻辑自洽、工程化、可直接用于面试或技术方案说明的 LoRA 微调流程。
这版我已经明确区分了容量类参数 vs 优化类参数,避免你刚才指出的逻辑矛盾问题。
你可以把它当作 最终版流程 来用。
LoRA 微调标准流程(工程版 · 分类任务)
适用场景:
- 智能客服 / 意图分类 / 多标签语义理解
- 中小规模数据
- 追求稳定泛化而非极限拟合
一、准备阶段:任务 & 数据评估
1. 评估任务复杂度(决定“是否需要 LoRA”)
- 输出结构(单意图 / 多意图)
- 语义歧义程度
- 长尾意图比例
- 是否存在分布偏移(新活动 / 新产品)
例:客服意图分类 → 中等复杂度 → 适合 LoRA
2. 评估数据(决定“LoRA 容量上限”)
- 数据量级(几千 / 几万 / 十万+)
- 标注一致性(是否存在边界模糊)
- 长尾覆盖
- 文本噪声(错别字、口语、省略)
二、结构与容量设定(先定“能不能学到”)
这一阶段 只动容量类参数
❌ 不动 lr / a
1. 初始 LoRA 配置(保守起点)
-
rank r:8 ~ 16
-
target modules:
- Attention:Q / V
- FFN:顶层 2 ~ 4 层
-
dropout:0.05 ~ 0.1
-
a(scaling):1.0(固定)
-
lr:1e-4 ~ 5e-4(固定)
目标:得到一个 安全、可收敛、不易爆炸的起点
2. 小规模试跑(结构验证)
-
1 ~ 3 epoch 或少量 step
-
观察:
- train loss 是否下降
- val F1 是否有趋势
- 是否出现 nan / 振荡
3. 判断容量是否合适(关键决策点)
| 现象 | 结论 | 动作 |
|---|---|---|
| train loss 降不下去 | 欠拟合 | ↑ rank 或引入 FFN |
| train 快速 → 0,val F1 下降 | 过拟合 | ↓ rank 或减模块 |
| train / val 都缓慢改善 | 容量基本合适 | 进入下一阶段 |
优化参数微调
一、先给你一句总原则(一定要记住)
rank / target modules 是“模型容量旋钮”
lr / a / dropout 是“训练动力与稳定性旋钮”
所以顺序一定是:
- 先用 rank + modules 决定“模型能不能学到”
- 只有在“能学到但学得不好”时,才动 lr / a
二、什么时候【不该】动 a / lr
先把“错误时机”说清楚。
❌ 情况 1:明显欠拟合
现象:
- train loss 降不下去
- train / val F1 都低
- 增加 epoch 也没明显改善
正确动作:
- 先加 rank
- 或 增加 target modules(如引入顶层 FFN)
❌ 不要做的事:
- 不要第一反应去调 lr 或 a
👉 本质是模型容量不够,给再大的学习率也学不到
❌ 情况 2:明显过拟合(容量型)
现象:
- train loss 很快接近 0
- val loss 上升 / F1 下降
- 各类意图 recall 不均衡
正确动作:
- 减小 rank
- 减少 target modules
❌ 不要做的事:
- 不要先调 lr
👉 lr 只能影响收敛速度,解决不了“记住训练集”的问题
三、那什么时候【才值得】动 a / lr / target modules?
下面是你真正关心的部分。
1️⃣ 什么时候调 learning rate(lr)
✔ 适用前提
模型容量是对的,但“学得不顺”
典型信号
| 现象 | 判断 |
|---|---|
| train loss 能降,但非常慢 | lr 偏小 |
| loss 上下振荡,F1 不稳定 | lr 偏大 |
| 不同随机种子结果差异大 | lr 边界不稳 |
工程判断逻辑
“模型能学到,但梯度更新效率不理想”
推荐策略(你可以直接说)
- 在 rank 固定 的前提下
- lr 在
1e-4 ~ 5e-4内 ±2 倍微调 - 不跨数量级跳
2️⃣ 什么时候调 a(LoRA scaling)
这是一个面试非常容易加分的点。
✔ 适用前提
rank 合理、lr 合理,但 loss 对 lr 不敏感
典型信号
| 现象 | 判断 |
|---|---|
| lr 调大,loss 几乎不变 | LoRA 更新幅度太小 |
| rank 不想再加(怕过拟合) | 需要“放大 LoRA 影响力” |
工程本质
a≈ LoRA 分支对主模型的“话语权”- 不改变参数量,只改变更新强度
什么时候才值得动?
当你觉得“模型好像学得到,但表达得不够用力”
推荐区间
- 从 1.0 → 2.0
- 很少超过 4
(超过 4 基本等同于“隐式放大 lr”,风险大)
四、把整个逻辑压缩成「面试级 6 句话」
你可以直接按这个顺序说:
- 我们先通过 rank 和 target modules 决定模型容量,保证能学到但不过拟合
- 如果明显欠拟合或过拟合,只调这两个,不动 lr
- 当模型能学到,但收敛慢或不稳定时,才微调 lr
- 如果 lr 调整不敏感,但又不想再加 rank,会考虑调 a 放大 LoRA 影响
- target modules 的调整是基于任务语义,而不是盲目加
- 整个过程始终以 val F1 和各类 recall 为反馈,而不是单一 loss
“lr 太小 vs rank 太小,现象上非常像,我怎么区分?”
“当 train loss 降得慢时,我们会结合 loss 的可持续性和 train F1 的边际收益来判断。
如果 loss 能持续下降、F1 有稳定且可感知的提升,说明模型在学,只是步子小,优先调 lr;
如果 loss 很快进入平台,或者虽然下降但边际收益极低、F1 提升乏力,就说明模型表达能力受限,需要提高 rank。
实践中我们也会通过最小干预实验,单独放大 lr 或 rank,验证哪个对收敛更敏感。”

浙公网安备 33010602011771号