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()保存和加载模型,接着当前的状态往下训练。
学习率
梯度下降:
更新后:
学习率(learning rate)控制更新的步伐。
对于函数,学习率最佳为0.125,下图学习率为0.13666时效果最好,不能太大太小。
Momentum
动量冲量:结合当前梯度与上一次更新信息,用于当前更新。
指数加权平均:
思想:距离当前时刻越远,它对当前时刻的平均值的影响就越小;距离当前时刻越近,它对当前时刻的平均值的影响就越大。
的作用为控制记忆周期,通常为0.9,多个
值的影响如下:
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:调整系数。
调整方式:
MultiStepLR
功能:按给定间隔调整学习率
主要参数:
- milestones:设定调整时刻数。
- gamma:调整系数。
调整方式:
ExponentialLR
功能:按指数衰减调整学习率。
主要参数:
- gamma:指数的底。
调整方式:
CosineAnnealingLR
功能:余弦周期调整学习率。
主要参数:
- T_max:下降周期。
- eta_min:学习率下限。
调整方式:
ReduceLRonPlateau
功能:监控指标,当指标不再变化则调整。
主要参数:
- mode:min/max 两种模式。
- factor:调整参数。
- patience:“耐心”,接受几次不变化。
- cooldown:“冷却时间”,停止监控一段时间。
- verbose:是否打印日志。
- min_lr:学习率下降。
- eps:学习率衰减最小值。
LambdaLR
功能:自定义调整策略,设置不同参数组,有不同的学习率调整策略。
主要参数:
- lr_lambda:function or list。
总结
- 有序调整
- Step
- MultiStep
- Exponential
- CosineAnnealing
- 自适应调整
- ReduceLRonPlateau
- 自定义调整
- Lambda
学习率初始化:
- 设置较小数:0.01、0.001、0.0001
- 搜索最大学习率:《Cyclical Learning Rates for Training Neutal Networks》