【问题标题】:Why doesn't the learning rate (LR) go below 1e-08 in pytorch?为什么 pytorch 中的学习率(LR)不会低于 1e-08?
【发布时间】:2019-07-28 07:43:02
【问题描述】:

我正在训练一个模型。为了克服过度拟合,我已经完成了优化、数据增强等。我有一个更新的 LR(我尝试了 SGD 和 Adam),当有一个平台时(也尝试了一步),学习率降低了一个因子,直到它达到 LR 1e-08 但不会低于该值,并且我的模型的验证在此之后卡住了。我尝试将 epsilon 参数传递给 Adam 以建议一个较小的值,但它仍然停留在 LR 1e-08。我也通过了体重衰减,但这并没有改变这种情况。也没有将 amsgrad 设置为 true。

我做了一些研究,人们认为 Adam 优化器存在固有问题,但没有提到学习率 - 每个讨论都补充说,使用 SGD,没有问题。

这是为什么?它是一个错误还是设计如此,因为作者认为在那之后它是一个毫无意义的小值?似乎为我的数据集设置一个较小的学习率确实会有所帮助,因为在学习率降至 LR 1e-08 之前一切似乎都很好。

【问题讨论】:

    标签: optimization deep-learning pytorch gradient-descent


    【解决方案1】:

    您应该问自己的真正问题是什么?为什么我一直需要降低学习率?

    随着学习率的持续下降(但实际上并没有达到目标),您正在寻找并大步迈向的高度简化的答案是,您正在尝试减少信号的相对噪声(即更新的方差)。

    您是否尝试过平均梯度迭代并保持学习率平稳?应该这样做

    https://www.tensorflow.org/addons/api_docs/python/tfa/optimizers/SWA

    【讨论】:

      【解决方案2】:

      Richard 的解决方法应该很有效,但如果有人愿意知道,我也得到了官方答复。

      为 ReduceLROnPlateau 调度程序的(而不是 Adam 的)eps 参数设置一个较小的值已经起作用。

      eps ( float ) – 应用于 lr 的最小衰减。如果新旧 lr 之间的差异小于 eps,则忽略更新。默认值:1e-8。

      【讨论】:

        【解决方案3】:

        我个人不知道学习率的下限(0.0 除外)。但是你可以通过在计算反向传播之前减少损失来达到降低学习率的效果:

        outputs = model(batch)
        loss = criterion(outputs, targets)
        
        # Equivalent to lowering the learning rate by a factor of 100
        loss = loss / 100
        
        self.optimizer.zero_grad()
        loss.backward()
        self.optimizer.step()
        

        【讨论】:

        • 您能否解释一下或给出一些直觉,说明为什么缩放损失函数也会缩放学习率? - 谢谢你
        • 由于梯度下降的工作方式!w_{k+1}-\alpha\nabla L(w_{k}),因此损失函数的任何重新缩放都可以等效地吸收到学习率中。
        • 因为梯度下降的方程是 w_{k+1}-\alpha\nabla L(w_{k})。因此,损失的任何标量变换都可以等效地吸收到学习率中。 IE。将损失除以 10 与损失不变和学习率降低相同。
        猜你喜欢
        • 2020-08-22
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        • 2019-09-03
        • 2020-03-19
        • 2019-07-13
        • 2017-10-29
        相关资源
        最近更新 更多