自用学习率衰减策略

还是要看具体任务来用,市面上已有的学习率策略其实很多,但是大部分很难有效….

阶梯式学习率衰减(Step Decay)

通过每隔一定的epoch数降低学习率,常见的做法是每隔几个epoch将学习率减小一个固定的比率

lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)

指数衰减学习率(Exponential Decay)

通过每个epoch进行指数衰减,学习率按指数下降,适用于模型需要逐渐减缓学习过程的情况

lr_scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)

ReduceLROnPlateau

ReduceLROnPlateau 是一种基于验证集性能的自适应学习率调整策略。当模型的验证集损失在若干个epoch内没有改善时,自动减少学习率

optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=5, factor=0.5)

参数解释

  • patience:如果验证集损失在多少个epoch内没有改善,则减少学习率
  • factor:每次减少学习率的倍数
  • 'min':表示当验证集损失下降时进行学习率衰减
  • 由于过程中用到了Validation集的测试结果,所以在scheduler.step()里面需要传入val_loss

循环学习率(Cyclical Learning Rates)

循环学习率(CLR)是一种动态调整学习率的策略,它通过在一定的范围内循环调整学习率,可以让模型跳出局部最优解,适合防止过拟合

3.1 CyclicLR

通过设定一个学习率范围(最小值到最大值),让学习率在这个范围内不断循环变动,避免了过早学习率过低导致的过拟合

lr_scheduler = optim.lr_scheduler.CyclicLR(optimizer, base_lr=1e-5, max_lr=1e-2, step_size_up=5)

发表评论