Pytorch学习——常用优化器区别和优缺点

使用

import torch.optim as optim
optimizer = optim.Adam(net.parameters(), lr=eval(LR_G))

典型的梯度下降法GD(gradient descent)

  • 介绍:梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量
  • 特点:标准下降时在权值更新前汇总所有样例得到的标准梯度,随机下降则是通过考察每次训练实例来更新。

批量梯度下降法BGD(Batch Gradient Descent)

  • 做法:针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。
  • 优点:全局最优解;易于并行实现;
  • 缺点:当样本数据很多时,计算量开销大,计算速度慢

小批量梯度下降法MBGD(mini-batch Gradient Descent)

  • 做法:把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性
  • 优点:减少了计算的开销量,降低了随机性

随机梯度下降算法SGD(stochastic gradient descent)

  • 做法:每个数据都计算算一下损失函数,然后求梯度更新参数。
  • 优点:计算速度快
  • 缺点:收敛性能不好

总结:SGD可以看作是MBGD的一个特例,及batch_size=1的情况。在深度学习及机器学习中,基本上都是使用的MBGD算法。

动量优化算法(Momentum)

  • 做法:使用动量(Momentum)的随机梯度下降法(SGD),可实现惯性保持,主要思想是引入一个积攒历史梯度信息动量来加速SGD。用中学物理来解释,沿山体滚下的铁球,向下的力稳定不变,产生动量不断积累,速度越来越快;而左右的弹力总是在不停的切换,动量积累的结果是相互抵消,自然减弱了球的来回震荡

  • 优点:能够使得梯度越过山谷和鞍点,也即跳出局部最优,收敛到全局最优。

  • 公式Pytorch学习——常用优化器区别和优缺点_第1张图片

  • 推荐参数值:α表示动力的大小,一般取值为0.9(表示最大速度10倍于SGD)

AdaGrad

  • 做法:通过获取对环境的感知,来解决不同参数应该使用不同的更新速率的问题。Adagrad自适应地为各个参数分配不同学习率的算法。其采用了“历史梯度平方和”来衡量不同参数的梯度的稀疏性,取值越小,步幅越大,梯度越稀疏。
  • 公式Pytorch学习——常用优化器区别和优缺点_第2张图片

Adam

  • 做法:Adam方法将惯性保持和环境感知这两个优点集于一身。其中动量直接并入了梯度一阶矩(指数加权)的估计。其次,相比于缺少修正因子导致二阶矩估计可能在训练初期具有很高偏置的RMSProp,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩估计。

  • 公式
    Pytorch学习——常用优化器区别和优缺点_第3张图片Pytorch学习——常用优化器区别和优缺点_第4张图片

  • 推荐参数值:eps=1e-8, beta1=0.9, beta2=0.999。在实际操作中,推荐Adam作为默认算法,一般比RMSProp要好一点。

基于梯度的优化算法前后关系图
Pytorch学习——常用优化器区别和优缺点_第5张图片

你可能感兴趣的:(机器学习,深度学习,pytorch)