深度学习学习笔记:过拟合与模型评估

一个模型在训练集上表现很好,并不代表它学会了可以迁移的规律。它也可能只是记住了训练样本。

三种数据划分的职责

  • 训练集用于更新模型参数;
  • 验证集用于选择模型、调整超参数和决定何时停止;
  • 测试集只用于最后一次相对独立的评估。

如果反复根据测试集结果调整模型,测试集实际上已经参与了训练决策,最终指标会过于乐观。

如何识别过拟合

典型现象是训练损失持续下降,而验证损失停止下降甚至开始上升。也可能表现为训练指标远高于验证指标。

可以同时画出两条曲线:

1
2
3
4
5
plt.plot(train_loss, label="train")
plt.plot(valid_loss, label="validation")
plt.xlabel("epoch")
plt.ylabel("loss")
plt.legend()

曲线比单个最终数字提供更多信息:模型何时开始过拟合、训练是否稳定、学习率是否合适,都可能从趋势中看出来。

常见缓解方式

  1. 增加有代表性的训练数据;
  2. 降低模型复杂度;
  3. 使用权重衰减、Dropout 等正则化;
  4. 使用合理的数据增强;
  5. 根据验证集进行早停;
  6. 用交叉验证评估结果稳定性。

这些方法不是越多越好。应先定位过拟合来自数据量、标签质量、模型容量还是划分方式,再选择对应策略。

警惕数据泄漏

数据泄漏是比过拟合更隐蔽的问题。例如在划分训练集之前对全部数据计算标准化参数,或让同一来源的高度相似样本同时出现在训练集和测试集。

正确原则是:任何从数据中“学到”的处理,都应只在训练集上拟合,再应用到验证集和测试集。

不要只看一个指标

类别不平衡时,准确率可能掩盖少数类别的失败。可以结合精确率、召回率、F1、混淆矩阵或与任务更匹配的指标。

指标选择应从实际错误成本出发:哪一种错误更严重,模型最终需要支持什么决策?

让评估可以复现

保存数据划分、随机种子、预处理步骤、模型配置和评价代码。多次重复训练并报告波动范围,通常比只展示最好的一次结果更可信。

可靠评估不是训练完成后的附加步骤,而是建模过程从一开始就要遵守的设计原则。

继续阅读与公开资源