最速梯度下降

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最速梯度下降相关的知识,希望对你有一定的参考价值。

参考技术A 梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法”。最速下降法越接近目标值,步长越小,前进越慢。

最速下降法越接近目标值,步长越小,前进越慢。

[if !vml]

[endif]梯度下降法的搜索迭代示意图如图所示

梯度下降法在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。实际上收敛速度并不快。 其主要原因是每次迭代后下一次的搜索方向总是和前一次相互垂直,产生锯齿现象,使得收敛速度较为缓慢。

最速下降法的一种简单形式是:

[if !vml]

[endif]

在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

1 )批量梯度下降法(Batch Gradient Descent,BGD),是梯度下降的batch版本

[if !vml]

[endif][if !vml]

[endif]

2 )随机梯度下降(Stochastic Gradient Descent , SGD)。

对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都利用一个batch的数据,而非整个训练集。即:

[if !vml]

[endif]

随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

优点:

当训练数据太多时,利用整个数据集更新往往时间上不显示。batch的方法可以减少机器的压力,并且可以更快地收敛。

当训练集有很多冗余时(类似的样本出现多次),batch方法收敛更快。以一个极端情况为例,若训练集前一半和后一半梯度相同。那么如果前一半作为一个batch,后一半作为另一个batch,那么在一次遍历训练集时,batch的方法向最优解前进两个step,而整体的方法只前进一个step。

随机梯度下降每次迭代只使用一个样本,迭代一次计算量为n2,当样本个数m很大的时候,随机梯度下降迭代一次的速度要远高于批量梯度下降方法。两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

对批量梯度下降法和随机梯度下降法的总结:

批量梯度下降 ---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

随机梯度下降 ---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。

梯度下降法Gradient descent(最速下降法Steepest Descent)

 

最陡下降法(steepest descent method)又称梯度下降法(英语:Gradient descent)是一个一阶最优化算法。

 

函数值下降最快的方向是什么?沿负梯度方向  d=gk

以上是关于最速梯度下降的主要内容,如果未能解决你的问题,请参考以下文章

最速梯度下降法及matlab实践

最速梯度下降法及matlab实践

为啥随机梯度下降方法能够收敛

梯度下降法Gradient descent(最速下降法Steepest Descent)

关于对率回归的求解,梯度下降和解析解相比有啥特点和优势,为啥?

Python实现梯度法(最速上升(下降)法)寻找函数极大(极小)值