先通俗的解释一下梯度下降,比如你在山顶上,现在你遇到了急事,想在最短的时间内下山,假设每条路你都可以走,那么你该选择哪一条路径呢?当然,此刻你脑子里一闪而过的是选择最抖的那条路,虽然他很难走,但是他最短嘛,所以人生有时也是这样,前方的道路并不拥挤,只是你选择不同。其实这就是梯度下降的基本思想了。
如果损失函数是凸函数,那么我们有把握通过梯度下降来寻求最优解,但大多数情况下都是非凸的,这个时候我们可能会陷入局部最优解,针对这种情况,我们可以常识从不同初始点搜索最优值或者模拟退火等方法,在这先不细说。
举一个小小的例子帮助大家理解一下
首先我们要表示梯度,大家都知道斜率的概念,斜率越大,梯度越大,这可以通过导数表示,以线性回归为例
假设下面的h(x)是要拟合的函数,J(theta)为损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的样本个数,n是自变量的个数
(1)批量梯度下降法 (Batch Gradient Descent,BGD)
首先,损失函数J(theta)对theta求导,得到每个theta对应梯度:
由于我们的目标是最小化损失函数,所以我们基于负梯度方向更新theta
(此时更新步长取得1,更新步长长短可依据实际情况确定)
损失函数是凸函数,所以我们这样更新肯定可以得到最优解,但是这样每一次更新都需要所有的样本参与训练,当样本量较大时,迭代速度会非常慢,所以聪明的学者们又引入了随机梯度下降这一概念
(2)随机梯度下降法 (Stochastic Gradient Descent,SGD)
随机梯度下降的‘随机’二字体现在样本抽样上,因为我们考虑到样本量非常大导致效率非常低问题,所以我们可以随机抽取一些样本来计算梯度更新theta,得到最优解,但这样伴随的噪音也较多,实际上是牺牲一定精度来提升效率问题。
总结
批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。
牛顿法
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (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)更为有效