回想一下当 exponentially decaying TensorFlow 中的学习率时:



文档提到这个楼梯选项为:



什么时候最好每 X 步衰减并遵循阶梯函数,而不是更平滑的版本,随着每一步衰减越来越多?

最佳答案

现有的答案似乎没有描述这一点。有两种不同的行为被描述为“楼梯”行为。

  • feature request for staircase 中,行为被描述为手动调整的分段恒定衰减率,因此用户可以提供一组迭代边界和一组衰减率,以使衰减率在迭代通过给定的边界。

    如果您查看 actual code for this feature pull request ,您会发现 PR 与函数参数中的 staircase 选项没有太大关系。相反,它定义了一个完全独立的 piecewise_constant 操作,相关的单元测试展示了如何使用 learning_rate_decay.piecewise_constant 将您自己的自定义学习率定义为分段常数。
  • the documentation on decaying the learning rate 中,行为被描述为将 global_step / decay_steps 视为整数除法,因此对于第一组 decay_steps 步骤,除法结果为 0,学习率恒定。一旦你越过 decay_steps -th 迭代,你的衰减率会提高到 1 的幂,然后是 2 的幂,等等。所以你只能观察特定幂的衰减率,而不是在所有幂之间平滑变化,如果你将全局步骤视为 float 。

  • 至于优势,这只是您应该根据您的问题做出的超参数决定。使用阶梯选项可以让您保持衰减率恒定,本质上就像在模拟退火中保持较高温度更长时间一样。这可以让您通过在梯度方向上迈出更大的步伐来探索更多的解决方案空间,但代价是可能出现嘈杂或非生产性的更新。同时,平稳地增加衰减率功率将稳定地“冷却”探索,这可以通过使您停留在局部最优值附近来限制您,但它也可以防止您浪费时间在嘈杂的大梯度步长上。

    一种方法或另一种方法是否更好 (a) 通常并不重要,并且 (b) 通常需要在可能重要的情况下进行特殊调整。

    另外,正如功能请求链接所提到的,分段常数操作似乎适用于非常具体的调整用例,当您有单独的证据支持基于收集训练指标作为迭代函数的手动调整衰减率时。我通常不建议将其用于一般用途。

    关于machine-learning - 在 TensorFlow 中衰减学习率时,什么时候应该将楼梯设置为 True?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38045943/

    10-12 23:57