Skip to content

深度学习评估与实验

本页速览 没有可靠的评估,深度学习项目就无法前进。本文覆盖三集划分与数据泄漏防线、学习曲线诊断、分类/回归/生成三类指标、超参数搜索与实验管理、baseline 纪律,并剖析评估中最常见的陷阱。

深度学习评估与实验

一句话定义:评估是回答"模型到底好不好"的唯一手段,而实验纪律决定评估是否可信。训练损失告诉你"模型背没背下来",评估指标才告诉你"模型能不能泛化"。两者的落差、如何弥合,正是损失函数与输出层与本文的分工。

一、训练/验证/测试三集划分与数据泄漏防线

标准做法是把数据切成三份:

  • 训练集(train):训练时可见,用于更新参数。
  • 验证集(validation):训练中反复使用——选超参数、早停、选模型。因为被用了几十上百次,它已"被污染",不再能代表真实泛化。
  • 测试集(test)只能碰一次。最终模型定稿后,用它报一次成绩,然后不得再回头调参。

**数据泄漏(data leakage)**就是"测试信息渗入训练过程",是评估失效的头号原因。常见泄漏形式:

  • 前处理在全量数据上做:用全量统计量归一化(均值/方差在测试集上算过),标准化、PCA、插补都必须在训练集上拟合、再应用到验证/测试集
  • 同源样本跨集:同一用户/同一视频的画面被分到训练和测试——评估显得虚高。按用户/会话/时间划分数据集(见数据工程章节)。
  • 调参期偷看测试:测试集反复用,等于它变成了验证集。

泄漏的症状

测试分数异常地高,或"验证在涨、测试也暴涨"到不合常理——先怀疑泄漏而不是模型神勇。完整防线清单见数据工程章节中的"数据泄露类型与防线"一节。

二、过拟合/欠拟合诊断:学习曲线

学习曲线画的是"训练损失/验证损失随训练轮次(或数据量)的变化",一眼就能诊断状态:

  • 欠拟合:训练损失和验证损失都高且下降缓慢——模型容量不够或没训到位。对策:加容量、加训练时长,见神经网络基础的容量讨论。
  • 过拟合:训练损失持续下降、验证损失先降后升——模型在背训练集。对策:正则化、早停、数据增强、减容量,见过拟合与正则化
  • 理想:两条曲线都低且收敛,间隔小——泛化良好。

用"验证损失升起点"早停(early stopping),是性价比最高的正则化手段。注意:验证集本身也可能被反复早停评估过——所以最终成绩永远在测试集上定夺。

三、分类指标:accuracy、precision、recall、F1、AUC、AP

先定义混淆矩阵的四格:TP(真正例)、FP(假正例)、FN(假负例)、TN(真负例)。

指标公式回答的问题
Accuracy(TP+TN)/(全部)整体猜对的比例
PrecisionTP/(TP+FP)说"正"的里面,有多少真对
RecallTP/(TP+FN)真正中,找回来多少(漏报多少)
F12·P·R/(P+R)P 与 R 的调和平均,兼顾两者
AUCROC 曲线下面积随机抽一个正例一个负例,模型给正例更高分的概率
APPR 曲线下面积不同阈值下 P 对 R 的积分,检测任务常用

类别不平衡时 Accuracy 会骗人:99% 负例的数据集上,全猜负例 Accuracy=99%,模型毫无价值。此时应看 precision/recall/F1、AUC,或改用加权/重采样训练(结合损失函数与输出层中的 Focal Loss)。

选择指标的三条经验:

  1. 成本不对称时别用 Accuracy:医疗筛查漏诊(低 recall)代价高,要看 recall;反垃圾邮件误伤(低 precision)代价高,要看 precision。
  2. AUC 只看排序能力,对预测概率的校准不敏感;需要"概率准"时看 Brier score 或校准曲线。
  3. 检测/检索任务(多框、多文档)用 AP/mAP 更合适。更多落地口径见评估实践

四、回归指标:MSE、MAE、R²

  • MSE:惩罚大误差,敏感异常值,单位是平方。
  • MAE:鲁棒,单位同原量纲,更可解释。
  • R²(决定系数)1 − SSE/SST,解释"模型相比均值基线好多少"。R²=0 等价于"预测全用均值";负数说明模型比均值基线还差。它无量纲,跨任务可比。

回归评估的原则:指标要与损失、业务目标一致。训练用 Huber(见损失函数章节)但评估只报 MSE,会掩盖异常值问题——先想清楚"业务上哪类误差最痛"。

五、生成模型评估:FID、IS、NLL

生成模型(GAN、扩散、LLM)的评估更难:没有 ground-truth 的"对错"。主流指标:

  • NLL(负对数似然):模型给真实数据的平均概率。对显式密度模型(VAE、自回归)可直接算,是"拟合质量"的金标准之一,见生成式模型
  • IS(Inception Score,2016):用 Inception-v3 分类器衡量"生成样本是否清晰(类别熵低)且多样(类别分布熵高)"。弱点:只测分布内类别,且对模式坍缩不敏感。
  • FID(Fréchet Inception Distance,2017):比较真实图与生成图在 Inception 特征空间的两个高斯分布之间的距离(均值+协方差)。对模式坍缩和模糊更敏感,是当前图像生成的事实标准。注意 FID 也有偏置——样本数太少时不稳。
  • 人工评估:LLM 评测经常落到人工打分与偏好(RLHF 用人类偏好,见深度强化学习),成本高、难复现,但至今不可完全替代。

生成评估的原则

多指标交叉验证:单一指标都会被"刷分"。图像生成报 FID+IS+人工抽检,文本生成报困惑度+人工+下游任务。指标选择与口径讨论见评估实践

六、超参数搜索与实验管理

超参数(学习率、batch size、层数、dropout 概率等)搜索的三种主流方式:

  1. 网格搜索(Grid):笛卡尔积枚举。简单但维度一高就爆炸,不推荐超过 3 维。
  2. 随机搜索(Random):在每个超参数的先验分布上随机采样。Bergstra & Bengio 2012 年证明:随机搜索比同预算网格搜索更高效——因为很多超参数对结果的影响是"少数关键参数主导"的,随机采样能更充分地探索关键维度。
  3. 贝叶斯优化(Bayesian):用高斯过程等代理模型引导搜索,在关键区域加密采样。代表工具 Optuna/Weights & Biases Sweeps。维度高、单次训练贵时最划算。

实验管理的基本功(做不到就谈不上可信研究):

  • 固定随机种子:PyTorch 里 torch.manual_seed + random.seed + numpy.random.seed,并关掉不确定性算子(或记录其影响)。
  • 记录一切:代码版本、数据版本、超参数、环境、seed、每个 epoch 的指标。可自动化的基础设施见MLOps 与模型部署
  • 对照组同设置:只改一个变量,其余全部冻结。这是所有结论可信度的根基。

七、baseline 纪律

先跑一个能跑通的最简 baseline,再谈创新。 三条硬纪律:

  1. 朴素基线永远要有:对分类,多数类(majority class);对回归,均值预测;对时间序列,前值预测。你的模型如果打不过"全猜多数类",说明评估本身或数据有问题。
  2. 跑已发表模型做参照:用标准库复现一个公开模型(如 ResNet、BERT 的开源权重),在同一数据、同一指标下对齐论文数字——对齐过程本身就是检查实现是否正确。
  3. 先小后大:先在小数据/小模型上把流程跑通(见渐进式教程),再上规模。规模上去了,改动定位会非常难。

八、评估常见陷阱

  • 只报最好一次,不报均值±方差:换 seed 训练多次,报均值与方差。单次结果可能是运气。
  • 测试集反复使用:调参碰过测试集,"测试集"就不存在了。
  • 指标挑着报:F1 不行报 accuracy,不行报 AUC——要预注册(pre-register)主指标。
  • 忽略计算开销:报告 FLOPS/延迟/参数量,否则"好"无从比较。部署相关指标见MLOps 与模型部署
  • 分布外(OOD)未考虑:测试集与训练同分布,真实部署会遇到新分布。数据划分与分布漂移的讨论见数据工程章节。

权衡与取舍

验证集规模 vs 训练可用数据:验证集越大,超参数选择越可靠,但留给训练的越少。经验法则:1000 类以下图像分类 5%–10% 作验证即可;数据稀缺时用交叉验证(代价是训练次数×k)。

指标全面性 vs 可解释性:AUC/FID 等综合指标好比较但难定位问题;per-class 指标、坏例抽样能定位但信息碎。先全面、再定位——主指标一个,诊断指标一堆。

实验严谨性 vs 迭代速度:记录每样东西拖慢节奏,但不记录等于没做。折中:把"可复现模板"固化成脚本,跑实验只是填参数,见训练配方与调参

评估决定项目走向:数据要不要补、模型要不要换、能不能上线。把评估做扎实,比堆模型更值钱。常用评估库与公开数据基准见数据集与工具档案,评估相关术语见术语表

延伸阅读

参考资料