赞
踩
学习率(learning rate)是网络训练中最重要的超参数之一, 学习率可以控制模型的训练速度, 甚至影响模型的收敛性。 因此一个好的学习率设置是非常重要的。 深度学习炼丹师们日常工作的一部分就包含调试一个好的超参数。
实践中, lr一般很少是固定的,因为在模型训练的不同阶段,对学习率的敏感性不同, 设置一个固定的并不太科学。 比如, 一般开始阶段lr可以稍大一些, 让模型快速学习, 到后面阶段, lr要小一些, 避免振荡。 也有些场景, 一开始需要做一些warmup, 等等。 总之, lr的改变可以有很多策略, 不同场景下需要的最优策略也不同。
这些设置一般也很难有理论的保障,一般都是根据实际经验进行设置。
这是最简单的一种形式了, 也就是学习率从始至终始终保持不变。
顾名思义,就是学习率是一个分段函数, 在不同阶段采用不同的学习率。
常用的有2种, StepLR 和MutiStepLR。 StepLR只能均匀的变化, 也就是固定的step(或epoch)后学习率固定变化。 MutiStepLR则灵活一些,可以在指定的步长的位置改变学习率。 但是控制参数也更多一些。
实际上, StepLR可以看做MutiStepLR的一种特殊形式。
比如, 下图中StepLR策略为每30个epoch, 学习率降低10倍。
下图中的MutiStepLR策略为在30和80个 epoch的位置, 学习率降低10倍。
学习率以指数规律变化(一般是降低)。
学习率以正弦规律变化。一般情况下, 只取半个或一个周期。 半个周期一般都是从最大到最小, 一个周期一般都是从最小到最大, 再到最小。
顾名思义, 就是学习率以某种规律循环变化, 变化的规律可以有很多(如下图中就是一种线性变化)。 其实上面的CosineAnnealingLR在取多个周期的时候也是一种CyclicLR。
其实有了上面的CycleLR, 理解OneCycleLR就非常简单了。OneCycleLR其实就是只取CycleLR的一个周期。
所谓warmup, 就是指在一开始的时候学习率较小, 然后逐步变大。
这个策略经常和其他LR的策略结合使用。 如warmupLR + StepLR, 就是lr先从lr_min增加到lr_max, 然后再以StepLR的策略逐步变小。 再比如, warmupLR +CosineAnnealingLR, 就是学习率r先从lr_min增加到lr_max, 然后再以余弦规律下降。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。