Pytorch 教程 4-优化器

四、优化器Optim


  • 优化器基类(Optimizer):pytorch中所有的优化器都是Optimizer的子类
    • 定义的常用方法
      • zero_grad()
      • step(closure)
      • state_dict()
      • load_state_dict(state_dict)
      • add_param_group(param_group)
  • 参数组(Param_groups)
    • optimizer对参数的管理是基于组的概念,可以为每一组参数配置特定的lr,momentum,weight_decay等
    • 参数组在optimizer中表现为一个list(self.param_groups),其中每个元素时dict,表示一个参数及其相应配置,在dict中包含’params’、’weight_decay’、’lr’、’momentum’等字段
  • zero_grad()
    • 将梯度清零,由于PyTorch不会自动清零梯度,所以在每一次更新会进行此操作
  • state_dict()
    • 获取模型当前的参数,以一个有序字典形式返回。这个有序字典中,key 是各层参数名,value 就是参数。
  • load_state_dict(state_dict)
    • 将state_dict中的参数加载到当前网络
  • add_param_group()
    • 给optimizer管理的参数组中增加一组参数,可为该组参数定制lr、momentum、weight_decay等
  • step(closure)
    • 执行一步权值更新,其中可传入参数closure(一个闭包)

4.1 torch.optim.SGD

  • torch.optim.SGD(params, lr, momentum=0, dampening=0, weight_decay=0, nesterov=False)
    • SGD 指stochastic gradient descent,即随机梯度下降,随机选取部分数据集参与计算,是梯度下降的 batch 版本

4.2 torch.optim.ASGD

  • torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)
    • ASGD 也称为 SAG,表示随机平均梯度下降(Averaged Stochastic Gradient Descent),简单地说 ASGD 就是用空间换时间的一种 SGD

4.3 torch.optim.Rprop

  • torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))
    • 实现 Rprop 优化方法(弹性反向传播),该优化方法适用于 full-batch,不适用于 mini-batch

4.4 torch.optim.Adagrad

  • torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)
    • 实现 Adagrad 优化方法(Adaptive Gradient),Adagrad 是一种自适应优化方法,是自适应的为各个参数分配不同的学习率。这个学习率的变化,会受到梯度的大小和迭代次数的影响。梯度越大,学习率越小;梯度越小,学习率越大。缺点是训练后期,学习率过小,因为 Adagrad 累加之前所有的梯度平方作为分母。

4.5 torch.optim.Adadelta

  • torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e06, weight_decay=0)
    • 实现 Adadelta 优化方法。Adadelta 是 Adagrad 的改进。Adadelta 分母中采用距离当前时间点比较近的累计项,这可以避免在训练后期,学习率过小。

4.6 torch.optim.RMSprop

  • torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e08, weight_decay=0, momentum=0, centered=False)
    • 实现 RMSprop 优化方法,RMS 是均方根(root meam square)的意思。RMSprop 和 Adadelta 一样,也是对 Adagrad 的一种改进。RMSprop 采用均方根作为分母,可缓解 Adagrad 学习率下降较快的问题,并且引入均方根,可以减少摆动

4.7 torch.optim.Adam(AMSGrad)

  • torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e08, weight_decay=0, amsgrad=False)
    • 实现 Adam(Adaptive Moment Estimation))优化方法。Adam 是一种自适应学习率的优化方法,Adam 利用梯度的一阶矩估计和二阶矩估计动态的调整学习率。Adam 的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

4.8 torch.optim.Adamax

  • torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e08, weight_decay=0)
    • 实现 Adamax 优化方法。Adamax 是对 Adam 增加了一个学习率上限的概念,所以也称之为 Adamax。

4.9 torch.optim.SparseAdam

  • torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)
    • 针对稀疏张量的一种“阉割版”Adam 优化方法。

4.10 torch.optim.LBFGS

  • torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)
    • 实现 L-BFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno)优化方法。L-BFGS 属于拟牛顿算法。L-BFGS 是对 BFGS 的改进,特点就是节省内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值