直觉理解
一个学生把习题册的答案全背下来,习题册上全对,一到考试就不会,这就是过拟合:模型记住了训练数据里的细节甚至噪声,却没学到能推广的规律。反过来,模型太简单、连训练数据都拟合不好,就是欠拟合。正则化是一类「限制模型、防止死记硬背」的手段,目的是提高泛化能力,也就是在新数据上的表现。
定义与公式
如何判断
- 训练损失低、验证损失高且差距越来越大:过拟合。
- 训练损失和验证损失都高:可能欠拟合,也可能是优化失败、标签噪声或特征不足;应先排查原因,再考虑模型容量和训练时长。
画出训练和验证损失随训练步数变化的曲线(学习曲线),是最直接的诊断方法。
偏差与方差
在平方损失的经典分解中,期望预测误差由偏差的平方、方差和不可约噪声组成。前两项描述:
- 偏差:模型太简单,系统性地偏离真实规律,导致欠拟合。
- 方差:模型对训练数据的具体抽样过于敏感,换一批数据结果就大变,导致过拟合。
传统观点认为模型越复杂方差越大,需要在两者之间折中。但现代深度学习中,参数远多于样本的大模型配合足够的数据与正则化,反而泛化得很好。
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 中的作用
- 在小数据上微调大模型时,容易过拟合和遗忘,LoRA 等参数高效微调本身也有正则化作用,见指令微调与偏好优化。
- 训练数据与评测数据重叠会导致「虚假的泛化」,见数据构建与清洗。
- 权重衰减是训练大模型时的标准配置,见优化器、学习率调度与混合精度。