admin管理员组文章数量:1658610
有一些论文对warmup进行了讨论,使用 SGD 训练神经网络时,在初始使用较大学习率而后期改为较小学习率在各种任务场景下都是一种广为使用的做法,在实践中效果好且最近也有若干文章尝试对其进行了理论解释。例如《On Layer Normalization in the Transformer Architecture》等,论文中作者发现Post-LN Transformer在训练的初始阶段,输出层附近的期望梯度非常大,所以没有warm-up的话模型优化过程就会非常不稳定。
虽然在实践中效果好且最近也有若干文章尝试对其进行了理论解释,但到底为何有效,目前还没有被充分证明。
Transformer中的warm-up可以看作学习率 lr 随迭代数 t 的函数:
学习率 lr 会以某种方式递减,学习率从0开始增长,经过 Twarmup 次迭代达到最大。论文中对Adam,SGD等有无warmup做了实验,
可以看到,warmup增加了训练时间,同时在最初阶段使用较大的学习率会导致Loss偏大,对模型的训练的影响是巨大的。warmup在这里对SGD是非常重要的。
Rectified Adam针对warmup前期数据样本不足导致的biased variance的问题提出了解决方案,论文中实验结果看到还是有一定效果的。RAdam 由随机初始化带来的 Variance 比较小。即使隔离掉 warmup 部分的影响后Variance 也是要比 Adam 小的。
class AdamWarmup(Optimizer):
# DOTA
def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, warmup = 0):
if not 0.0 <= lr:
raise ValueError("Invalid learning rate: {}".format(lr))
if not 0.0 <= eps:
raise ValueError("Invalid epsilon value: {}
版权声明:本文标题:神经网络调参技巧:warmup策略 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729814959a1213771.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论