本节摘要:正则化是在损失函数里加一道"惩罚",让它不敢把训练集死记硬背。本节从"拟合过头"的现象讲起,分布 L1/L2 的区别与效果,再讲 Dropout 的随机放活原理,最后给出"什么时候该加"的决策判据。
上一节给车装了变速器,这节装保险杠。车辆的保险杠不参与引擎动力,但在碰撞时保护车身。正则化也类似:它不直接参与降低损失,但在模型"过于拟合训练集"时拉住它,给它一个"不要过于自信"的惩罚。
过拟合有两个典型信号:训练损失继续下降,验证损失却开始反弹。模型在"背题"而不是"学规律"——它对训练集细节记得太牢,新数据一来就蒙。
正则化干的正是"让模型不敢太浪":它把参数的"大小"写进损失函数,如果模型为了死记某条噪声而把参数撑得很大,损失就会额外涨一截,权衡之下模型会选择"损失小一点但参数也小一点"的折中。
| 正则 | 惩罚形式 | 效果 | 参数形态 |
|---|---|---|---|
| L2 | 权重平方和 | 所有参数均匀收缩 | 趋近小值但不为零 |
| L1 | 权重绝对值之和 | 产生稀疏解 | 部分参数推成0 |
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 系数 λ 在 1e-4 到 1e-2 之间试;Dropout p 通常 0.2~0.5 对隐藏层。
⚠️ 常见坑:Dropout 和 L2 同时加太大,导致"欠拟合而不是过拟合",模型干脆学不动。先 L2 小剂量、再 Dropout 小剂量,逐步加,不要叠两个大剂量。
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 的训练心态很特别:它不是加了一个约束项,而是改变了每次前向的网络本身。以概率 p 丢弃神经元后,你每跑一个样本其实都是在训练一个"瘦了"许多的子网络;整个训练结束时,模型近似于把大量这样的子网络做了"平均推理"。这正是它和 L1/L2"直接在损失或更新上动手"的根本差异。
代价也清晰:推理时你关掉 Dropout,训练时打开,两者前向不同。 不少初学者在推理时忘了切到 eval 模式,导致验证结果忽高忽低,排查半天才发现是 Dropout 还开着。把"训练开、推理关"当成肌肉记忆,是你上手 Dropout 的第一课。
正则的剂量是把双刃剑。加太猛时,训练损失从一开始就压不下去、验证也跟着卡住——这时的曲线看起来和"欠拟合"一模一样,你会忍不住去加容量。但如果你刚把 Dropout 从 0.3 加到 0.7、或把 L2 系数跳到 1e-1,最先该怀疑的其实是"正则把模型掐死了",而不是"模型不够大"。
区分方法很朴素:把正则临时去掉一小半,看训练损失有没有立刻降下去。 有 → 是正则过猛;没有 → 才是容量或优化问题。这个"A/B 快速开关正则"的动作是最便宜的归因试验,强烈推荐写进你的调试工具箱。
一句话收住剂量问题:正则的目的是"让模型在能学会的前提下,别记死细节",而不是"越压制越好"。 实际做法是先跑一个不加正则的干净基线,看它在验证集上何时开始反弹、反弹多狠,再有针对性地加——能不加就不加,加了也不宜一步到位,而是从弱到强逐步试探,直到曲线在训练与验证之间维持一个健康的缺口。这个"缺一点、补一点"的节奏,比一上来就把所有正则拉满要稳妥得多。
保险杠装好了,下一个装配件是刹车——梯度裁剪,专门对付训练中突然的爆炸。