0. 前言#
在 上一篇 Blog 中探讨了 L1 Regularization 和 L2 Regularization. 我们说到: 对损失函数添加 L2 Regularization , 最后对 w 使用普通梯度下降的时候, 实际是对 w 做了权重衰减.
上述等价性对不带 momentum 的普通 SGD 成立(需要换算系数)。加入 momentum 或使用 Adam 时,如果 weight decay 指的是与梯度更新解耦的参数衰减,通常不再等价于把 L2 项加入损失函数。
本篇 Blog 主要探讨在使用 Adam 的时候 Weight Decay 和 L2 Regularization 的关系, 以及当更新参数引入 momentum之后他们之间的关系 , 最后介绍 AdamW 优化器. 文中符号都尽量与 AdamW paper 中的一致.
NOTE阅读前, 需要你 : 有高数基础知识, 线代基础知识, 当然还要有 ML和 DL 的知识背景.
1. SGD场景下#
1.1 无 momentum#
weight decay 的公式:
θt+1=(1−λ)θt−α∇ft(θt)这里 α 是学习率 , λ 是 weight decay 的系数. 如果对损失函数施加 L2 Regularization :
ftreg(θ)=ft(θ)+2λ′∥θ∥22使用梯度下降:
θt+1=θt−α∇ftreg(θt)=θt−α∇ft(θt)−αλ′θt=(1−αλ′)θt−α∇ft(θt)如果想让 weight decay 和 带L2 Regularization 等价 , 则应有
αλ′=λ
, 显然对于SGD我们可以做到这个事情. 也就是说 在SGD优化器下, weight decay 和 带L2 Regularization 等价. 不过有个问题, 假设我们存在一个最优的weight decay系数 λ , 并且置了 L2 的系数
λ′
, 这样就会把系统的学习率给固定了. 换句话说, 这时 weight decay 的系数 和 L2 Regularization 的系数是耦合的. 二者会相互影响.
1.2 添加 momentum#
加入 momentum 后,若把 L2 项加进梯度,更新为:
gt=∇ft(θt)+λ′θtmt=β1mt−1+gt,θt+1=θt−αmt代入后可见,正则化项不仅影响当前参数,还会累积进动量缓存:
θt+1=(1−αλ′)θt−α∇ft(θt)−αβ1mt−1.而解耦的 weight decay 只衰减参数,不把 λθt 放进动量缓存:
m~tθt+1=β1m~t−1+∇ft(θt),=(1−αλ)θt−αm~t.因此,普通 SGD 在采用上式的衰减定义时,取 λ=λ′ 即可等价;本文首节将衰减因子写为 1−λ,对应的换算是 λ=αλ′。但在上述 momentum 定义下,两个动量缓存的历史不同,一般不能只靠重设一个固定系数使整条更新轨迹相同。
2. Adam场景下#
这里就不敲公式了,给出 AdamW paper 附录的证明.

我们知道, 在 Adam 优化器中, 学习率是自适应变化的, 上图中 Mt 就表示给学习率乘的自适应系数矩阵. 要想
λθt=αλ′Mtθt就必须让
λ=αλ′Mt其中 λ ,α ,λ′ 三兄弟都是常数, Mt 又是自适应系数, 显然是不能实现上边的目标的,
WARNING因此对于类似 Adam 这种自适应学习率的算法, Weight Decay = L2 Regularization . 无论加不加 momentum