直觉理解

一个学生把习题册的答案全背下来,习题册上全对,一到考试就不会,这就是过拟合:模型记住了训练数据里的细节甚至噪声,却没学到能推广的规律。反过来,模型太简单、连训练数据都拟合不好,就是欠拟合。正则化是一类「限制模型、防止死记硬背」的手段,目的是提高泛化能力,也就是在新数据上的表现。

定义与公式

如何判断

  • 训练损失低、验证损失高且差距越来越大:过拟合。
  • 训练损失和验证损失都高:可能欠拟合,也可能是优化失败、标签噪声或特征不足;应先排查原因,再考虑模型容量和训练时长。

画出训练和验证损失随训练步数变化的曲线(学习曲线),是最直接的诊断方法。

偏差与方差

在平方损失的经典分解中,期望预测误差由偏差的平方、方差和不可约噪声组成。前两项描述:

  • 偏差:模型太简单,系统性地偏离真实规律,导致欠拟合。
  • 方差:模型对训练数据的具体抽样过于敏感,换一批数据结果就大变,导致过拟合。

传统观点认为模型越复杂方差越大,需要在两者之间折中。但现代深度学习中,参数远多于样本的大模型配合足够的数据与正则化,反而泛化得很好。

L2 正则化与权重衰减

在损失中加入权重的平方和,惩罚过大的权重:

对应的梯度更新会让每个权重每步都按比例缩小一点,因此也叫权重衰减。在 Adam 这类自适应优化器中,两者不再等价,AdamW 采用的是直接对参数做衰减的方式。

L1 正则化

加入权重的绝对值之和 ,倾向于让很多权重恰好变成 0,得到稀疏的模型。

Dropout

训练时每一步随机把一部分神经元的输出置零(比例为 ),并把保留下来的输出放大 倍;推理时不再丢弃。它迫使网络不能依赖某几个特定神经元,相当于同时训练了许多共享参数的子网络。

其他手段

  • 早停:验证损失不再下降时停止训练。
  • 数据增强:对训练数据做变换(图像翻转、裁剪、文本改写等),扩大数据的多样性。
  • 更多且合适的数据:有助于泛化,但重复数据、噪声和分布偏移仍需处理。大模型预训练也会重复采样数据并记忆具体内容,不能用「数据量大」或「只训练一轮」排除过拟合。部分训练配方关闭 Dropout 是特定实验选择,并不构成通用规则;小数据微调尤其需要监控验证集。

代码示例

import torch
import torch.nn as nn
 
drop = nn.Dropout(p=0.5)
x = torch.ones(8)
drop.train(); print(drop(x))   # 约一半置零,其余放大为 2.0
drop.eval();  print(drop(x))   # 推理时原样输出
 
# 权重衰减:在 AdamW 中通过 weight_decay 设置
model = nn.Linear(10, 1)
opt = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)

在 AI 中的作用

参考资料

相关