【问题标题】:AdamW and Adam with weight decay权重衰减的 AdamW 和 Adam
【发布时间】:2021-02-13 16:41:31
【问题描述】:

torch.optim.Adam(weight_decay=0.01)torch.optim.AdamW(weight_decay=0.01)有什么区别吗?

文档链接:torch.optim

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    是的,Adam 和 AdamW 的权重衰减是不同的。

    Hutter 在他们的论文 (Decoupled Weight Decay Regularization) 中指出,每个库中 Adam 实现权重衰减的方式似乎是错误的,并提出了一种简单的方法(他们称之为 AdamW)来修复它。

    在 Adam 中,权重衰减通常是通过将wd*wwd 在这里是权重衰减)添加到梯度(第一种情况)来实现,而不是实际从权重中减去(第二种情况)。

    # Ist: Adam weight decay implementation (L2 regularization)
    final_loss = loss + wd * all_weights.pow(2).sum() / 2
    # IInd: equivalent to this in SGD
    w = w - lr * w.grad - lr * wd * w
    

    这些方法对于普通 SGD 是相同的,但是一旦我们添加动量,或者使用更复杂的优化器(如 Adam),L2 正则化(第一个方程)和权重衰减(第二个方程)就会变得不同。

    AdamW 遵循第二个权重衰减方程。

    在亚当里

    weight_decay (float, optional) – 权重衰减(L2 惩罚)(默认值:0)

    在 AdamW 中

    weight_decay (float, optional) – 权重衰减系数(默认:1e-2)

    阅读更多关于fastai blog的信息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2020-05-18
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多