看了一些博客感觉讲的都不是很清晰,这里简单分析一下:

首先基于热重启的学习率衰减策略可以说是余弦退火衰减策略的进化。余弦退火学习率衰减策略在整个训练过程持续衰减直到学习率为0,那么当损失函数的值陷入局部最优值的时候,越来越小的学习率显然难以跳出局部最优值。而热重启很好地解决了这个问题,先摆上公式和图像:

热重曲线 机器学习_热重启的学习率衰减


热重曲线 机器学习_热重启_02


首先利用大白话讲一下为什么叫“热重启”,“重启”指的是每间隔热重曲线 机器学习_热重启_03次迭代学习率重启一次,并且每次重启后的状态与之前相同(就好比电脑重启一个道理,暂且我们认定电脑只含有一个操作系统,电脑在运行状态后重新启动是windows系统重启后还是windows,不可能原来是windows系统重启后变为Linux),“热”指的是学习率重启后模型参数仍然是前一次运行状态下更新得到的参数。这样分析就很好理解该方法的原理了,那么热重曲线 机器学习_深度学习_04指的是每个运行状态下学习率所能衰减到的最小值,热重曲线 机器学习_热重启的学习率衰减_05即为最大值也是每个重启时刻的初始学习率,热重曲线 机器学习_热重启_03则为重启周期,热重曲线 机器学习_热重启的随机梯度下降_07为迭代次数,pytorch官网的描述为:When 热重曲线 机器学习_热重曲线 机器学习_08热重曲线 机器学习_热重曲线 机器学习_09热重曲线 机器学习_热重启的随机梯度下降_10, set 热重曲线 机器学习_热重启的随机梯度下降_11热重曲线 机器学习_热重曲线 机器学习_09热重曲线 机器学习_热重曲线 机器学习_13. When 热重曲线 机器学习_热重曲线 机器学习_08热重曲线 机器学习_热重曲线 机器学习_09热重曲线 机器学习_深度学习_16 after restart, set 热重曲线 机器学习_热重启的随机梯度下降_11热重曲线 机器学习_热重曲线 机器学习_09热重曲线 机器学习_热重启_19.热重曲线 机器学习_热重启的随机梯度下降_07热重曲线 机器学习_热重曲线 机器学习_21热重曲线 机器学习_热重启的学习率衰减_22,代入上述公式得到学习率即为热重曲线 机器学习_深度学习_04;重启后令热重曲线 机器学习_热重启的随机梯度下降_07热重曲线 机器学习_热重曲线 机器学习_21热重曲线 机器学习_热重启的学习率衰减_26,代入上述公式得到学习率即为热重曲线 机器学习_热重启的学习率衰减_05,然后每个周期内学习率是余弦式衰减。

另外pytorch封装的方法与上述所讲有所不同:torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=-1, verbose=False) optimizer:选择的优化器

T_0(重点):即上述所说的热重曲线 机器学习_热重启_28,但是pytorch中指的是累加批次,而不是训练次数,是每T_0个批次训练热重启一次。

T_mult:周期扩大因子,默认为1。如果不为1,则每次热重启周期都会扩大为前一次的T_mult倍,使得学习率衰减的越来越缓慢。

eta_min:即热重曲线 机器学习_深度学习_04