【问题标题】:Why does renewing an optimizer give a bad result?为什么更新优化器会产生不好的结果?
【发布时间】:2020-05-05 10:02:07
【问题描述】:

我试图更改我的优化器,但首先,我想检查以下两个代码是否给出相同的结果:

optimizer = optim.Adam(params, lr)
for epoch in range(500):
    ....
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
for epoch in range(500):
    ....
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

如果我在“for 循环”之间插入相同的优化器,

optimizer = optim.Adam(params, lr)
for epoch in range(500):
    ....
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

optimizer = optim.Adam(params, lr)
for epoch in range(500):
    ....
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

结果变坏了。为什么会发生这种情况?优化器不只是从损失中接收梯度并像步骤一样操作梯度下降吗?

【问题讨论】:

    标签: python optimization pytorch


    【解决方案1】:

    不同的优化器可能有一些“记忆”。
    例如,Adam 更新规则跟踪每个参数的梯度的一阶和二阶矩,并使用它们来计算每个参数的步长。
    因此,如果您初始化优化器,您会删除此信息,从而使优化器“缺乏信息”,从而导致步长的次优选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多