CosineAnnealingLR(余弦退火调整学习率)

这是一种学习率的调整方式

公式

在这里插入图片描述
其中:
nt:当前学习率。
nmin:学习率最小值。
nmax:学习率最大值。
Tcur:当前epoch。
Tmax:最大epoch。

解释

CosineAnnealingLR(余弦退火调整学习率)_第1张图片
cos(x)函数在[0, pi]的值域为[-1, 1],变化率为:先缓慢下降,然后快速下降,最后缓慢下降。这是可以利用的性质。
(1+cos(x))/2值域为[0, 1],乘以(nmax-nmin),再加上nmin,值域为[nmin, nmax]。

PyTorch API及其解释

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1, verbose=False)

optimizer:该学习率调整器作用于的优化器,在初始化optimizer时就设定了初始学习率,同时也是最大学习率。
T_max:最大迭代次数。
eta_min:最小学习率。
last_epoch:最后一个epoch的index,默认值为-1。如果是训练了很多个epoch后中断了,继续训练,这个值就设置为加载模型的epoch,-1表示总是从头开始训练。
verbose:若为true,每次更新时会打印一些信息。

设置T_max的作用:
若等于总epoch,则学习率从nmax到nmin单调变化;
CosineAnnealingLR(余弦退火调整学习率)_第2张图片

若小于总epoch,则学习率在每两个T_max间隔内完成一次从nmax到nmin,再从nmin到nmax的变化,直至总epoch结束。
CosineAnnealingLR(余弦退火调整学习率)_第3张图片
对于另一个API:

torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=-1, verbose=False)

最大不同在于,每个间隔内完成一次从nmax到nmin的变化,然后就从nmax重启(restart),不会有缓慢上升的过程。
optimizer、eta_min、last_epoch、verbose:同上。
T_0:第一次restart所需的epoch次数,
T_mult:第一次restart后,下一次restart所需epoch,为上一次epoch的几倍,若为1则每次间隔都不变。
T_mult=1如下:
CosineAnnealingLR(余弦退火调整学习率)_第4张图片
T_mult=2如下:
CosineAnnealingLR(余弦退火调整学习率)_第5张图片

你可能感兴趣的:(深度学习,深度学习,人工智能)