1. 过拟合与欠拟合

欠拟合

模型在训练集和验证集上效果都较差。

常见原因:

  • 模型能力不足
  • 训练轮数不足
  • 学习率不合适
  • 输入特征不足
  • 数据或标签存在严重问题
  • 正则化过强

过拟合

模型在训练集上效果很好,但在验证集或测试集上效果明显较差。

常见原因:

  • 训练数据太少
  • 模型过于复杂
  • 训练轮数过多
  • 数据噪声或错误标签较多
  • 训练集不能代表真实场景
  • 训练集和验证集分布差异较大
  • 模型记住了背景、设备编号等无关特征

例如猫狗分类模型可能错误地学到:

室内背景 → 猫
草地背景 → 狗

而没有真正学习猫和狗本身的特征。

典型曲线:

训练损失持续下降
验证损失先下降,随后上升

这通常表示模型从某个 epoch 开始出现过拟合。


2. 正则化

正则化是一组用于降低过拟合风险、提高泛化能力的方法。

常见方法:

  • L1正则化
  • L2正则化
  • 权重衰减
  • Dropout
  • 数据增强
  • Early Stopping
  • 降低模型复杂度
  • 增加训练数据
  • Label Smoothing

(1) L1正则化

在原始损失函数上增加权重绝对值之和:

loss = loss0 + λ * Σ|w|

特点:

  • 对非零权重施加相对稳定的收缩作用
  • 容易让部分权重变成0
  • 可以产生稀疏模型
  • 在一定程度上具有特征选择作用

(2) L2正则化

在原始损失函数上增加权重平方和:

loss = loss0 + λ * Σw^2

特点:

  • 权重越大,惩罚越强
  • 通常不会直接让大量权重变为0
  • 会让权重整体变得更加平滑、均匀
  • 减少模型对某些单一特征的过度依赖

例如原始梯度为3:

w = 10
lr = 0.1
gradient = 3

普通更新:
w_new = 10 - 0.1 * 3
      = 9.7

加入L2正则化后,假设 λ=0.1:

loss = loss0 + λ*w^2

新的梯度:
gradient_total = 3 + 2*λ*w
               = 3 + 2*0.1*10
               = 5

w_new = 10 - 0.1*5
      = 9.5

L2项额外推动权重向0缩小。

较大的权重可能使模型对输入变化更加敏感,但“权重大”不等于一定过拟合,只能看作一种风险因素。

(3) 权重衰减

权重衰减直接在参数更新过程中缩小权重:

w_new = (1 - lr*wd)*w - lr*gradient

其中:

  • lr:学习率
  • wd:权重衰减系数

它相当于先把权重乘以一个略小于1的数,再进行梯度更新。

对于普通 SGD,L2正则化与权重衰减在一定条件下近似等价;对于 Adam 等自适应优化器,两者通常并不完全等价。

(4) Dropout

Dropout是一种针对神经网络结构的正则化方法。

训练时:

  • 按照一定概率随机关闭部分神经元
  • 每个 batch 被关闭的神经元可能不同
  • 防止网络过度依赖少数神经元或特征

推理时:

  • 使用完整网络
  • 主流框架通常在训练阶段自动完成缩放,因此推理阶段不需要手动调整

例如:

原始神经元:
A B C D E

某次训练:
A × C × E

下一次训练:
× B C D ×

Dropout迫使网络学习更加分散、鲁棒的特征。

总结:

  • L1、L2:在损失函数层面约束参数
  • Weight Decay:在参数更新层面缩小权重
  • Dropout:在网络结构层面随机关闭神经元
  • 数据增强:在输入数据层面增加变化
  • Early Stopping:在训练过程层面提前停止
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐