When should one set the staircase is True when decaying the learning rate in TensorFlow?
回想一下,当TensorFlow中的学习率呈指数下降时,会发生以下情况:
decayed_learning_rate = learning_rate *
decay_rate ^ (global_step / decay_steps)
文档将以下阶梯选项称为:
If the argument staircase is True, then global_step /decay_steps is an
integer division and the decayed learning rate follows a staircase
function.
什么时候最好衰减每X步的步长并遵循楼梯功能,而不是更平滑的版本,每一步的衰减都越来越大?
现有答案似乎无法描述这一点。有两种不同的行为被描述为"楼梯"行为。
-
根据对楼梯的特征请求,将行为描述为手动调整的分段恒定衰减率,以便用户可以提供一组迭代边界和一组衰减率,以使衰减率跳至迭代通过给定边界后的指定值。
如果您查看此功能请求的实际代码,您会发现PR与函数参数中的阶梯选项没有多大关系。相反,它定义了一个完全独立的
piecewise_constant 操作,并且相关的单元测试显示了如何使用learning_rate_decay.piecewise_constant 将您自己的自定义学习率定义为分段常数。 -
从有关降低学习率的文档中,该行为被描述为将
global_step / decay_steps 视为整数除法,因此对于第一组decay_steps 步骤,除法结果为0,学习率是恒定的。穿过第decay_steps 次迭代后,您将衰减率提升为1的幂,然后为2的幂,依此类推。因此,您仅观察特定功率处的衰减率,而不是在所有幂之间平稳地变化如果您将全局步视为浮点数。
关于优势,这只是您应该根据自己的问题做出的超参数决策。使用阶梯选项使您可以保持衰减率恒定,就像在模拟退火中将较高温度保持更长的时间一样。这可以让您通过在梯度方向上迈出更大的步伐来探索更多的解决方案空间,而代价是可能会产生嘈杂或无用的更新。同时,平稳地增加衰减率功率将稳定地"冷却"探索过程,这可以通过使您陷于局部最优值来限制您,但同时也可以防止您浪费大量的梯度步长来浪费时间。
一种方法或另一种方法是否更好(a)往往无关紧要,并且(b)在可能重要的情况下通常需要进行特殊调整。
另外,正如功能请求链接所提到的那样,当您有单独的证据支持基于迭代的函数收集训练指标的手动调整衰减率时,分段常量操作似乎是针对特定调整的用例的。我通常不建议将其用于一般用途。
好问题。
就我所知,这是研究小组的偏爱。
从过去开始,仅在每个时期降低学习率在计算上都更加有效。这就是为什么现在有些人更喜欢使用它的原因。
人们可能会说的另一个波澜不惊的故事是它阻止了局部最优。通过"突然"改变学习速度,权重可能会跳升到更好的低音效果。 (我不同意这一点,但是为了完整起见将其添加)