一句话说清:权重衰减就是在每次更新参数时,顺手把参数往 0 的方向拉一点点,让模型的权重不会长得太大——这是一种朴素但极其常用的防过拟合(overfitting)手段。
它到底做了什么
训练模型时,我们本来只想让损失函数(loss)变小。权重衰减会额外加一条规矩:参数越大,"罚"得越多。数学上就是在损失里补一项和权重平方成正比的东西,于是求梯度时会多出 λw 这一项(λ 是衰减强度)。更新公式大致变成:新权重 = 旧权重 − 学习率 ×(原本的梯度 + λ × 旧权重)。换句话说,每一步除了"朝着降低误差的方向走",还额外被按比例缩小了一点点。缩得很轻,但持续不断,所以叫"衰减"。
打个比方
想象你在调一台有很多旋钮的设备。如果允许旋钮随便拧到极限,你可能把每个训练样本都调到"完美",但换一批新数据就失灵了——这就是过拟合。权重衰减像给每个旋钮装了一根很松的皮筋:你还能拧,但拧得越偏,皮筋往回拉的力越大。结果是模型更愿意用"温和、折中"的参数组合去解释数据,而不是靠几个极端的大参数硬记噪声。
和相邻概念的区别
| 概念 | 动的是什么 | 与权重衰减的关系 |
|---|---|---|
| L2 正则化 | 在损失里加权重平方惩罚 | 在最基础的随机梯度下降里,两者数学上等价 |
| 权重衰减 | 直接在更新时缩小权重 | 在 Adam 这类自适应优化器下,两者不再等价,需要"解耦"实现 |
| AI 词典:Dropout">Dropout | 随机丢弃神经元激活 | 另一条防过拟合路线,常与权重衰减叠加使用 |
| 学习率衰减 | 让学习率随训练变小 | 名字像,但对象是学习率,不是权重 |
最容易踩的坑就是把 L2 正则化和权重衰减当成永远同一件事。在用自适应优化器时,把惩罚项直接塞进梯度会被自适应缩放"扭曲",效果和预期不一致。所以工程实现里出现了"解耦"的写法,把权重衰减单独施加在参数上。具体某个框架的默认行为和参数命名,各版本可能有差异,以官方文档为准。
为什么值得关心
对从业者来说,权重衰减通常是训练配置里的一个默认选项:它便宜、稳定、几乎不增加计算量。调它主要看 λ 的大小——太大,模型会变得"胆小",连该学的模式都学不进去,出现欠拟合;太小,等于没开。它往往还要和早停、数据增强、Dropout 一起配合,而不是单打独斗。
对普通职场人,可以这样理解:一个被适度"约束"的模型,不会对训练数据里的偶然细节过度敏感,换到新场景时更稳。这种"不追求把已知数据榨干,而是留一点余地"的思路,其实和做预算、写方案时给自己留弹性是同一种智慧。
