在我看来,纯粹基于经验观察(我没有在代码中检查),decay
(更具体地说是decay_rate
)是在每个步骤(或每个批次)时计算计算机的,而不是在整个周期内。
我不知道这是否是预期的行为(在同一周期内降低学习率,使前几步/批次使用比最后几个更高的学习率),但可能是这样,因为这是支配learning_rate_warmup_epochs
的相同逻辑,即使这是有意为之,也会出现一个棘手的问题:
如果我有一个较小的batch_size
(因此在一个周期内有更多的批次/步骤,因此应用了更多的学习率衰减),我将获得更高的衰减速率,与使用较大的batch_size
(因此在一个周期内有较少的批次/步骤,因此应用了较少的学习率衰减)相同的训练相比。
上面的内容对你有意义吗?
如果有,可以通过以下两种方式解决这个问题:
- 在周期级别计算
decay_rate
效应,使其与批次大小无关 - 在批次/步骤级别计算
decay_rate
效应(就像现在一样),但使其效果与一个周期内的步骤数成比例(这与learning_rate_warmup_epochs
发生的事情相同)
还有一件事:我认为decay
行为应该在learning_rate_warmup
完成上升后生效,否则我们会得到一个“曲线”式的初始值上升到learning_rate
(永远不会实现,因为它从一开始就衰减了这个值)。
1条答案
按热度按时间xu3bshqb1#
相同的模型配置与
learning_rate: 0.001
和decay_rate: 0.90
相同,但有以下区别:batch_size: 50
batch_size: 50