梯度下降法,牛顿法等优化方法

梯度下降法
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

先通俗的解释一下梯度下降,比如你在山顶上,现在你遇到了急事,想在最短的时间内下山,假设每条路你都可以走,那么你该选择哪一条路径呢?当然,此刻你脑子里一闪而过的是选择最抖的那条路,虽然他很难走,但是他最短嘛,所以人生有时也是这样,前方的道路并不拥挤,只是你选择不同。其实这就是梯度下降的基本思想了。

梯度下降法,牛顿法等优化方法_第1张图片


如果损失函数是凸函数,那么我们有把握通过梯度下降来寻求最优解,但大多数情况下都是非凸的,这个时候我们可能会陷入局部最优解,针对这种情况,我们可以常识从不同初始点搜索最优值或者模拟退火等方法,在这先不细说。

举一个小小的例子帮助大家理解一下

首先我们要表示梯度,大家都知道斜率的概念,斜率越大,梯度越大,这可以通过导数表示,以线性回归为例

假设下面的h(x)是要拟合的函数,J(theta)为损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的样本个数,n是自变量的个数

梯度下降法,牛顿法等优化方法_第2张图片

(1)批量梯度下降法 (Batch Gradient Descent,BGD)

首先,损失函数J(theta)对theta求导,得到每个theta对应梯度:


由于我们的目标是最小化损失函数,所以我们基于负梯度方向更新theta

(此时更新步长取得1,更新步长长短可依据实际情况确定)

损失函数是凸函数,所以我们这样更新肯定可以得到最优解,但是这样每一次更新都需要所有的样本参与训练,当样本量较大时,迭代速度会非常慢,所以聪明的学者们又引入了随机梯度下降这一概念

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

随机梯度下降的‘随机’二字体现在样本抽样上,因为我们考虑到样本量非常大导致效率非常低问题,所以我们可以随机抽取一些样本来计算梯度更新theta,得到最优解,但这样伴随的噪音也较多,实际上是牺牲一定精度来提升效率问题。

总结

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

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


牛顿法   

 

   牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。

  具体步骤:

 我们主要讨论在一维的情况下,对于一个需要求解的优化函数f(x),对函数f(x)进行泰勒展开为二阶


即可以得到牛顿法的更新公式:


 其实就是选择一个接近函数f(x)零点的x0,计算相应的f(x0)和切线斜率f '(x0)(这里f '表示函数f的导数。然后我们计算穿过点(x0, f(x0)) 并且斜率为f'(x0)的直线和x轴的交点的x坐标

已经证明,如果f  ' 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果f  ' (x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

 

      从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)



拟牛顿法

拟牛顿法(Quasi-Newton Methods)是求解非线性优化问题最有效的方法之一,拟牛顿法和最速下降法(Steepest Descent Methods)一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法(Newton's Method)更为有效

拟牛顿法的基本思想如下。首先构造目标函数在当前迭代
   
的二次模型:
 
这里
   
是一个对称正定矩阵,于是我们取这个二次模型的最优解作为搜索方向,并且得到新的迭代点
   
,其中我们要求步长
   
满足Wolfe条件。这样的迭代与牛顿法类似,区别就在于用近似的Hesse矩阵
   
代替真实的Hesse矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵
   
的更新。现在假设得到一个新的迭代
   
,并得到一个新的二次模型:
我们尽可能地利用上一步的信息来选取
   
。具体地,我们要求
   
,从而得到




你可能感兴趣的:(梯度下降法,牛顿法等优化方法)