【深度学习】各种梯度下降优化方法总结


  • 斯坦福CS231 Lecture7
  • 梯度下降优化算法综述
  • 一文看懂各种神经网络优化算法:从梯度下降到Adam方法

梯度下降法是最小化目标函数J(θ)J(θ)的一种方法,其中,θRdθ∈Rd为模型参数,梯度下降法利用目标函数关于参数的梯度θJ(θ)∇θJ(θ)的反方向更新参数。学习率ηη决定达到最小值或者局部最小值过程中所采用的步长的大小。即,我们沿着目标函数的斜面下降的方向,直到到达谷底。

Batch gradient descent

  • 批梯度下降,对所有的样本计算梯度后求平均,并更新参数。
  • 因为在执行每次更新时,我们需要在整个数据集上计算所有的梯度,所以批梯度下降法的速度会很慢,同时,批梯度下降法无法处理超出内存容量限制的数据集。批梯度下降法同样也不能在线更新模型,即在运行的过程中,不能增加新的样本。

  • 对于凸误差函数,批梯度下降法能够保证收敛到全局最小值,对于非凸函数,则收敛到一个局部最小值。

SGD

随机梯度下降,对每个样本计算梯度,并更新一次参数。
  • SGD的运行速度更快
  • 可以用于在线学习
  • SGD以高方差频繁地更新,导致目标函数出现剧烈波动。
  • 与批梯度下降法的收敛会使得损失函数陷入局部最小相比,由于SGD的波动性,一方面,波动性使得SGD可以跳到新的和潜在更好的局部最优。另一方面,这使得最终收敛到特定最小值的过程变得复杂,因为SGD会一直持续波动。然而,已经证明当我们缓慢减小学习率,SGD与批梯度下降法具有相同的收敛行为,对于非凸优化和凸优化,可以分别收敛到局部最小值和全局最小值。

mini-batch GD

  • 小批量梯度下降法最终结合了上述两种方法的优点,在每次更新时使用n个小批量训练样本
  • 减少参数更新的方差,这样可以得到更加稳定的收敛结果
  • 可以利用最新的深度学习库中高度优化的矩阵优化方法,高效地求解每个小批量数据的梯度。


------

原始的梯度下降方法有以下问题:

  1. 在梯度平缓的维度下降非常慢,在梯度险峻的维度容易抖动
  2. 容易陷入局部极小值或鞍点。Zero gradient,gradient descent gets stuck (在高维空间中,鞍点比局部极小值更容易出现
  3. 选择一个合适的学习率可能是困难的。学习率太小会导致收敛的速度很慢,学习率太大会妨碍收敛,导致损失函数在最小值附近波动甚至偏离最小值。
  4. 学习率调整试图在训练的过程中通过例如退火的方法调整学习率,即根据预定义的策略或者当相邻两代之间的下降值小于某个阈值时减小学习率。然而,策略和阈值需要预先设定好,因此无法适应数据集的特点
  5. 对所有的参数更新使用同样的学习率。如果数据是稀疏的,同时,特征的频率差异很大时,我们也许不想以同样的学习率更新所有的参数,对于出现次数较少的特征,我们对其执行更大的学习率。

【深度学习】各种梯度下降优化方法总结_第1张图片

Moment

  • 在每次下降时都加上之前运动方向上的动量
  • 在梯度缓慢的维度下降更快,在梯度险峻的维度减少抖动。
  • 对于在梯度点处具有相同的方向的维度,其动量项增大,对于在梯度点处改变方向的维度,其动量项减小。因此,我们可以得到更快的收敛速度,同时可以减少摇摆。
v表示velocity 速率,即在原先运动的方向上再往前走一段

【深度学习】各种梯度下降优化方法总结_第2张图片

Nesterov

我们利用动量项算γvt1来更新参数θ。通过计算θγvt1能够告诉我们参数未来位置的一个近似值(梯度并不是完全更新),这也就是告诉我们参数大致将变为多少。通过计算关于参数未来的近似位置的梯度,而不是关于当前的参数θ的梯度,我们可以高效的求解。

【深度学习】各种梯度下降优化方法总结_第3张图片
【深度学习】各种梯度下降优化方法总结_第4张图片
动量法首先计算当前的梯度值(图中的小的蓝色向量),然后在更新的累积梯度(大的蓝色向量)方向上前进一大步,Nesterov加速梯度下降法NAG首先在先前累积梯度(棕色的向量)方向上前进一大步,计算梯度值,然后做一个修正(绿色的向量)。这个具有预见性的更新防止我们前进得太快,同时增强了算法的响应能力,这一点在很多的任务中对于RNN的性能提升有着重要的意义。

Adagrad

  • 把每一维度的梯度^2和记录下来,每次学习率都除以这个和
  • 每一维度的学习率不一样,且都在不断减小
  • 在梯度大的维度,减小下降速度;在梯度小的维度,加快下降速度
  • 让学习率适应参数,对于出现次数较少的特征,我们对其采用更大的学习率,对于出现次数较多的特征,我们对其采用较小的学习率。因此,Adagrad非常适合处理稀疏数据。
  • Adagrad算法的一个主要优点是无需手动调整学习率
  • Adagrad的一个主要缺点是它在分母中累加梯度的平方:由于每增加一个正项,在整个训练过程中,累加的和会持续增长。这会导致学习率变小以至于最终变得无限小,在学习率无限小时,Adagrad算法将无法取得额外的信息。
【深度学习】各种梯度下降优化方法总结_第5张图片

Added element-wise scaling of the gradient based on the historical sum of squares in each dimension


Adadelta

  • 是Adagrad的一种扩展算法,以处理Adagrad学习速率单调递减的问题。
  • 不是计算所有的梯度平方,Adadelta将计算计算历史梯度的窗口大小限制为一个固定值w
  • 无需设置默认的学习率,因为更新规则中已经移除了学习率。

RMSprop

  • 同样对AdaGrad的改进
【深度学习】各种梯度下降优化方法总结_第6张图片

Adam

  • 结合了Momentum和RMSprop的特点
  • 自适应学习率

【深度学习】各种梯度下降优化方法总结_第7张图片

Bias correction for the fact thatfirst and second momentestimates start at zero
Adam with beta1 = 0.9, beta2 = 0.999, and learning_rate = 1e-3 or 5e-4is a great starting point for many models!


你可能感兴趣的:(深度学习)