随机梯度下降(SGD)和批量梯度下降以及拟牛顿法

批量梯度下降和随机梯度下降是机器学习中很常用的学习方法,批量梯度下降更为准确,但是每一轮训练都要遍历全部的样本而随机梯度下降则没有这一问题,但是他最后的结果会在局部最优解附近波动。下面看看这两个算法吧!

批量梯度下降

顾名思义,我们把所有的训练样本看做一批,每次更新参数都要对他们一起遍历来判断走向,例如对于一个实际的问题,我们可以用下面的式子来表示我们的假设:


我们希望h θ(x)可以准确的预测新的样本也就是,新的样本的结果与我们的结果尽可能的接近,可以用下面的代价函数表示这一思想:

那么我们的目标就是找到合适的θ使得J的值最小,此时使用批量梯度下降找到合适的θ:


随机梯度下降(SGD)和批量梯度下降以及拟牛顿法_第1张图片

可以看到他是对于所有的样本进行了遍历在每次梯度下降的过程中。

当上式收敛时则退出迭代,何为收敛,即前后两次迭代的值不再发生变化了。一般情况下,会设置一个具体的参数,当前后两次迭代差值小于该参数时候结束迭代。注意以下几点:
(1) a 即learning rate,决定的下降步伐,如果太小,则找到函数最小值的速度就很慢,如果太大,则可能会出现overshoot the minimum的现象;
(2) 初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
(3) 越接近最小值时,下降速度越慢;
(4) 计算批梯度下降算法时候,计算每一个θ值都需要遍历计算所有样本,当数据量的时候这是比较费时的计算。

批梯度下降算法的步骤可以归纳为以下几步:

(1)先确定向下一步的步伐大小,我们称为Learning rate ;
(2)任意给定一个初始值:θ向量,一般为0向量
(3)确定一个向下的方向,并向下走预先规定的步伐,并更新θ向量
(4)当下降的高度小于某个定义的值,则停止下降;

随机梯度下降

随机梯度下降与批量梯度下降最大的区别是他不是使用全部的样本进行一次下降,而是使用一部分或者一个样本进行下降,我们随机的选择样本选择一个或每次选择N个直到收敛。

随机梯度下降(SGD)和批量梯度下降以及拟牛顿法_第2张图片

在对于大数量样本的情况下假设我们需要10轮达到收敛,那么批量梯度需要10*K次迭代,而随机梯度可能在K/2次就达到收敛,会快得多。但是两者各有优缺点。

主要就是在于1是速度,2是准确性。还有就是BGD的学习速率比SGD大。

拟牛顿法

前一篇文章说了牛顿法下降更快但是在特征过多的情况下海森阵的计算很慢,所以不适用于机器学习,除了上述的SGD与BGD,参数优化还可以使用伪牛顿法。

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

拟牛顿法就是模仿牛顿法,主要是不用二阶偏导数构造出近似海森阵的正定对称阵。

拟牛顿条件

来自
http://blog.csdn.net/itplus/article/details/21896619

随机梯度下降(SGD)和批量梯度下降以及拟牛顿法_第3张图片

随机梯度下降(SGD)和批量梯度下降以及拟牛顿法_第4张图片

常见的拟牛顿法

DFP算法:http://blog.csdn.net/itplus/article/details/21896981

BFGS算法:
http://blog.csdn.net/itplus/article/details/21897443

L-BFGS算法:
http://blog.csdn.net/itplus/article/details/21897715

你可能感兴趣的:(随机梯度下降(SGD)和批量梯度下降以及拟牛顿法)