第 5 章 训练技巧、正则化、泛化与评估
5.1 学习目标
- 理解为什么神经网络会过拟合,以及如何通过正则化控制复杂度。
- 掌握常见训练技巧:初始化、标准化、Dropout、BatchNorm、早停、学习率调度。
- 理解训练集、验证集、测试集的角色分工。
- 能用正确的指标评估分类、回归和不平衡任务。
- 能从“曲线”和“指标”判断模型当前是欠拟合、过拟合还是优化失败。
能力矩阵:
| 能力域 | 入门 | 进阶 | 熟练 |
|---|---|---|---|
| 泛化判断 | 会看训练准确率 | 会看验证损失 | 能分析偏差-方差 |
| 正则化 | 知道 L2 / Dropout | 会调参数 | 能选择合适的组合策略 |
| 训练稳定性 | 会改学习率 | 会用初始化与归一化 | 能定位收敛失败原因 |
| 评估 | 会看 accuracy | 会看 F1 / AUC | 能针对业务选指标 |
5.2 什么是泛化
泛化是模型对未见数据表现良好的能力。训练集好不代表泛化好,真正重要的是模型在真实数据上的表现。
5.2.1 经验风险与期望风险
- 经验风险:在训练集上的平均损失
- 期望风险:在真实数据分布上的平均损失
训练的目标通常是最小化经验风险,但我们真正关心的是期望风险。
5.2.2 偏差与方差
- 偏差大:模型太简单,学不够
- 方差大:模型对训练集太敏感,容易过拟合
5.3 数据划分
5.3.1 标准划分
通常把数据分为:
- 训练集:用于更新参数
- 验证集:用于调参与早停
- 测试集:用于最终评估
5.3.2 数据泄漏
如果验证集或测试集信息提前进入训练过程,就会造成数据泄漏。常见例子:
- 用全量数据做标准化再划分
- 用测试集调超参数
- 在特征工程中“偷看”标签分布
5.4 初始化
5.4.1 为什么初始化重要
初始化决定了训练一开始梯度是否合理。太大可能爆炸,太小可能消失。
5.4.2 常见初始化
| 初始化 | 适用场景 | 特点 |
|---|---|---|
| 随机小值 | 早期方法 | 简单但不稳定 |
| Xavier | Sigmoid / Tanh | 保持前后方差平衡 |
| He 初始化 | ReLU 系列 | 更适合 ReLU |
5.4.3 直觉
希望每层输出的方差不要在深度传播中迅速变大或变小,否则训练会很难。
5.5 标准化与归一化
5.5.1 输入标准化
常见做法:
作用:
- 加快收敛
- 减少不同特征尺度差异
- 改善优化条件
5.5.2 BatchNorm
Batch Normalization 在 mini-batch 上做标准化,并引入可学习缩放平移参数。
优点:
- 训练更稳定
- 允许更大学习率
- 缓解梯度问题
5.5.3 LayerNorm
LayerNorm 常用于序列模型和 Transformer 中,对每个样本内部做归一化,而不是跨 batch。
5.6 正则化
5.6.1 L2 正则
效果:压小参数,降低模型复杂度。
5.6.2 L1 正则
效果:鼓励稀疏参数。
5.6.3 Dropout
训练时随机丢弃部分神经元,迫使网络不要过度依赖某几个节点。
训练:随机屏蔽推理:使用完整网络并按比例缩放5.6.4 数据增强
对于图像任务尤其重要,例如:
- 翻转
- 裁剪
- 平移
- 颜色扰动
- 随机遮挡
5.7 早停与模型选择
5.7.1 早停
当验证集指标开始变差时提前停止训练,避免过拟合。
5.7.2 最佳模型保存
不要只保存最后一个 epoch,而要保存验证集表现最好的 checkpoint。
5.7.3 交叉验证
在小数据集上,交叉验证更可靠,但计算成本更高。
5.8 学习率调度
5.8.1 常见策略
- 固定学习率
- Step decay
- Cosine annealing
- Warmup
- Reduce on plateau
5.8.2 作用
学习率调度能帮助模型:
- 前期快速探索
- 后期细致收敛
- 避免卡在震荡区
5.9 评估指标
5.9.1 分类指标
- Accuracy:整体正确率
- Precision:查准率
- Recall:查全率
- F1:精确率与召回率的调和平均
- AUC:阈值无关的区分能力
5.9.2 混淆矩阵
预测正 预测负真实正 TP FN真实负 FP TN5.9.3 回归指标
- MSE
- RMSE
- MAE
5.9.4 不平衡任务
如果类别极不平衡,accuracy 可能具有欺骗性。此时更应关注:
- F1
- Recall
- PR-AUC
- 每类召回率
5.10 训练曲线分析
5.10.1 欠拟合
特征:
- 训练集 loss 高
- 验证集 loss 高
- 模型容量不足或训练不足
5.10.2 过拟合
特征:
- 训练集 loss 很低
- 验证集 loss 开始上升
- 模型记住了噪声
5.10.3 优化失败
特征:
- loss 不降
- loss 震荡
- 梯度异常
- 学习率或初始化可能有问题
5.11 训练排错清单
- 看数据是否正确加载。
- 看标签是否错位。
- 看输入是否做了标准化。
- 看 loss 是否适配任务。
- 看学习率是否过大或过小。
- 看 batch size 是否合理。
- 看是否有梯度爆炸或消失。
- 看是否出现训练集和验证集分布差异。
5.12 从“能跑”到“好用”
一个能训练的模型不等于一个好模型。通常还需要:
- 更好的数据清洗
- 更合理的模型结构
- 更稳的优化器
- 更强的正则化
- 更科学的评估
5.13 本章小结
本章解决的核心问题是:如何让神经网络训练得更稳、更快、更不容易过拟合,并且怎样公平地评价模型是否真的有用。
5.14 课后练习
- 说明训练集、验证集、测试集各自的用途。
- 解释为什么输入标准化常常能加快收敛。
- 说明 Dropout 为什么能缓解过拟合。
- 比较 Accuracy 和 F1 在不平衡任务中的适用性。
- 画出欠拟合、过拟合和优化失败的典型曲线。
5.15 深入正则化技术与实践
5.15.1 权重衰减(Weight Decay)与实现细节
权重衰减通常指在参数更新时对权重做缩放:
在实现上要注意:把权重衰减与自适应优化器(如 Adam)区分开来可以得到更符合正则化语义的效果(即 AdamW)。
5.15.2 DropBlock、Cutout 与高级数据增强
在卷积网络中,局部连续区域遮挡(Cutout)或按块随机丢弃(DropBlock)能增强模型鲁棒性。组合策略(AutoAugment、RandAugment)能进一步提升。
5.15.3 标签平滑(Label Smoothing)
标签平滑在交叉熵中给正确标签一个小的退避值,防止模型过度自信:
它常被用于大型分类任务来提高泛化与校准性。
5.16 大规模训练实践(分布式与混合精度)
在工业级训练中,会遇到以下工程挑战:
- 数据并行/模型并行的选择;
- 同步或异步更新策略;
- 混合精度训练(FP16)以节省内存并加速计算;
- 梯度累积用于模拟大 batch;
- 大 batch 下的学习率缩放(Linear Scaling Rule)。
实用工具:Horovod、PyTorch Distributed、DeepSpeed 等。
5.17 指标监控与模型校准
- 除了常规的 loss/accuracy,还应该监控:精度按类分布、召回率、精度-召回曲线、PR-AUC。
- 模型校准(calibration)检查概率输出是否可信。温度缩放(temperature scaling)是常用的后处理方法。
温度缩放:
在验证集上优化温度 :
调整后概率更接近真实置信度。
5.18 学习率查找器(Learning Rate Finder)实战示例
学习率查找器快速帮你找到一个合理的学习率区间,方法如下:从很小的 lr 开始,每批次按指数增加 lr,记录 loss。
示例代码(PyTorch 风格伪码):
# pseudo-codemodel.train()lr = lr_startfor batch in loader: set_lr(optimizer, lr) loss = model_step(batch) recorder.append(lr, loss) lr *= lr_mult
# 绘制 loss vs lr,选取 loss 开始快速下降前的 lr常用工具:fastai 的 lr_find,也可以自己实现。
5.19 不平衡数据处理与评估策略
当类别极不平衡时:
- 使用采样策略(上采样少数类或下采样多数类);
- 使用加权损失(如 focal loss);
- 使用分层抽样保证每个 batch 包含多类样本;
- 评估时优先查看 per-class recall 与 PR 曲线。
Focal Loss:
它能聚焦难分类样本,减少易分类样本对梯度的主导性。
5.20 训练中的日志与可视化实践
- 使用 TensorBoard 或 WandB 记录训练曲线、参数直方图、梯度范数、学习率曲线。
- 保存混淆矩阵快照以观察类别间混淆关系变化。
- 定期保存并可视化中间层激活与特征图(对 CNN 有帮助)。
示例:记录梯度范数
total_norm = 0for p in model.parameters(): if p.grad is not None: param_norm = p.grad.data.norm(2) total_norm += param_norm.item() ** 2total_norm = total_norm ** 0.5writer.add_scalar('grad_norm', total_norm, step)5.21 部署与监控要点
- 模型导出格式(TorchScript / ONNX / TensorRT)根据部署平台选择。
- 在线监控:输入分布漂移检测、延迟、吞吐量与在线 A/B 测试。
- 灰度发布与回滚机制保证稳定性。
5.22 本章小结
训练技巧不仅仅是一些“窍门”,而是把数学、数值方法与工程实践结合起来的系统。掌握这些技能能让你在训练与部署模型时更有把握。
5.23 课后综合练习
- 用 MNIST 或 CIFAR-10 实现完整训练管线:训练、验证、保存 checkpoint、绘制曲线并写实验报告。
- 在 CIFAR-10 上比较不同正则化组合(weight decay、dropout、data augmentation)的效果,并写总结。
- 实现简单的学习率查找器并用其确定训练初始 lr。
如果這篇文章對你有幫助,歡迎分享給更多人!
部分資訊可能已經過時





















