语言模型微调实战(06):看日志与选轮数
核心原则一句话:选验证集上更好的 checkpoint,而不是 train loss 最低的那一步。 这一篇讲怎么读日志、怎么看曲线、怎么把「几轮最好」从拍脑袋变成可复现实验。
核心原则
Train loss 持续下降,只说明模型更「贴」训练集;eval loss 若开始回升,往往意味着过拟合。
读哪些文件
训练输出目录里常见:
| 文件 | 用途 |
|---|---|
trainer_log.jsonl / trainer_state.json |
逐步 loss、eval_loss、best checkpoint |
training_loss.png |
训练损失曲线 |
training_eval_loss.png |
验证损失曲线(若开启评估) |
train_results.json / eval_results.json |
汇总指标 |
trainer_state.json 里通常能看到 best_model_checkpoint 与 best_metric。若开启了 load_best_model_at_end,最终导出的适配器应对齐该最优步。
曲线怎么读(定性)
健康形态通常是:
- 前期:loss 快速下降(模型在学格式与高频模式);
- 中后期:下降变缓,进入平台;
- eval_loss:整体下降或先降后平;若明显掉头向上,应提前停或回退 checkpoint。
不健康形态:
- train 一直降、eval 持续升 → 过拟合;
- 两者长期几乎不动 → 学习率过小、数据过难/过脏、或步数不够。
轮数没有唯一正确答案
可先按数据规模给一个起点,再靠验证集裁定:
| 监督样本规模(量级) | 可试起点 |
|---|---|
| 很小 | 3–5 epoch |
| 中等 | 2–3 epoch |
| 很大 | 1–2 epoch |
实操建议:
- 训练中看
eval_loss; - 训完用同一套评估脚本对比多个 checkpoint;
- 对结构化任务,以 schema/字段匹配为主指标,不要只看开放文本的字符串全匹配。
批量对比 checkpoint(思路)
写一个脚本遍历 checkpoint-*:
- 加载基座 + 该 checkpoint 适配器(或已合并产物);
- 在私有验证集上跑同一评估;
- 输出表格:步数、核心指标、是否推荐。
这样「几轮最好」就从拍脑袋变成可复现实验。
过拟合信号清单
- eval 变差而 train 仍很好;
- 对训练集原句极准,换个说法就崩;
- 输出过度模板化,缺乏变化。
对策:减轮数、早停、补更有区分度的样本、加适度 dropout / weight decay。
小结
日志篇解决的是「何时停、选哪份权重」。
语言模型微调实战第 06 篇完。下一篇进入评估:指标怎么选,失败案例如何归因。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 WALL-E's Blog!








