梯度下降、随机梯度下降、批量梯度下降

前言
最近实验集体学习机器学习,其中涉及到梯度下降及其变体,不是很清楚,看了好多资料和博客。在这里整理总结一下。如果哪里写得不对,请大家指正。

一、批量梯度下降(BGD)

        梯度下降是机器学习中应用最广泛的优化算法,也是最常见的优化算法。
        在机器学习中反复出现的一个问题:好的泛化需要大的训练集,但大的训练集的计算代价也大。 一般来说,代价函数越小,就也意味着模型拟合得越好。所以梯度下降就是帮助我们最小化代价函数、损失函数的常用方法。
下面J(theta)是代价函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的记录条数,i是参数的个数。用hθ(x)表示函数计算输出的结果,用y表示期望的输出值;则hθ(x)-y表示误差

在这里插入图片描述
在这里插入图片描述

批量梯度下降的思路如下:

(1)若我们有m组训练样本,在训练过程中,我们希望误差越小越好,所以来调整参数theta使得代价函数J(θ)尽可能的小。

(2)将J(theta)对theta求偏导,得到每个theta对应的的梯度(J下降最快的方向).

在这里插入图片描述
(3)要最小化代价函数,那么我们更新参数theta的时候,就要按每个参数theta梯度的负方向来更新参数,如下:

在这里插入图片描述

注意!!!

普通的梯度下降算法在更新回归系数时要遍历整个数据集,它是一种批处理方法,它得到的是一个全局最优解,每迭代一步,都要用到训练集中所有的数据,但是当训练数据特别庞大时,可能收敛非常慢。所以,为了解决这一问题,我们引入了梯度下降的变体,随机梯度下降(SGD)。

二、随机梯度下降(SGD)


随机梯度下降在计算下降最快的方向时时随机选一个数据进行计算,而不是扫描全部训练数据集,这样就加快了迭代速度。
(1)对比批量梯度下降的代价函数,随机梯度下降的代价函数可写做如下:

在这里插入图片描述
(2)每个样本的代价函数,对theta求偏导,得到其梯度。求解过程如下:

在这里插入图片描述
(3)更新参数theta
在这里插入图片描述
注意!!!这样做不如完全梯度下降的精确度高,可能会走很多弯路,但整体趋势是走向minmum,即随机梯度下降并不是沿着J(θ)下降最快的方向收敛,而是震荡的方式趋向极小点。

三、区别


对比梯度下降和随机梯度下降和批量梯度下降,这里借助[楼燚(yì)航的blog] (http://www.cnblogs.com/louyihang-loves-baiyan/)
1.梯度下降:在梯度下降中,对于θ的更新,所有的样本都有贡献,也就是参与调整θ.其计算得到的是一个标准梯度。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦~
2.随机梯度下降:可以看到多了随机两个字,随机也就是说我用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,容易陷入到局部最优解中
从公式中我们也可以发现随机梯度的权值更新公式里调整项没有累加符号,说明随机梯度下降中只用到了训练集的一个样本,最后得到的可能是全局最优解,也可能是局部最优解。
3.批量梯度下降:其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。
从公式中可以看出,批量梯度下降算法每迭代一步,要用到训练集的所有样本,最后得到的是一个全局最优解。

四、随机梯度和批量梯度的实现(Python)差别


参见博客:点击即可访问

猜你喜欢

转载自blog.csdn.net/u010947534/article/details/82807648
今日推荐