Adam 和 AdamW 的主要区别在于 权重衰减(Weight Decay) 的实现方式,具体如下:
1. 权重衰减(Weight Decay)处理方式
-
Adam:采用 L2 正则化,通过在梯度更新时手动添加
weight_decay
项:
g t = ∇ f ( θ t ) + λ θ t g_t = \nabla f(\theta_t) + \lambda \theta_t gt=∇f(θt)+λθt
其中, λ \lambda λ 是权重衰减系数。 -
AdamW:直接在 参数更新时 执行权重衰减,而不是在梯度计算时添加 L2 正则:
θ t + 1 = θ t − η m t v t + ϵ − η λ θ t \theta_{t+1} = \theta_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon} - \eta \lambda \theta_t θt+1=θt−ηvt+ϵmt−ηλθt这里权重衰减项独立于梯度计算,在更新参数时进行。
2. 影响
- Adam 的 L2 正则化 会影响梯度估计值,导致优化器在 自适应学习率的调节 过程中对权重衰减的影响不稳定。
- AdamW 的独立权重衰减 让权重衰减成为一个真正的正则化项,而不会干扰梯度估计,使得模型的 泛化能力更强。
3. 实验对比
- 论文 Decoupled Weight Decay Regularization(Loshchilov & Hutter, 2019)表明,在深度学习任务(如 NLP 和 CV)中,AdamW 通常比 Adam 泛化性能更好,因为它的权重衰减不会被 Adam 的自适应学习率影响。
- AdamW 在 Transformer 模型(如 BERT、ViT)中被广泛采用,因为它有更稳定的收敛性。
4. 总结
Adam | AdamW | |
---|---|---|
权重衰减方式 | L2 正则化(影响梯度) | 直接在更新时进行(不影响梯度) |
对梯度估计的影响 | 可能影响梯度自适应调整 | 不影响自适应学习率调整 |
泛化能力 | 较弱,可能过拟合 | 更强,正则化效果更好 |
应用场景 | 适用于小规模任务 | 适用于大规模深度学习任务(如 BERT、ViT) |
👉 如果你要在 Transformer 或深度学习任务中使用权重衰减,建议用 AdamW!
附:为什么Adam会被自适应学习率影响
Adam 之所以会被 自适应学习率(Adaptive Learning Rate) 影响,是因为它的 L2 正则化方式(梯度中的权重衰减项)与 Adam 的自适应梯度调整机制发生了耦合,导致实际的权重衰减效果不稳定。
Adam 的 L2 正则化(Weight Decay)
Adam 采用的是 L2 正则化,即在梯度计算时加入权重衰减项:
g
t
=
∇
f
(
θ
t
)
+
λ
θ
t
g_t = \nabla f(\theta_t) + \lambda \theta_t
gt=∇f(θt)+λθt
其中:
- ∇ f ( θ t ) \nabla f(\theta_t) ∇f(θt) 是损失函数对参数的梯度,
- λ θ t \lambda \theta_t λθt 是 L2 正则化项(权重衰减项),
- g t g_t gt 是最终用于 Adam 优化的梯度。
然后,Adam 会计算 自适应学习率:
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
g
t
m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t
mt=β1mt−1+(1−β1)gt
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
g
t
2
v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2
vt=β2vt−1+(1−β2)gt2
θ
t
+
1
=
θ
t
−
η
m
t
v
t
+
ϵ
\theta_{t+1} = \theta_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon}
θt+1=θt−ηvt+ϵmt
其中:
- m t m_t mt 是一阶动量(类似于梯度的指数加权平均),
- v t v_t vt 是二阶动量(类似于梯度平方的指数加权平均),
- η \eta η 是学习率,
- v t \sqrt{v_t} vt 代表梯度的自适应缩放因子。
为什么 L2 正则化会被自适应学习率影响?
由于 Adam 采用的是 自适应学习率机制,不同参数的梯度更新量会被调整:
m
t
v
t
+
ϵ
\frac{m_t}{\sqrt{v_t} + \epsilon}
vt+ϵmt
如果某些参数的梯度较大(或较小),它们的更新量会被 缩放,从而影响 L2 正则化项的实际作用。结果是:
-
不同参数的权重衰减不均匀:
- L2 正则化是在梯度中加入 λ θ t \lambda \theta_t λθt,但这个梯度随后会被 Adam 的自适应更新缩放。
- 由于 v t v_t vt 可能因梯度大小不同而变化,每个参数的权重衰减都会被 不同程度地缩放,导致正则化不均匀。
-
权重衰减效果变得不稳定:
- 在 SGD(随机梯度下降)中,L2 正则化始终是 固定比例 的衰减项( λ θ t \lambda \theta_t λθt)。
- 但在 Adam 中,L2 正则化项会随着梯度的变化而变化,导致某些参数可能衰减得 太多 或 太少,从而影响泛化能力。
-
学习率调整会干扰正则化效果:
- Adam 在训练早期可能会有 较大的自适应学习率,导致 L2 正则化项的实际作用被削弱。
- 训练后期,学习率降低时,L2 正则化项的影响可能变得更大,导致训练不稳定。
AdamW 如何解决这个问题?
AdamW 采用了一种 去耦合(Decoupled)权重衰减 方式,直接在参数更新时进行权重衰减,而不是在梯度计算时添加 L2 正则化:
θ
t
+
1
=
θ
t
−
η
m
t
v
t
+
ϵ
−
η
λ
θ
t
\theta_{t+1} = \theta_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon} - \eta \lambda \theta_t
θt+1=θt−ηvt+ϵmt−ηλθt
- 这样,权重衰减的大小不受梯度缩放的影响,可以独立控制正则化效果,保持一致性。
- 这避免了 Adam 中权重衰减的不均匀性,使得 AdamW 比 Adam 具有 更好的泛化能力。
总结
优化器 | 权重衰减方式 | 是否受自适应学习率影响? | 正则化效果 |
---|---|---|---|
Adam | L2 正则化(梯度中加 λ θ \lambda \theta λθ) | 会受影响(梯度被缩放) | 不稳定,可能导致不均匀的衰减 |
AdamW | 直接在参数更新时减去 λ θ \lambda \theta λθ | 不会受影响(与梯度分离) | 更稳定,正则化效果更好 |
👉 结论:Adam 的 L2 正则化被 Adam 的自适应梯度缩放影响,使得正则化不稳定,而 AdamW 通过去耦合权重衰减,解决了这个问题,因此在深度学习任务中表现更优!
写在最后
本文采用了 ChatGPT 辅助进行内容的书写和完善