Adam等机器学习深度学习主流优化算法简析

什么是优化算法?

简单来说就是一种通过迭代逼近最优解的方法,即最优解的渐近估计方法。

深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程,目前Adam应该是最常用的优化算法。

为什么需要优化算法?

1.有的问题并没有解析解,只能迭代求得近似解

2.问题有解析解,但是求解析解的计算复杂度大的无法接受

3.求解析解有新数据进来时候需要全部重算,而online算法则只需要更新一下

无动量或一阶动量方法

人工智能进阶必备——熟知机器学习深度学习主流优化算法

梯度下降基础公式

BGD(Batch gradient descent/批量梯度下降):

  • 简介:每一步迭代都用到训练集所有数据
  • 缺点:该方法缺点是计算复杂度,存储复杂度都很高,只适用于小样本
  • 优点:全局最优解,实现简单

SGD(Stochastic Gradient Descent/随机梯度下降)/MBGD(Mini-batch Gradient Descent/小批量梯度下降法):

  • 简介:每步迭代用一小批样本
  • 缺点:参数初始化敏感,容易陷入局部最小值,一般不是全局最优,收敛慢(路径是锯齿状的)。
  • 优点:较BGD训练速度快,但依旧算是慢,经常会在局部最小值处震荡。
  • 注意点:选取batch时候要尽量保持抽取的随机性,即熵最大准则。然后随机抽取的方式会引入噪声,所以即使算法到达最优解附近,算法仍会震荡,所以我们需要随着时间的推移逐渐降低学习率。

SGD with Momentum(引入动量)

  • 简介:在SGD基础上引入一阶动量,即针对SGD的震荡问题,通过引入动量,抑制震荡,加速收敛。一阶动量为各个时刻梯度方向的指数移动平均值,
  • 缺点:参数初始化敏感,容易陷入局部最小值,不是全局最优解,收敛慢

人工智能进阶必备——熟知机器学习深度学习主流优化算法

引入一阶动量的SGD

SGD with Nesterov Acceleration

人工智能进阶必备——熟知机器学习深度学习主流优化算法

梯度下降方向

  • 简介:针对SGD-M的步骤一进行优化,SGD-M在t时刻的梯度下降方向,由历史累计动量与当前梯度方向共同决定,而本方法则选择先按照累计动量方向走一步,通过用下一步的梯度方向与历史累计动量结合来计算SGD-M中的梯度方向
  • 缺点:参数初始化敏感,容易陷入局部最小值,一般不是全局最优,收敛慢(路径是锯齿状的)
  • 优点:可以在梯度大跳跃后,对当前梯度进行校正。

二阶动量/自适应学习率

AdaGrad:

  • 简介:希望对经常更新的参数,学习率低。而对更新少的参数,需要更大的学习速率。
  • 缺点:需要人工设置全局学习率,参数更新次数多之后,可能导致训练提前终止,因为该算法从训练开始的时候就累积梯度的平方,导致学习率会过早和过量的减小。
  • 优点:不需要对每个学习率调节,可自适应对不同参数有不同学习率。在稀疏数据的场景下表现优异。

AdaDelta:

  • 简介:针对二阶动量持续累积导致训练提前终止的情况,引入时间窗,即将累积量改为指数移动平均值改为过去一段时间,而非一直累积。
  • 缺点:会在局部最小值附近抖动
  • 优点:不需要预设学习率,中期加速效果好,且避免参数更新两边单位不统一

RMSProp:

  • 简介:基于AdaGrad梯度累积的思路,将梯度累积改为指数加权移动平均的方法,改善AdaGrad在非凸优问题上到达局部凸结构之前梯度已经变得太小,RMSProp通过指数衰减平均丢掉较远的历史,使其在找到凸碗状结构时学习率不至于太小,可以迅速收敛。
  • 缺点:多引入了一个超参数
  • 优点:在非凸问题上会比AdaGrad方法更好

Adam:

  • 简介:将Momentum与RMSProp结合,引入动量与二阶据估计(指数加权),且通过校正因子提高对超参数的鲁棒。
  • 优点:对超参数非常鲁棒,收敛速度快

NAdam:

  • 简介:引入Nesterov动量的Adam,即将Adam的动量添加方式改为Nesterov动量
  • 优点:对梯度矫正能力强

你可能感兴趣的:(数据挖掘,深度学习,机器学习)