机器学习基础__04__常见的机器学习优化算法

目录

 

1. SGD

2. Momentum 动量法

3. Nesterov Momentum 牛顿动量法

4. Adagrad

5. RMSprop

6. Adam


1. SGD

我们通常所说的SGD,指的是小批量随机梯度下降算法。每次迭代中计算batch_size个样本的梯度,不仅计算效率高,而且收敛稳定。它是目前深度学习训练优化的主流方法。
注意:\alpha 系数一般取0.001, 0.003, 0.01, 0.03, 0.1,按3的倍数调整。

三种形式的梯度下降法,面临以下挑战

  • 选择适当的学习率α\alphaα 较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛。
  • 目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数m,每执行完m次训练便减小学习率,或者当cost function的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点。
  • 上述方法中, 每个参数的 learning rate 都是相同的,这种做法是不合理的:如果训练数据是稀疏的,并且不同特征的出现频率差异较大,那么比较合理的做法是对于出现频率低的特征设置较大的学习速率,对于出现频率较大的特征数据设置较小的学习速率。
  • 近期的的研究表明,深层神经网络之所以比较难训练,并不是因为容易进入local minimum。相反,由于网络结构非常复杂,在绝大多数情况下即使是 local minimum 也可以得到非常好的结果。而之所以难训练是因为学习过程容易陷入到马鞍面中,即在坡面上,一部分点是上升的,一部分点是下降的。而这种情况比较容易出现在平坦区域,在这种区域中,所有方向的梯度值都几乎是 0。

2. Momentum 动量法

引入
如果把梯度下降法想象成一个小球从山坡到山谷的过程,那么小球是这样移动的:从A点开始,计算当前A点的坡度,沿着坡度最大的方向走一段路,停下到B。在B点再看一看周围坡度最大的地方,沿着这个坡度方向走一段路,再停下。循环往复。
确切的来说,这并不像一个球,更像是一个正在下山的盲人,每走一步都要停下来,用拐杖来来探探四周的路,再走一步停下来,周而复始,直到走到山谷。而一个真正的小球要比这聪明多了,从A点滚动到B点的时候,小球带有一定的初速度,在当前初速度下继续加速下降,小球会越滚越快,更快的奔向谷底。momentum 动量法就是模拟这一过程来加速神经网络的优化的。

动量法的直观图示

Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力。

梯度更新公式:
                        v_{t}=\gamma \cdot v_{t-1}+a \cdot \nabla_{\Theta} J(\Theta) 
                        \Theta=\Theta-v_{t}
注:v_t_-_1 其实是历史累积梯度,\gamma是动量系数,一般取0.9。

3. Nesterov Momentum 牛顿动量法

在小球向下滚动的过程中,我们希望小球能够提前知道在哪些地方坡面会上升,这样在遇到上升坡面之前,小球就开始减速。这方法就是Nesterov Momentum,其在凸优化中有较强的理论保证收敛。并且,在实践中Nesterov Momentum也比单纯的 Momentum 的效果好。

与Momentum唯一区别就是,计算梯度的不同。
                      v_{t}=\gamma \cdot v_{t-1}+a \cdot \nabla_{\Theta} J\left(\Theta-\gamma v_{t-1}\right)
                      \Theta=\Theta-v_{t}
其核心思想是:注意到 momentum 方法,如果只看 γ * v 项,那么当前的 θ经过 momentum 的作用会变成 θ-γ * v。因此可以把 θ-γ * v这个位置看做是当前优化的一个”展望”位置。


上面介绍的优化算法,都是采用相同的学习率\alpha。以下将介绍自适应算法,即学习率\alpha自动调整

4. Adagrad

Adagrad算法能够在训练中自动的对learning rate进行调整,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。

g=\frac{\partial}{\partial \theta} J\left(\theta\right)
对于SGD,更新参数是这样的
\theta:=\theta-\alpha g

那么Adagrad更新参数是:
\theta:=\theta- \frac{\epsilon}{\delta+\sqrt{r}} g,其中r是g的累积平方。\delta是为了防止分母是0,通常取10^{-8}\epsilon为全句学习率,通常取0.001。

机器学习基础__04__常见的机器学习优化算法_第1张图片

优点:
自适应调整学习率

缺点:
任然要设置一个变量ϵ
经验表明,在普通算法中也许效果不错,但在深度学习中,深度过深时会造成训练提前结束。
但是这里存在一个致命的问题就是AdaGrad容易受到过去梯度的影响,陷入“过去“无法自拔,因为梯度很容易就会累积到一个很大的值,此时学习率就会被降低的很厉害,因此AdaGrad很容易过分的降低学习率率使其提前停止,怎么解决这个问题呢?RMSProp算法可以很好的解决该问题。

5. RMSprop

RMSprop与Adagrad唯一的不同在于,对累积梯度做了衰减来控制历史梯度的获取。

机器学习基础__04__常见的机器学习优化算法_第2张图片

通常:平滑系数\delta = 10^{-8}\epsilon = 0.001
经验上,RMSProp 已被证明是一种有效且实用的深度神经网络优化算法

优点:
相比于AdaGrad,这种方法很好的解决了深度学习中过早结束的问题
适合处理非平稳目标,对于RNN效果很好

缺点:
又引入了新的超参,衰减系数ρ
依然依赖于全局学习速率

6. Adam

Adam \approx 动量法 + RMSprop + 修正偏差

机器学习基础__04__常见的机器学习优化算法_第3张图片

 

 

参考:
1. 优化方法总结  (本文以这个为范本)
2. 动量法讲解不错
3. 优化方法 (good)
4. 优化方法总结
5. 优化方法总结2

 

 

你可能感兴趣的:(机器学习基础知识,Adagrad,RMSprop,Adam,动量法,SGD)