外观
深度学习评估与实验
一句话定义:评估是回答"模型到底好不好"的唯一手段,而实验纪律决定评估是否可信。训练损失告诉你"模型背没背下来",评估指标才告诉你"模型能不能泛化"。两者的落差、如何弥合,正是损失函数与输出层与本文的分工。
一、训练/验证/测试三集划分与数据泄漏防线
标准做法是把数据切成三份:
- 训练集(train):训练时可见,用于更新参数。
- 验证集(validation):训练中反复使用——选超参数、早停、选模型。因为被用了几十上百次,它已"被污染",不再能代表真实泛化。
- 测试集(test):只能碰一次。最终模型定稿后,用它报一次成绩,然后不得再回头调参。
**数据泄漏(data leakage)**就是"测试信息渗入训练过程",是评估失效的头号原因。常见泄漏形式:
- 前处理在全量数据上做:用全量统计量归一化(均值/方差在测试集上算过),标准化、PCA、插补都必须在训练集上拟合、再应用到验证/测试集。
- 同源样本跨集:同一用户/同一视频的画面被分到训练和测试——评估显得虚高。按用户/会话/时间划分数据集(见数据工程章节)。
- 调参期偷看测试:测试集反复用,等于它变成了验证集。
泄漏的症状
测试分数异常地高,或"验证在涨、测试也暴涨"到不合常理——先怀疑泄漏而不是模型神勇。完整防线清单见数据工程章节中的"数据泄露类型与防线"一节。
二、过拟合/欠拟合诊断:学习曲线
学习曲线画的是"训练损失/验证损失随训练轮次(或数据量)的变化",一眼就能诊断状态:
- 欠拟合:训练损失和验证损失都高且下降缓慢——模型容量不够或没训到位。对策:加容量、加训练时长,见神经网络基础的容量讨论。
- 过拟合:训练损失持续下降、验证损失先降后升——模型在背训练集。对策:正则化、早停、数据增强、减容量,见过拟合与正则化。
- 理想:两条曲线都低且收敛,间隔小——泛化良好。
用"验证损失升起点"早停(early stopping),是性价比最高的正则化手段。注意:验证集本身也可能被反复早停评估过——所以最终成绩永远在测试集上定夺。
三、分类指标:accuracy、precision、recall、F1、AUC、AP
先定义混淆矩阵的四格:TP(真正例)、FP(假正例)、FN(假负例)、TN(真负例)。
| 指标 | 公式 | 回答的问题 |
|---|---|---|
| Accuracy | (TP+TN)/(全部) | 整体猜对的比例 |
| Precision | TP/(TP+FP) | 说"正"的里面,有多少真对 |
| Recall | TP/(TP+FN) | 真正中,找回来多少(漏报多少) |
| F1 | 2·P·R/(P+R) | P 与 R 的调和平均,兼顾两者 |
| AUC | ROC 曲线下面积 | 随机抽一个正例一个负例,模型给正例更高分的概率 |
| AP | PR 曲线下面积 | 不同阈值下 P 对 R 的积分,检测任务常用 |
类别不平衡时 Accuracy 会骗人:99% 负例的数据集上,全猜负例 Accuracy=99%,模型毫无价值。此时应看 precision/recall/F1、AUC,或改用加权/重采样训练(结合损失函数与输出层中的 Focal Loss)。
选择指标的三条经验:
- 成本不对称时别用 Accuracy:医疗筛查漏诊(低 recall)代价高,要看 recall;反垃圾邮件误伤(低 precision)代价高,要看 precision。
- AUC 只看排序能力,对预测概率的校准不敏感;需要"概率准"时看 Brier score 或校准曲线。
- 检测/检索任务(多框、多文档)用 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 概率等)搜索的三种主流方式:
- 网格搜索(Grid):笛卡尔积枚举。简单但维度一高就爆炸,不推荐超过 3 维。
- 随机搜索(Random):在每个超参数的先验分布上随机采样。Bergstra & Bengio 2012 年证明:随机搜索比同预算网格搜索更高效——因为很多超参数对结果的影响是"少数关键参数主导"的,随机采样能更充分地探索关键维度。
- 贝叶斯优化(Bayesian):用高斯过程等代理模型引导搜索,在关键区域加密采样。代表工具 Optuna/Weights & Biases Sweeps。维度高、单次训练贵时最划算。
实验管理的基本功(做不到就谈不上可信研究):
- 固定随机种子:PyTorch 里
torch.manual_seed+random.seed+numpy.random.seed,并关掉不确定性算子(或记录其影响)。 - 记录一切:代码版本、数据版本、超参数、环境、seed、每个 epoch 的指标。可自动化的基础设施见MLOps 与模型部署。
- 对照组同设置:只改一个变量,其余全部冻结。这是所有结论可信度的根基。
七、baseline 纪律
先跑一个能跑通的最简 baseline,再谈创新。 三条硬纪律:
- 朴素基线永远要有:对分类,多数类(majority class);对回归,均值预测;对时间序列,前值预测。你的模型如果打不过"全猜多数类",说明评估本身或数据有问题。
- 跑已发表模型做参照:用标准库复现一个公开模型(如 ResNet、BERT 的开源权重),在同一数据、同一指标下对齐论文数字——对齐过程本身就是检查实现是否正确。
- 先小后大:先在小数据/小模型上把流程跑通(见渐进式教程),再上规模。规模上去了,改动定位会非常难。
八、评估常见陷阱
- 只报最好一次,不报均值±方差:换 seed 训练多次,报均值与方差。单次结果可能是运气。
- 测试集反复使用:调参碰过测试集,"测试集"就不存在了。
- 指标挑着报:F1 不行报 accuracy,不行报 AUC——要预注册(pre-register)主指标。
- 忽略计算开销:报告 FLOPS/延迟/参数量,否则"好"无从比较。部署相关指标见MLOps 与模型部署。
- 分布外(OOD)未考虑:测试集与训练同分布,真实部署会遇到新分布。数据划分与分布漂移的讨论见数据工程章节。
权衡与取舍
验证集规模 vs 训练可用数据:验证集越大,超参数选择越可靠,但留给训练的越少。经验法则:1000 类以下图像分类 5%–10% 作验证即可;数据稀缺时用交叉验证(代价是训练次数×k)。
指标全面性 vs 可解释性:AUC/FID 等综合指标好比较但难定位问题;per-class 指标、坏例抽样能定位但信息碎。先全面、再定位——主指标一个,诊断指标一堆。
实验严谨性 vs 迭代速度:记录每样东西拖慢节奏,但不记录等于没做。折中:把"可复现模板"固化成脚本,跑实验只是填参数,见训练配方与调参。
评估决定项目走向:数据要不要补、模型要不要换、能不能上线。把评估做扎实,比堆模型更值钱。常用评估库与公开数据基准见数据集与工具档案,评估相关术语见术语表。
延伸阅读
- 优化与梯度下降——超参数与训练配方的优化视角
- 过拟合与正则化——学习曲线读出的问题怎么治
- 常见陷阱与反模式——评估与实验的常见错误
- 数据集与工具档案——公开基准与评估工具
- 从零构建一个深度学习项目——评估贯穿项目全流程
- 训练配方与调参——可复现实验的工程化
参考资料
- Bergstra, Bengio. Random Search for Hyper-Parameter Optimization (2012)
- Heusel et al. GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium (2017, 提出 FID)
- Salimans et al. Improved Techniques for Training GANs (2016, 提出 IS)
- Sokolova, Lapalme. A systematic analysis of performance measures for classification tasks (2009)
- scikit-learn metrics 文档