pytorch的优化器的作用:管理并更新模型中可学习参数的值, 使得模型输出更接近真实标签(更新采用是梯度下降)
一、optimizer的基本参数
defaults:优化器超参数
state:参数的缓存,如momentum的缓存
param_groups:管理的参数组
_step_count:记录更新次数,学习率调整中使用(比如要在第n次迭代后降低学习率)
二、optimizer的基本使用方法
zero_grad():清空所有参数的梯度,因为张量不会自动清零会自动累加,在梯度求导之前需要进行梯度清零
step():进行一步更新
add_param_groups():添加一组参数
state_dict():获取优化器当前状态信息字典
load_state_dict():加载状态信息字典
三、lr学习率
学习率的作用就是控制更新的步伐,防止loss激增导致梯度爆炸,设置一个相对合适的学习率有利于模型的快速收敛
公式:
w
=
w
i
−
l
r
∗
梯
度
w = w_i - lr*梯度
w=wi−lr∗梯度
四、动量
momentum(动量):结合当前梯度与上一次更新信息,用于当前更新,通俗的讲就是参考上一次的更新方向,利用相对较少迭代次数完成收敛
公式:
更
新
量
=
m
∗
上
一
次
的
更
新
量
+
梯
度
更新量 = m*上一次的更新量 + 梯度
更新量=m∗上一次的更新量+梯度
w
=
w
i
−
l
r
∗
更
新
量
w=w_i - lr*更新量
w=wi−lr∗更新量
五、optim.SGD
optim.SGD是pytorch中最常用的优化器
主要参数:
params:管理的参数组
lr:初始学习率
momentum:动量系数
weight_decay:L2正则化系数
nesterov:是否采用NAG,布尔变量
六、常见的优化器
1、optim.SGD:随机梯度下降法,大部分都会使用SGD
2、optim.Adagrad:自适应学习率梯度下降法
3、optim.RMSprop:Adagrad的改进
4、optim.Adadelta:Adagrad的改进
5、optim.Adam:RMSprop结合Momentum
6、optim.Adamax:Adam增加学习率上限
7、optim.SparseAdam:稀疏版的Adam
8、optim.ASGD:随机平均梯度下降
9、optim.Rprop:弹性反向传播,通常是在所有样本一起计算梯度时使用,但是现在一般是分批量计算
10、optim.LBFGS:BFGS的改进