5.2 正则化:给过拟合上保险


5.2 正则化:给过拟合上保险

本节摘要:正则化是在损失函数里加一道"惩罚",让它不敢把训练集死记硬背。本节从"拟合过头"的现象讲起,分布 L1/L2 的区别与效果,再讲 Dropout 的随机放活原理,最后给出"什么时候该加"的决策判据。

上一节给车装了变速器,这节装保险杠。车辆的保险杠不参与引擎动力,但在碰撞时保护车身。正则化也类似:它不直接参与降低损失,但在模型"过于拟合训练集"时拉住它,给它一个"不要过于自信"的惩罚。

一、过拟合:会背题但不会解题

过拟合有两个典型信号:训练损失继续下降,验证损失却开始反弹。模型在"背题"而不是"学规律"——它对训练集细节记得太牢,新数据一来就蒙。

正则化干的正是"让模型不敢太浪":它把参数的"大小"写进损失函数,如果模型为了死记某条噪声而把参数撑得很大,损失就会额外涨一截,权衡之下模型会选择"损失小一点但参数也小一点"的折中。

二、L1 与 L2:两种"惩罚"性格

  • L2 正则化(权重衰减):在损失上加 λ·Σ‖w‖²。它惩罚"撑大的参数",但不会把参数压到绝对 0,只让它趋近小值。等价于每步更新时额外减去一小部分权重(所以叫"权重衰减")。
  • L1 正则化(Lasso):在损失上加 λ·Σ|w|。它惩罚绝对值,能产生稀疏解——很多参数被推成 0。这意味着特征选择,L1 会直接把不重要的参数清零。
正则 惩罚形式 效果 参数形态
L2 权重平方和 所有参数均匀收缩 趋近小值但不为零
L1 权重绝对值之和 产生稀疏解 部分参数推成0

三、Dropout:随机放活神经元

Dropout 的思路跟 L1/L2 完全不同:每次前向时,以概率 p 随机"丢弃"一部分神经元,只让剩余部分参与计算与反向。这迫使网络不能依赖任何单个神经元,而必须在分散的冗余表达上做决策——相当于每次训练一个不同的子网络,最后隐式地"平均"了这些子网络。

训练时打开 Dropout,推理时关闭。这是它跟 L1/L2 最大的操作差异。

# 概念片段:Dropout 的前向示意 import random def dropout_forward(x, p=0.5): # 训练时,以概率 p 把神经元置零,再乘以 1/(1-p) 保持期望 mask = [1 if random.random() > p else 0 for _ in x] scale = 1.0 / (1.0 - p) return [v * m * scale for v, m in zip(x, mask)]

四、什么时候该加正则、加多少

正则不是越小越好,也不是越大越好。过小时它压不住过拟合,过大时它把模型拖入欠拟合。

判断以验证集曲线为准:

  • 验证损失开始反弹(训练损失继续降)→ 加正则(L2 或 Dropout,别同时加太大)。
  • 训练损失和验证损失都不降(欠拟合)→ 先减正则或去除 Dropout,让模型有能力学。
  • 先不加正则跑一个基线,看到过拟合苗头再逐步加。

常用 L2 系数 λ 在 1e-4 到 1e-2 之间试;Dropout p 通常 0.2~0.5 对隐藏层。

⚠️ 常见坑:Dropout 和 L2 同时加太大,导致"欠拟合而不是过拟合",模型干脆学不动。先 L2 小剂量、再 Dropout 小剂量,逐步加,不要叠两个大剂量。

六、L2 为什么叫"权重衰减":一个数说清

L2 正则化在损失上加 λ·Σw²,它真正的效果发生在更新那一步——把梯度贡献进参数更新后,每一次都会额外把 w 乘上一个小于 1 的比例,也就是"每次更新都在给权重打一个折扣"。这也是它被叫"权重衰减"的原因:L2 是在更新规则里定期给权重缩水,而不仅是概念上的惩罚。

# 概念片段:L2 在更新里的"缩水"本质 lr = 0.01 weight_decay = 0.0005 w = 1.0 for _ in range(5): w = w - lr * (grad(w) + weight_decay * w) # 除了沿梯度走,每次还多扣一小份 weight_decay*w

别把 L2 当"给损失加个皮",它最终改变的是每步更新的实际轨迹。理解这一层,你就能解释为什么"加一点 L2"常常让训练更稳——它每步都在约束权重的膨胀。

七、Dropout 的"以退为进":每次训练一个不同的子网络

Dropout 的训练心态很特别:它不是加了一个约束项,而是改变了每次前向的网络本身。以概率 p 丢弃神经元后,你每跑一个样本其实都是在训练一个"瘦了"许多的子网络;整个训练结束时,模型近似于把大量这样的子网络做了"平均推理"。这正是它和 L1/L2"直接在损失或更新上动手"的根本差异。

代价也清晰:推理时你关掉 Dropout,训练时打开,两者前向不同。 不少初学者在推理时忘了切到 eval 模式,导致验证结果忽高忽低,排查半天才发现是 Dropout 还开着。把"训练开、推理关"当成肌肉记忆,是你上手 Dropout 的第一课。

八、正则太强,你会看到"欠拟合的骗局"

正则的剂量是把双刃剑。加太猛时,训练损失从一开始就压不下去、验证也跟着卡住——这时的曲线看起来和"欠拟合"一模一样,你会忍不住去加容量。但如果你刚把 Dropout 从 0.3 加到 0.7、或把 L2 系数跳到 1e-1,最先该怀疑的其实是"正则把模型掐死了",而不是"模型不够大"。

区分方法很朴素:把正则临时去掉一小半,看训练损失有没有立刻降下去。 有 → 是正则过猛;没有 → 才是容量或优化问题。这个"A/B 快速开关正则"的动作是最便宜的归因试验,强烈推荐写进你的调试工具箱。

九、加正则的正确剂量哲学

一句话收住剂量问题:正则的目的是"让模型在能学会的前提下,别记死细节",而不是"越压制越好"。 实际做法是先跑一个不加正则的干净基线,看它在验证集上何时开始反弹、反弹多狠,再有针对性地加——能不加就不加,加了也不宜一步到位,而是从弱到强逐步试探,直到曲线在训练与验证之间维持一个健康的缺口。这个"缺一点、补一点"的节奏,比一上来就把所有正则拉满要稳妥得多。

本节要点回顾

  • 正则化不是减少损失,是防止死记硬背:它在损失上加一道"参数太大也要罚"的条款。
  • L2 均匀收缩:所有参数变小,是"权重衰减"的常见形式。
  • L1 稀疏解:部分参数归零,自带特征选择。
  • Dropout 随机放活:每个子网络独立决策,最后隐式平均。
  • 过拟合才加:验证损失反弹是信号;先 L2 基础、再补 Dropout,逐步加量。
  • 欠拟合则减:训练损失也不降时,先减正则。

保险杠装好了,下一个装配件是刹车——梯度裁剪,专门对付训练中突然的爆炸。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U