mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13
2544 字
7 分鐘
训练技巧 正则化 泛化与评估
2026-06-03

第 5 章 训练技巧、正则化、泛化与评估#

5.1 学习目标#

  1. 理解为什么神经网络会过拟合,以及如何通过正则化控制复杂度。
  2. 掌握常见训练技巧:初始化、标准化、Dropout、BatchNorm、早停、学习率调度。
  3. 理解训练集、验证集、测试集的角色分工。
  4. 能用正确的指标评估分类、回归和不平衡任务。
  5. 能从“曲线”和“指标”判断模型当前是欠拟合、过拟合还是优化失败。

能力矩阵

能力域入门进阶熟练
泛化判断会看训练准确率会看验证损失能分析偏差-方差
正则化知道 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 常见初始化#

初始化适用场景特点
随机小值早期方法简单但不稳定
XavierSigmoid / Tanh保持前后方差平衡
He 初始化ReLU 系列更适合 ReLU

5.4.3 直觉#

希望每层输出的方差不要在深度传播中迅速变大或变小,否则训练会很难。


5.5 标准化与归一化#

5.5.1 输入标准化#

常见做法:

x=xμσx' = \frac{x - \mu}{\sigma}

作用:

  • 加快收敛
  • 减少不同特征尺度差异
  • 改善优化条件

5.5.2 BatchNorm#

Batch Normalization 在 mini-batch 上做标准化,并引入可学习缩放平移参数。

优点:

  • 训练更稳定
  • 允许更大学习率
  • 缓解梯度问题

5.5.3 LayerNorm#

LayerNorm 常用于序列模型和 Transformer 中,对每个样本内部做归一化,而不是跨 batch。


5.6 正则化#

5.6.1 L2 正则#

L=Ldata+λθ22L = L_{data} + \lambda \|\theta\|_2^2

效果:压小参数,降低模型复杂度。

5.6.2 L1 正则#

L=Ldata+λθ1L = L_{data} + \lambda \|\theta\|_1

效果:鼓励稀疏参数。

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 TN

5.9.3 回归指标#

  • MSE
  • RMSE
  • MAE
  • R2R^2

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 训练排错清单#

  1. 看数据是否正确加载。
  2. 看标签是否错位。
  3. 看输入是否做了标准化。
  4. 看 loss 是否适配任务。
  5. 看学习率是否过大或过小。
  6. 看 batch size 是否合理。
  7. 看是否有梯度爆炸或消失。
  8. 看是否出现训练集和验证集分布差异。

5.12 从“能跑”到“好用”#

一个能训练的模型不等于一个好模型。通常还需要:

  • 更好的数据清洗
  • 更合理的模型结构
  • 更稳的优化器
  • 更强的正则化
  • 更科学的评估

5.13 本章小结#

本章解决的核心问题是:如何让神经网络训练得更稳、更快、更不容易过拟合,并且怎样公平地评价模型是否真的有用。


5.14 课后练习#

  1. 说明训练集、验证集、测试集各自的用途。
  2. 解释为什么输入标准化常常能加快收敛。
  3. 说明 Dropout 为什么能缓解过拟合。
  4. 比较 Accuracy 和 F1 在不平衡任务中的适用性。
  5. 画出欠拟合、过拟合和优化失败的典型曲线。

5.15 深入正则化技术与实践#

5.15.1 权重衰减(Weight Decay)与实现细节#

权重衰减通常指在参数更新时对权重做缩放:

heta(1ηλ)θηg heta \leftarrow (1-\eta\lambda)\theta - \eta g

在实现上要注意:把权重衰减与自适应优化器(如 Adam)区分开来可以得到更符合正则化语义的效果(即 AdamW)。

5.15.2 DropBlock、Cutout 与高级数据增强#

在卷积网络中,局部连续区域遮挡(Cutout)或按块随机丢弃(DropBlock)能增强模型鲁棒性。组合策略(AutoAugment、RandAugment)能进一步提升。

5.15.3 标签平滑(Label Smoothing)#

标签平滑在交叉熵中给正确标签一个小的退避值,防止模型过度自信:

ysmooth=(1ϵ)y+ϵ/Cy_{smooth} = (1-\epsilon) y + \epsilon / C

它常被用于大型分类任务来提高泛化与校准性。


5.16 大规模训练实践(分布式与混合精度)#

在工业级训练中,会遇到以下工程挑战:

  • 数据并行/模型并行的选择;
  • 同步或异步更新策略;
  • 混合精度训练(FP16)以节省内存并加速计算;
  • 梯度累积用于模拟大 batch;
  • 大 batch 下的学习率缩放(Linear Scaling Rule)。

实用工具:Horovod、PyTorch Distributed、DeepSpeed 等。


5.17 指标监控与模型校准#

  1. 除了常规的 loss/accuracy,还应该监控:精度按类分布、召回率、精度-召回曲线、PR-AUC。
  2. 模型校准(calibration)检查概率输出是否可信。温度缩放(temperature scaling)是常用的后处理方法。

温度缩放:

在验证集上优化温度 TT

p^i=softmax(zi/T)\hat{p}_i = \text{softmax}(z_i / T)

调整后概率更接近真实置信度。


5.18 学习率查找器(Learning Rate Finder)实战示例#

学习率查找器快速帮你找到一个合理的学习率区间,方法如下:从很小的 lr 开始,每批次按指数增加 lr,记录 loss。

示例代码(PyTorch 风格伪码):

# pseudo-code
model.train()
lr = lr_start
for 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:

FL(pt)=αt(1pt)γlogptFL(p_t) = -\alpha_t (1-p_t)^{\gamma} \log p_t

它能聚焦难分类样本,减少易分类样本对梯度的主导性。


5.20 训练中的日志与可视化实践#

  1. 使用 TensorBoard 或 WandB 记录训练曲线、参数直方图、梯度范数、学习率曲线。
  2. 保存混淆矩阵快照以观察类别间混淆关系变化。
  3. 定期保存并可视化中间层激活与特征图(对 CNN 有帮助)。

示例:记录梯度范数

total_norm = 0
for p in model.parameters():
if p.grad is not None:
param_norm = p.grad.data.norm(2)
total_norm += param_norm.item() ** 2
total_norm = total_norm ** 0.5
writer.add_scalar('grad_norm', total_norm, step)

5.21 部署与监控要点#

  1. 模型导出格式(TorchScript / ONNX / TensorRT)根据部署平台选择。
  2. 在线监控:输入分布漂移检测、延迟、吞吐量与在线 A/B 测试。
  3. 灰度发布与回滚机制保证稳定性。

5.22 本章小结#

训练技巧不仅仅是一些“窍门”,而是把数学、数值方法与工程实践结合起来的系统。掌握这些技能能让你在训练与部署模型时更有把握。


5.23 课后综合练习#

  1. 用 MNIST 或 CIFAR-10 实现完整训练管线:训练、验证、保存 checkpoint、绘制曲线并写实验报告。
  2. 在 CIFAR-10 上比较不同正则化组合(weight decay、dropout、data augmentation)的效果,并写总结。
  3. 实现简单的学习率查找器并用其确定训练初始 lr。
分享

如果這篇文章對你有幫助,歡迎分享給更多人!

训练技巧 正则化 泛化与评估
https://lemusakuya.com/posts/study-notes/neural-networks/05_训练技巧_正则化_泛化与评估/
作者
レム・咲く夜
發布於
2026-06-03
許可協議
CC BY-NC-SA 4.0

部分資訊可能已經過時

目錄