资讯动态

PyTorch-学习率调度器(Learning Rate Scheduler)

发布时间:2026/10/28 15:13:34 来源:尧图企业网站定制
这是一份关于学习率调度器Rate技术的应用指南, 其目录的第一部分主要是讲解什么是学习率调度器这一个概念。学习率Rate这个玩意儿, 在深度学习的训练过程里头, 算是特别重要的那个啥超参数之一了。为啥这么说? 因为它这个东西直接决定了模型里的参数往哪走、走多快, 也就是它决定了更新的步长到底是多少。你得把合适的那个学习率给设好了才行。你想想看, 把这个设定得合适了不对的话, 会对模型最后那个训练出来的效果产生多大影响, 还会对收敛的速度产生特别直接的关联作用, 所以这点事情是非常非常关键的。学习者所使用的参数这个被称为的工具, 是在训练的过程中起到作用的。这个工具可以让人们根据训练进展的情况来改变数值。这样做可以实现更好的训练效果。一般情况下在刚开始训练的时候使用较大的数值以便于快速达到目标。在训练快要结束的时候降低相应的数值以便于进行精确的调整。该优化器模块是在torch.optim里面包含着的, 学习率调度器就在这个位置中, 它必须得搭配优化器一起使用。2. 我们通常会使用到的学习率调度器, 它是第2.1个版本。它是最基础的学习率调度器之一, 每隔固定的那个时期数就会把学习率乘上一个衰减因子。参数这种办法呢, 是用来处理那些在训练的时候, 需要按照固定的间隔去把学习率进行降低的处理过程的。2.2是的, 这个功能是得以扩展的, 并且它可以在被指定的那几个时期节点的地方, 去执行对学习率做的衰减这一操作。参数这个情况, 在大家需要调整学习率的那个特定训练阶段, 是可以进行使用的。2.3在每个轮次的时候, 把学习率按照指数函数的方式来进行衰减。参数这种情况是在需要去把那个学习的速率按照指数的方式让它变得平滑一些, 并且慢慢地降下来的时候, 才会被使用的。2.4通过使用余弦函数来完成对学习率的调节, 把从初始的那个数值调整到最小的数值, 并且整个变化的过程是平滑的。参数这种办法适用在那些地方, 这些地方的情况是需要周期性地对调整学习率这一项内容来进行重新设定, 就好像说, 随机梯度下降退火这种情况就属于这类需要周期性调整学习率的场景之中。2.5有一个调度器是需要你把指标值传进去的, 而这个唯一需要这样做的情况是针对基于某个指标, 比如说验证集损失, 来决定是否停止改善, 从而去调整学习率的那个场景。参数适用于这样的情况, 也就是要根据模型的运行情况来实时地对学习率这个参数进行动态的调整。2.6这里实现了一种被叫做“1周期”的学习率策略做法, 这个做法的特点是在一个训练周期之内, 先是让学习率增加, 然后再让学习率减少。参数使用的情况是这样的一种, 就是对于快速的训练这种场景来说的话是适合的, 可以非常显著地把收敛的速度给加快。2.7我们允许那个用户, 他去用那种自己写的函数, 然后来把那个学习率调整的这种策略给设置一下。参数这个使用场景呢, 它是专门给那种需要把自己学习率调整的整个过程都给完全定制掉的人用的。2.8通过用户自定义的函数逐epoch乘以一个因子来调整学习率。参数这种办法可以用在有要求的地方, 就是在每一个 epoch 进行乘法操作来调整学习率的场合。2.9它是在预设的那个周期次数的范围之内, 去把当前的那个学习率乘上一个固定的常数数值这个操作, 等时间到了之后, 再把学习率给恢复回到最初的那个数值上去。参数它的使用场景呢, 是那种需要降低学习率的场合, 特别是在训练初期的时候。2.10在线性变化过程当中, 逐渐地调整学习率, 从。参数这个场景是适用在那些地方, 那些地方是需要对学习的速率进行线性的调整。2.11我们使用多项式函数这种方式来实现对学习率的衰减操作。参数它这个做法呢, 主要是拿来应对那种需要让学习率按照某种多项式的样子慢慢减小, 或者说是逐步下降的场合或情况的时候。2.12采用余弦退火算法, 并且要在每一次进行重启操作的时候把学习率给重新设置一遍。参数在使用场景这个方面, 适用于需要进行周期性重启训练的情况。2.13学习率在两个边界之间进行周期性调整, 这两个边界是界限值, 调整的方式是周期性的切换。参数在使用场景方面, 它适用于那种需要周期性调整学习率的局面。2.14系统支持用户按照特定的次序来启用多个调度器, 并且在执行过程的不同节点环节采用不同的调整机制。参数这个适用场景的意思是, 在那些必须要在训练的不同时候更换不同调度办法的情形下, 大家就会去用这种方式。2.15我们可以这样做, 那就是把多个调度器给链条式地进行调用, 并且在这个操作的过程中, 能够同时应用好多种调度策略。参数这种情况适合那种场合, 就是大家得一块儿用上好几套排班办法的时候。3. 使用示例这里有一个示例, 这个示例是在使用学习率调度器的时候用的哦。import torchimport torch.nn as nnimport torch.optim as optimfrom torch.optim import lr_schedulerimport numpy as np# 定义模型model nn.Sequential(nn.Linear(10, 5),nn.ReLU(),nn.Linear(5, 1))# 定义优化器optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9)# 选择一个学习率调度器# 示例1: StepLRscheduler lr_scheduler.StepLR(optimizer, step_size30, gamma0.1)# 示例2: ReduceLROnPlateau# scheduler lr_scheduler.ReduceLROnPlateau(optimizer, modemin, factor0.1, patience10)# 示例3: CosineAnnealingWarmRestarts# scheduler lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_010, T_mult1)# 示例4: OneCycleLR# scheduler lr_scheduler.OneCycleLR(optimizer, max_lr0.01, total_steps100)# 示例5: SequentialLR# scheduler1 lr_scheduler.ConstantLR(optimizer, factor0.5, total_iters5)# scheduler2 lr_scheduler.ExponentialLR(optimizer, gamma0.9)# scheduler lr_scheduler.SequentialLR(optimizer, schedulers[scheduler1, scheduler2], milestones[5])# 训练循环for epoch in range(100):# 训练代码...train(...)# 验证代码...val_loss validate(...)# 更新学习率# 对于大多数调度器scheduler.step()# 对于ReduceLROnPlateau# scheduler.step(val_loss)# 打印当前学习率print(fEpoch {epoch1}, Learning Rate: {optimizer.param_groups[0][lr]})4. 选择合适的调度器我们在选择合适的学习率调度器的时候。是需要把下面这些相关的因素都考虑到里面的。训练数据集合的大小是这样考虑的, 大数据集通常是可以更充分地使用到那些更为复杂的学习率调度策略的。模型复杂度的方面也是这样分析的, 复杂的模型很可能是需要那些更加精细化的学习率调整的。如果是对训练时间的要求比较苛刻, 也就是如果需要快速的训练的话, 那么考虑使用等间隔的策略是可行的。如果有可靠的验证指标来监控情况的话, 这也是一个非常不错的选择方向。至于先验知识这一项, 若是手头有相关的经验的话, 是可以进行使用或者是参考的。通常, 在大多数情况下。因为合理地在使用这个学习率调度器, 所以是能够把这个模型训练的效果给提上去的, 而且也能够让这个最终的那个表现给变好一些。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑