一、基本概念

梯度下降: 𝒘 𝒊+𝟏 = 𝒘 𝒊 − LR * 𝒈(𝒘 𝒊 )
学习率(learning rate)控制更新的步伐

二、 具体方法

1、class _LRScheduler

class _LRScheduler(object):
    def __init__(self, optimizer, last_epoch=-1):
    def get_lr(self):
        raise NotImplementedError

• step():更新下一个epoch的学习率
• get_lr():虚函数,计算下一个epoch的学习率

2、StepLR,功能:等间隔调整学习率

调整方式:lr = lr * gamma

lr_scheduler.StepLR(optimizer, step_size,gamma=0.1, last_epoch=-1)

主要参数:
• step_size:调整间隔数
• gamma:调整系数

3、MultiStepLR,功能:按给定间隔调整学习率

调整方式:lr = lr * gamma

lr_scheduler.MultiStepLR(optimizer,milestones, gamma=0.1, last_epoch=-1)

主要参数:

• milestones:设定调整时刻数
• gamma:调整系数

4、ExponentialLR,功能:按指数衰减调整学习率

调整方式:lr = lr * gamma ** epoch

lr_scheduler.ExponentialLR(optimizer, gamma,last_epoch=-1)

主要参数:

• gamma:指数的底 

5、CosineAnnealingLR,功能:余弦周期调整学习率

调整方式:

lr_scheduler.CosineAnnealingLR(optimizer,T_max, eta_min=0, last_epoch=-1

 • T_max:下降周期
• eta_min:学习率下限

6、ReduceLRonPlateau,功能:监控指标,当指标不再变化则调整

lr_scheduler.ReduceLROnPlateau(optimizer,mode='min', factor=0.1, patience=10,
verbose=False, threshold=0.0001,threshold_mode='rel', cooldown=0, min_lr=0,
eps=1e-08)

 主要参数:
• mode:min/max 两种模式
• factor:调整系数
• patience:“耐心”,接受几次不变化
• cooldown:“冷却时间”,停止监控一段时间
• verbose:是否打印日志
• min_lr:学习率下限
• eps:学习率衰减最小值

7、LambdaLR,功能:自定义调整策略

lr_scheduler.LambdaLR(optimizer, lr_lambda,last_epoch=-1)

三、小结

学习率初始化设置较小数:0.01、0.001、0.0001,搜索最大学习率: 《Cyclical Learning Rates for Training Neural Networks》

  • 有序调整:Step、MultiStep、Exponential 和 CosineAnnealing
  • 自适应调整:ReduceLROnPleateau
  • 自定义调整:Lambda

 

更多推荐