权重衰减(weight decay)
/ wayt dih-KAY /
权重衰减,是一股温柔的压力,让模型内部的那些数字(它的权重)别长得太大。直觉是:一个权重巨大的模型,往往是抓住了一些尖锐、极端、专为训练数据量身定制的规则——这常是「在死记而非在理解」的迹象。权重衰减加进一股朝更小权重推的恒定力,鼓励更简单、更平滑的解,而这种解往往对新数据泛化得更好。
它的做法,是往损失函数里加一项惩罚:除了「你的预测有多错」,模型还要为「你的权重有多大」付费。最常见的形式 L2 正则化,惩罚的是权重平方之和,会把所有权重都温柔地缩向零。一种相关的形式 L1 正则化,惩罚的是权重绝对值之和,往往会把一些权重正好压到零——等于把某些特征关掉,这能让模型更简单、更可解释。一个单独的强度旋钮,控制着这股压力推得有多狠。
为什么要费这个事?因为灵活性是一把双刃剑:一个强到能学会真实模式的模型,也强到能死记噪声,而权重衰减把它往前者那边扳。它直接对抗过拟合,与 dropout、提前停止等手段并肩作战。有一个值得老实交代的褶皱:在 Adam 之类的自适应优化器里,那种朴素地加惩罚的做法,会与逐权重的步长发生不良的相互作用,这恰恰就是 AdamW 被造出来的原因——把权重衰减「解耦」开,干净地施加。
用一条扭来扭去的曲线去穿过10个带噪声的点,一个不加约束的模型会画出一条狂野、带尖刺的线,精确命中每一个点,却在点与点之间荒谬地大幅摆荡。加上权重衰减,同一个模型就退而求一条平滑、和缓的曲线,每个点都略有偏差,却抓住了真实的趋势——对新点的预测也好得多。
对大权重施加惩罚,换来更平滑、更能泛化的曲线。
对普通 SGD 而言,「权重衰减」和「L2 正则化」是一回事,但在自适应优化器内部,二者有微妙的不同。对 Transformer,要用 AdamW,它能正确地施加解耦的权重衰减。