PyTorch学习DAY5优化器

优化器

通过损失函数得出的loss值也就是模型输出和真实标签的差异后,loss经常会通过自动梯度求导求出每一个可学习参数的梯度,有了梯度,优化器就开始干活了!拿到梯度后进行一系列的优化策略去更新模型参数,并使得loss值下降。

总而言之优化器的作用是,采用梯度去更新模型的可学习参数,使得模型输出和真实标签的差异更小,即loss值下降。

pytorch的优化器

  • 作用:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签。
  • 导数:函数在指定坐标轴上的变化率。
  • 方向导数:指定方向上的变化率。
  • 梯度:一个向量,方向为方向导数取得最大值的方向。

Optimizer类

基本属性

  • defaults:优化器超参数。
  • state:参数的缓存,如momentum的缓存。
  • param_groups:管理的参数组(是个list)。
  • _step_count:记录更新次数,学习率调整中使用。

基本方法

  • zero_grad():清空所管理参数的梯度。(由于pytorch特性:张量梯度不自动清零。)
  • step():执行一步更新。
  • add_param_group():添加参数组。
  • state_dict():获取优化器当前状态信息字典。
  • load_state_dict():加载状态信息字典。能配合state_dict()保存和加载模型,接着当前的状态往下训练。

学习率

梯度下降:w_{i+1} =w_{i}-g(w_{i})

更新后:w_{i+1} =w_{i}-LR*g(w_{i})

学习率(learning rate)控制更新的步伐。

对于y=4x^2函数,学习率最佳为0.125,下图学习率为0.13666时效果最好,不能太大太小。

Momentum

动量冲量:结合当前梯度与上一次更新信息,用于当前更新。

指数加权平均:v_{t}=\beta *v_{t-1}+(1-\beta)*\theta _{t}=\sum_{i}^{N}(1-\beta)*\beta^{i}*\theta _{N-i})

思想:距离当前时刻越远,它对当前时刻的平均值的影响就越小;距离当前时刻越近,它对当前时刻的平均值的影响就越大。

\beta的作用为控制记忆周期,通常为0.9,多个\beta值的影响如下:

 LR与Momentum的不同取值


optim.SGD

随机梯度下降法

主要参数:

  • params:管理的参数组。
  • lr:初始学习率。
  • momentum:动量系数,β。
  • weight_decay:L2正则化系数。
  • nesterov:是否采用NAG。

十种优化器

  • optim.SGD:随机梯度下降法。
  • optim.Adagrad:自适应学习率梯度下降法。
  • optim.RMSprop:Adagrad的改进。
  • optim.Adadelta:Adagrad的改进。
  • optim.Adam:RMSprop结合Momentum。
  • optim.Adamax:Adam增加学习率上限。
  • optim.SparseAdam:稀疏版的Adam。
  • optim.ASGD:随机平均梯度下降。
  • optim.Rprop:弹性反向传播。
  • optim.LBFGS:BFGS的改进。

学习率调整

class_LRScheduler

主要属性:

  • optimizer:关联的优化器。
  • last_epoch:记录epoch数。
  • base_lrs:记录初始学习率。

主要方法:

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

StepLR

功能:等间隔调整学习率

主要参数:

  • step_size:调整间隔数。
  • gamma:调整系数。

调整方式:lr=lr*gamma

MultiStepLR

功能:按给定间隔调整学习率

主要参数:

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

调整方式:lr=lr*gamma

ExponentialLR

功能:按指数衰减调整学习率。

主要参数:

  • gamma:指数的底。

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

CosineAnnealingLR

功能:余弦周期调整学习率。

主要参数:

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

调整方式:

ReduceLRonPlateau

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

主要参数:

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

LambdaLR

功能:自定义调整策略,设置不同参数组,有不同的学习率调整策略。

主要参数:

  • lr_lambda:function or list。

总结

  • 有序调整
  1. Step
  2. MultiStep
  3. Exponential
  4. CosineAnnealing
  • 自适应调整
  1. ReduceLRonPlateau
  • 自定义调整
  1. Lambda

学习率初始化:

  1. 设置较小数:0.01、0.001、0.0001
  2. 搜索最大学习率:《Cyclical Learning Rates for Training Neutal Networks》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值