Adam与AdamW有什么区别,为什么要解耦权重衰减?
两者的Adam更新相同,真正区别在于weight decay是否先混入梯度和自适应状态。
DETAILED ANSWER
直接结论
Adam和AdamW都会利用梯度平均m与梯度平方平均v更新同一套模型参数。两者真正的区别只在启用权重衰减时:传统Adam把衰减项λw加进梯度,随后一起进入m和v;AdamW让原始梯度正常经过Adam,再单独把参数向0缩小。
如果weight_decay=0,二者的核心更新没有这项区别。
传统Adam中的耦合方式
设数据损失产生的梯度为g,参数为w,衰减系数为λ。耦合方式先得到:
处理后的梯度 = g + λw
然后,这个处理后的梯度会参与Adam的两份历史统计:
g + λw
↓
更新m:方向的平滑平均
更新v:平方后的大小平均
↓
自适应参数更新
问题在于,λw原本只是想稳定地缩小权重,现在却也被Adam按不同参数的历史梯度大小进行自适应缩放,衰减效果不再是一个清晰、独立的动作。
AdamW中的解耦方式
AdamW把两条路线分开:
原始梯度g → 更新m和v → 完成Adam更新
当前参数w → 单独执行权重衰减
简化写成:
新w = 旧w − Adam更新量 − ηλ旧w
其中:
η是当前基础学习率;λ是weight_decay;ηλw是本轮单独执行的缩小量。
例如w=10、η=0.001、λ=0.01,本轮权重衰减量是:
0.001 × 0.01 × 10 = 0.0001
这部分不会进入Adam的m和v。
不要误解成两套模型
AdamW不会创建另一套用于拟合的w和b。网络仍然只有原来的权重和偏置;优化器只是维护与每个参数对应的历史状态,并按照不同规则更新原参数。
应该怎样回答区别
AdamW不是“比Adam多更新了一套权重”,而是把权重衰减从Adam的梯度和自适应统计中解耦。原始梯度仍按Adam处理,衰减项则直接作用于参数,所以权重衰减的含义更清楚。
