当TensorFlow中的学习率下降时,应该何时设置楼梯是真的?

时间:2016-06-27 04:26:41

标签: machine-learning neural-network tensorflow conv-neural-network

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

  

decayed_learning_rate = learning_rate *                           decay_rate ^(global_step / decay_steps)

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

  

如果参数阶梯为True,则global_step / decay_steps为   整数除法和衰减学习率遵循阶梯   功能

什么时候更好地衰减每个X步数并遵循楼梯案例功能,而不是每个步骤越来越褪色的更平滑的版本?

2 个答案:

答案 0 :(得分:1)

现有的答案似乎并没有形容这一点。有两种不同的行为被描述为'阶梯'行为。

  • feature request for staircase开始,行为被描述为手动调整的分段常数衰减率,因此用户可以提供一组迭代边界和一组衰减率,以便在迭代通过给定边界后,衰减率跳转到指定值。

    如果查看actual code for this feature pull request,您会发现PR与函数参数中的阶梯选项并不相关。相反,它定义了一个完全独立的piecewise_constant操作,相关的单元测试显示了如何使用learning_rate_decay.piecewise_constant将自己的自定义学习率定义为分段常量。

  • the documentation on decaying the learning rate开始,行为被描述为将global_step / decay_steps视为整数除法,因此对于第一组decay_steps步骤,除法结果为0,并且学习率是不变的。一旦你越过decay_steps次迭代,就会将衰减率提高到1的幂,然后是2的幂,等等。所以你只能观察到特定功率的衰减率,而不是在所有功率上平滑变化。如果将全局步骤视为浮点数,则可以使用权限。

至于优势,这只是你应该根据你的问题做出的超参数决定。使用阶梯选项可以保持衰减率恒定,基本上就像在模拟退火中保持更高的温度更长时间。这可以让您通过在梯度方向上采取更大的步幅来探索更多的解决方案空间,代价是可能存在噪声或非生产性更新。同时,平稳地提高衰减率的力量将会稳定地降低和降温。探索,可以通过让你陷入局部最佳状态来限制你,但它也可以防止你用嘈杂的大梯度步骤浪费时间。

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

另外,正如功能请求链接所提到的那样,分段常量操作似乎是针对非常明确调整的用例,当您有单独的证据支持手动调整的衰减率时,基于收集训练指标作为迭代的函数。我一般不建议一般使用。

答案 1 :(得分:0)

好问题。

据我所知,这是研究小组的偏好。

从过去的时代开始,仅在每个时期降低学习率在计算上更有效率。这就是为什么有些人现在更喜欢使用它。

人们可能会说的另一个手工波浪的故事是它阻止了当地的最佳状态。通过“突然”改变学习率,重量可能会跳到更好的低音。 (我不同意这一点,但为了完整性而添加它)