赞
踩
Optimizer
优化器?首先来学习一下按照这里的学习文章,说一下重要的内容,讲一下基本逻辑;优点;缺点
※ Optimizer
优化器就是有如下不同的版本,主要解决的是关于梯度、学习率、样本批次、权重等计算
SGD (Stochastic Gradient Descent)
随机梯度下降法BGD (Batch Gradient Descent)
批量梯度下降法MBGD (Mini-batch Gradient Descent)
小批量梯度下降法n
梯度计算;收敛更稳定,速度较快;没有考虑数据集的稀疏度影响n=50~256
Momentum
动量梯度下降法NAG (Nesterov Accelerated Gradient)
牛顿动量梯度下降法Momentum
的改进,用了二阶指数平滑;表现更好;没有考虑不同参数的重要程度AdaGrad (Adaptive Gradient Algorithm)
自适应学习率梯度下降法Adam
Adagrad
与 Momentum
;能适应系数梯度,缓解梯度震荡;AdamW
Adam
有更好的泛化性能torch
中的调用torch.optim.SGD:随机梯度下降优化器
torch.optim.Adam:自适应矩估计优化器
torch.optim.Adagrad:自适应梯度优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
transformers
中的调用AdamW (PyTorch)
AdaFactor (PyTorch)
AdamWeightDecay (TensorFlow)
AdamW
的,就介绍一下这个吧AdamW
优化器torch.Optimizer
继承过来的,实现了自己的一个类 AdamW
。看一下参数params(Iterable[nn.parameter.Parameter])
:提供模型的参数lr(float)
:学习率,默认为 0.001
betas(Tuple[float,float])
,即Adam
中的 (b1,b2)
,默认为 (0.9,0.999)
eps
:epsilon,默认为 1e-06
weight_decay
:解耦后的权重缩减,默认为 0.0
correct_bias(bool)
:是否修复 Adam
中的偏差值 bias,默认为 Truestep()
,表示一步优化步骤。torch.optimizer
类,自己实现一个 torch.nn
,直接使用transformers
中的 trainingArguments
:TrainingArguments
中,可以设置 optim
属性,默认即为 adamw_torch
;可以设置 weight_decay, adam_beta1, adam_beta2, adam_epsilon
等属性的值Scheduler
调度器呢?Scheduler
调度器主要是,对于已经选择好的优化器 Optimizer
,利用epoch、时间等变化对学习率进行调整torch.optim.lr_scheduler
中为我们提供的一些调度器LambdaLR
:初始 lr 乘以给定函数MultiplicativeLR
:当前 lr 乘以给定函数StepLR
:以固定间隔成倍衰减初始 lrMultiStepLR
:以设定的时间间隔成倍衰减初始 lrExponentialLR
:指数衰减初始 lrCosineAnnealingLR
:余弦函数式变化 lrReduceLROnPlateau
:当某一指标不再提升时,降低 lrCyclicLR
:周期调整 lrCosineAnnealingWarmRestarts
:余弦退火transformers
中的调用首先最重要的一个,是 SchedulerType
相当于,我们通过这个类似枚举类,来指明我们使用的是哪种调度器
可以看一下,有线性的,余弦的,多项式的,常数的,带预热的等
※详细可以看官网API,每个调度器如何影响lr
比如这个是带预热的余弦调度器
最主要的还是配合 TrainingArguments
使用
参考 【Python】科研代码学习:七 TrainingArguments,Trainer
在 TrainingArguments
中,可以设置 lr_scheduler_type
,无需我们自己创建一个调度器,HF会按照输入的调度器名字,自动创建对应的调度器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。