核心超参:学习率/批量/梯度累积/调度
前置知识点
- 框架选型与环境搭建 核心
- 显存预算:从参数量到显存账 入门
一句话定义
学习率决定每步走多大,有效批量决定梯度噪声多小,warmup 与调度决定步长如何随时间变化——四个旋钮共同决定训练是稳定收敛、震荡还是发散。
为什么重要
超参是「同一份数据效果差三倍」的最常见原因。好消息是微调的超参空间远小于从零训练:成熟模型有公认的经验区间,按本节起点表配置,再按固定顺序调优,大多数任务不需要大规模搜索。
前置知识
kp-004 的显存账(批量大小受显存约束的原因);kp-015 已能跑起训练循环。
核心概念
- 学习率(lr):参数更新步长 η。微调黄金区间:全参 1e-5~2e-5;LoRA 1e-4~3e-4;DPO 更小,5e-7~5e-6。
- 有效批量(effective batch):单卡 batch × 梯度累积步数 × 卡数,决定每步梯度的统计质量。
- 梯度累积(gradient accumulation):显存不够大批量时,攒多个小批量的梯度再更新一次。
- warmup:训练前 3%-10% 步数内 lr 从 0 线性升到目标值,避免开局大步破坏权重。
- 调度器(scheduler):cosine(平滑衰减,默认选择)或 linear。
原理与机制
两个核心公式:
(N 为样本数。)调参的内在逻辑:梯度 = 小批量梯度的平均,批量越大估计越稳、但显存线性增长——梯度累积就是「用时间换批量」的技巧,前 b 步只算梯度不更新,攒够 n_accum 步做一次优化器步进,数学上近似等于大批量。学习率与批量的联动(线性缩放律):批量翻倍,lr 可大致同步上调;反之显存逼你减小批量时,应相应降低 lr。步数公式告诉你时间预算:4000 条、B_eff=64、3 epoch → 188 步——微调的步数通常是数百量级,与预训练的百万步完全不同量级,这正是「lr 必须更大、warmup 不必太长」的原因。
推荐起点表:
| 配置 | 学习率 | B_eff | warmup | epochs | 调度 |
|---|---|---|---|---|---|
| 全参 7B | 1e-5 | 64 | 3% | 1-2 | cosine |
| LoRA 7B | 1e-4 | 32-64 | 5% | 2-3 | cosine |
| QLoRA 14B | 2e-4 | 32-64 | 5% | 2-3 | cosine |
| DPO | 5e-7 | 32 | 10% | 1 | cosine |
图示
lr
│ ╱▔▔╲
│ ╱ ╲_ warmup 3-5% → 峰值 → cosine 衰减
│ ╱ ╲__
└──────────────▔▔▔──▶ steps直观类比
下山找谷底:学习率是步幅(太大跨过谷底、太小走到天黑),批量是每次观测方向的清晰度(批量小 = 醉汉走路),warmup 是热身防止第一步闪腰,cosine 调度是接近谷底时自动放慢脚步。
实例或案例
4000 条数据 LoRA 微调:B_eff=64(batch 2 × accum 32)+ lr 1e-4 → loss 平滑下降、2 epoch 收敛;把 accum 改为 4(B_eff=8)而 lr 不变 → loss 曲线剧烈震荡,eval 指标掉 6 个点;把 lr 降到 5e-5 后恢复平稳——验证了「小批量必须配小 lr」的联动关系。
操作步骤
- 查起点表拿默认值,先固定 epochs=2、cosine、warmup 5%。
- 按显存确定最大 batch,用梯度累积凑出 B_eff 32-64。
- 跑训练,看 loss 曲线(kp-019):平滑下降 → 保持;剧烈震荡 → 降 lr 或增 B_eff;几乎不动 → 升 lr。
- lr 定了再调 epochs(盯验证 loss 拐点),最后微调 warmup。
- 每组实验记录完整配置(见 kp-026),一次只动一个变量。
排错清单
- loss 震荡不收敛:lr 过大或 B_eff 过小,先降 lr 到一半。
- loss 长期几乎不降:lr 过小、或数据/模板有问题(先用 10 条样本过拟合验证管线,见 kp-030)。
- loss 降到接近 0:数据泄漏或严重记忆化,检查去污染(kp-013)与 epoch。
- 前几十步 loss 飙升:warmup 太短,拉长到 10%。
- 收敛但效果差:超参无能为力,回查数据质量与配比。
常见误区
- 把 LoRA 的 lr 当全参用:可训练参数少,需要大 5-10 倍的 lr,1e-5 会让 LoRA 几乎学不到东西。
- 忽略梯度累积对 B_eff 的定义:只看单卡 batch 谈批量没有意义。
- epochs 贪多:SFT 的价值前 2 个 epoch 基本榨干,更多只会过拟合。
与其他知识点的关系
LoRA 专属超参见 kp-006;训练中如何监控这些旋钮的效果见 kp-019;DPO 的超参特异性见 kp-023;系统性排错见 kp-030。
延伸阅读
本节不适用:微调超参以工程共识为主,起点数值取自 LoRA/QLoRA 原论文与主流框架默认配置的交集。
自测题
- 显存只允许 batch=1,如何得到 B_eff=64?
答:梯度累积 64 步(或 2×32 等),每 64 个小批量做一次参数更新。
- LoRA 微调用 lr=1e-5 会怎样?为什么?
答:几乎学不动——LoRA 可训练参数极少,需要 1e-4 量级的学习率;1e-5 是全参微调的区间。
- 4000 条数据、B_eff=64、3 epoch,总步数多少?
答:⌈4000/64⌉×3 = 63×3 = 189 步。