优化器

**









优化器总结

机器学习中,有很多优化方法来试图寻找模型的最优解。比如神经网络中可以采取最基本的梯度下降法。


梯度下降法(Gradient Descent)

梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法:标准梯度下降法(GD, Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及批量梯度下降法(BGD, Batch Gradient Descent)。

1. 标准梯度下降法(GD)

  • 假设要学习训练的模型参数为WW时刻的模型参数。
  • 从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。
  • 基本策略可以理解为”在有限视距内寻找最快路径下山“,因此每走一步,参考当前位置最陡的方向(即梯度)进而迈出下一步。可以形象的表示为:

二维参数的梯度下降描述

评价:标准梯度下降法主要有两个缺点:

  • 训练速度慢:每走一步都要要计算调整下一步的方向,下山的速度变慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。会使得训练过程及其缓慢,需要花费很长时间才能得到收敛解。
  • 容易陷入局部最优解:由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为0,使得模型参数不在继续更新。

2. 批量梯度下降法(BGD)

  • 假设批量训练样本总数为nn时刻的模型参数。
  • 从表达式来看,模型参数的调整更新与全部输入样本的代价函数的和(即批量/全局误差)有关。即每次权值调整发生在批量样本输入之后,而不是每输入一个样本就更新一次模型参数。这样就会大大加快训练速度。
  • 基本策略可以理解为,在下山之前掌握了附近的地势情况,选择总体平均梯度最小的方向下山。

评价:

  • 批量梯度下降法比标准梯度下降法训练时间短,且每次下降的方向都很正确。

3. 随机梯度下降法(SGD)

  • 对比批量梯度下降法,假设从一批训练样本nn,这里虽然引入了随机性和噪声,但期望仍然等于正确的梯度下降。
  • 基本策略可以理解为随机梯度下降像是一个盲人下山,不用每走一步计算一次梯度,但是他总能下到山底,只不过过程会显得扭扭曲曲。

  • 这里写图片描述

评价

  • 优点:
  • 虽然SGD需要走很多步的样子,但是对梯度的要求很低(计算梯度快)。而对于引入噪声,大量的理论和实践工作证明,只要噪声不是特别大,SGD都能很好地收敛。
  • 应用大型数据集时,训练速度很快。比如每次从百万数据样本中,取几百个数据点,算一个SGD梯度,更新一下模型参数。相比于标准梯度下降法的遍历全部样本,每输入一个样本更新一次参数,要快得多。
  • 缺点:
  • SGD在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确。
  • 此外,SGD也没能单独克服局部最优解的问题。

动量优化法

动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。

NAG在Tensorflow中与Momentum合并在同一函数tf.train.MomentumOptimizer中,可以通过参数配置启用。
 
   
   
   
   
  • 1

1. Momentum

  • 使用动量(Momentum)的随机梯度下降法(SGD),主要思想是引入一个积攒历史梯度信息动量来加速SGD。
  • 从训练集中取一个大小为nn时刻模型参数。
  • 动量主要解决SGD的两个问题:一是随机梯度的方法(引入的噪声);二是Hessian矩阵病态问题(可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题)。
  • 理解策略为:由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。

2. NAG

  • 牛顿加速梯度(NAG, Nesterov accelerated gradient)算法,是Momentum动量算法的变种。更新模型参数表达式如下:
    {vt=αvt1+ηtΔJ(Wtαvt1)Wt+1=Wtvt{vt=αvt−1+ηtΔJ(Wt−αvt−1)Wt+1=Wt−vt
    。然而,在随机梯度情况下,Nesterov动量对收敛率的作用却不是很大。

自适应学习率优化算法

自适应学习率优化算法针对于机器学习模型的学习率,传统的优化算法要么将学习率设置为常数要么根据训练次数调节学习率。极大忽视了学习率其他变化的可能性。然而,学习率对模型的性能有着显著的影响,因此需要采取一些策略来想办法更新学习率,从而提高训练速度。
目前的自适应学习率优化算法主要有:AdaGrad算法RMSProp算法Adam算法以及AdaDelta算法


1.AdaGrad算法

思想:

  • AdaGrad算法,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有个快速下降的学习率,而具有小梯度的参数在学习率上有相对较小的下降。

算法描述:

  • AdaGrad算法优化策略一般可以表示为:
    Wt+1=Wtη0tt=1(gt,i)+ϵ−−−−−−−−−−−−√gt,iWt+1=Wt−η0∑t′=1t(gt′,i)+ϵ⊙gt,i
    的梯度。
  • 从表达式可以看出,对出现比较多的类别数据,Adagrad给予越来越小的学习率,而对于比较少的类别数据,会给予较大的学习率。因此Adagrad适用于数据稀疏或者分布不平衡的数据集。
  • Adagrad 的主要优势在于不需要人为的调节学习率,它可以自动调节;缺点在于,随着迭代次数增多,学习率会越来越小,最终会趋近于0。

2.RMSProp算法

思想:

  • RMSProp算法修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好。

算法描述:

  • RMSProp算法的一般策略可以表示为:
    ⎧⎩⎨⎪⎪E[g2]t=αE[g2]t1+(1α)g2tWt+1=Wtη0E[g2]t+ϵ−−−−−−−−√gt{E[g2]t=αE[g2]t−1+(1−α)gt2Wt+1=Wt−η0E[g2]t+ϵ⊙gt
    是一个取值很小的数(一般为1e-8)为了避免分母为0。
  • RMSProp借鉴了Adagrad的思想,观察表达式,分母为E[g2]

你可能感兴趣的:(pytorch)