正则化:dropout 与 weight decay
这些手段故意让模型在训练数据上拟合得更差,好让它在没见过的数据上表现更好。给模型加障碍为什么有用。
正则化乍看是个怪想法:你故意让模型在训练数据上拟合得更差,好让它在其他一切上表现得更好。这是一种刻意加上的障碍,弄懂它为什么有用,就等于弄懂了训练这件事的核心。
它要解决的问题是过拟合——模型把训练集连同噪声一起背了下来,遇到新东西就失灵。正则化就是对抗这一现象的一类手段。
加障碍为什么有用
大模型的容量极大。参数足够多时,它能完美拟合训练数据,连那些再也不会重现的偶然怪癖都拟合进去。而这种完美拟合恰恰就是失败:它学到的是具体样例,不是通用规律。
正则化限制了模型能在单个样本或单个特征上花掉多少容量。让记忆变难,就逼着它去找更简单、更通用的解释——因为记忆被限制住之后,简单的规律是唯一还管用的东西。
好记的说法是:正则化用一点训练准确率,换大量的泛化。你在已有的数据上损失拟合,换取在没有的数据上的表现。
Weight decay:偏好小权重
weight decay 在损失上加一项惩罚,大小与模型权重的规模成正比。于是模型同时最小化两件事:原本的误差,以及自身参数的幅值。
效果就是一股恒定而温和的力,把权重往小了推。权重一大,模型就会对输入的细微差别做出剧烈反应——这正是拟合噪声的标志。把权重压小,就逼出更平滑、更稳定的响应,依赖的是大范围的规律,而不是对个别特征的剧烈反应。
这股力的大小由一个强度参数控制。太大,模型被约束过头,变成欠拟合——连真实的规律都抓不住。太小,等于没有。它又是一个需要调的旋钮。
Dropout:别依赖任何单一路径
dropout 走的是另一条路。每个训练步骤中,它随机关掉一部分神经元——这些神经元在该步输出零,就像不存在一样。
后果是:网络永远不能依赖某个特定神经元一定在场,因为任何一步它都可能不在。所以它建不起那种脆弱的链条——让某一个单元独自承担某个特征的全部工作。它被迫把每个学到的模式分散到许多冗余路径上,哪一条都能承载它。
这种冗余就是泛化能力的来源。用多种方式编码的模式很结实,挂在一个神经元上的模式很脆。dropout 还相当于在训练一个巨型集成——许多共享权重、彼此略有差异的网络,而集成比其中任何一个成员都更擅长泛化。
关键细节:dropout 在训练时开启,在推理时关闭。 服务时你要的是完整的网络。忘了关掉它是个真实存在的 bug,会悄无声息地拉低输出质量。
你可能没把它当正则化的那些做法
有几个常规做法其实是伪装的正则化,值得认出来,这样你才知道它们到底在干什么:
早停。 盯着验证损失,一旦它开始上升就停,哪怕训练损失还在下降。这个分叉就是过拟合的开始;在那里停下就把它掐住了。这是最简单的正则化手段,而且往往最有效。
数据增强。 对训练样本做变换——裁剪图像、改述文本——让模型看到更多变化。有效的变化越多,能用来死记具体细节的空间就越小。
更多数据。 最强的正则化手段。模型背不完它没穷尽的东西。能拿到更多真实数据时,它胜过上面每一种技巧。
更小的模型。 容量小,过拟合的空间就小。有时候最合适的正则化就是参数少一点。
这些做法的共同规律是:提高信号与容量之比,手段可以是加约束、加数据,或者减参数。
多少才算合适
正则化的强度不是理论算出来的,而是由训练与验证表现的差距决定的——而这个诊断只有在做了像样的验证集切分之后才能做。
- 差距大(训练好,验证差)→ 过拟合 → 加大正则化。
- 两边都差,且挨得近 → 欠拟合 → 减小正则化,或者换个更大的模型。
追的是那个差距,不是绝对数字。目标是验证表现最好,而这通常意味着有意接受不完美的训练表现。
要点回顾
- 正则化刻意限制模型死记硬背的容量,用训练准确率换泛化。
- Weight decay 惩罚大权重,逼出依赖大范围规律的更平滑的响应。
- Dropout 在训练时随机禁用神经元,让任何单一路径都不成为承重墙——推理时必须关掉。
- 早停、数据增强、更多数据、更小的模型,都是换了名字的正则化;其中更多数据最强。
- 强度靠追训练-验证差距来定,不是看绝对准确率。
下一篇: 迁移学习