机器学习基础——梯度下降

来源:互联网 发布:精彩返奖统计软件 编辑:程序博客网 时间:2024/05/17 08:33

一、概述

最近看了随机梯度下降算法,虽然比较基础简单,但是在机器学习领域里面有着广泛的运用。这里将随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )进行对比。以便理解和记忆。

二、梯度下降

梯度下降法:
①先随机给出参数的一组值,然后按代价函数(或者叫损失函数)的梯度方向更新参数。使得在每次更新后,结构都能够让损失函数变小,最终达到全局最小值。
②在梯度下降法中,目标函数J其实可以看做是参数的函数,因为在给出了样本和样本对应的值,目标函数J就只剩下参数部分了,这时可以把参数看做是自变量,则目标函数变成参数的函数了。
③梯度下降算法同时更新代价函数中的每个参数,且每个参数更新的形式是一样的,即用上一次该参数的值减掉学习率乘以目标函数对该参数的偏导数即使得代价函数沿着变化最快的方向移动。(ps:不了解梯度的同学可以上网看看
④当学习速率固定(但不能太大),梯度下降法也是可以收敛到一个局部最小点的,因为梯度值会越来越小,它和固定的学习率相乘后的积也会越来越小。

2.1 批量梯度下降(Batch Gradient Descent)

以线性回归(Linear Regression)为例,h(x)是预测模型,J(θ)为损失函数,θ是参数向量,通过迭代求解得到,其目的是让J(θ)取得尽可能的小。其中m是训练集的记录条数,j是参数的个数。

h(x)=i=0jθjxj

J(θ)=12mi=1m(yihθ(xi))2

我们的目的,是求出θ,使得J(θ)尽可能的小。
minθJ(θ)

批量梯度下降算法的思路:
① 把J(θ)对θ求导,求得梯度在每个方向上的值:
J(θ)θj=1mi=1m(yihθ(xi))xij

② 由于要最小化损失函数(loss function),按照J(θ)的梯度方向对每个θ进行更新,注意:更新是同时进行的。
θj=θjαJ(θ)θj

其中α为学习率。
③ 可以看出,如果对模型h(x)使得J(θ)为凸,即可找到全局最小值。但这里的问题是,每一次的迭代中,每个θj的更新都需要用到所有的样本,如果样本量很大的时候,这样操作会产生巨大的开销。

2.2 随机梯度下降(Stochastic Gradient Descent)

如果我们需要训练一个大型的训练集,那么随机梯度下降算法用来替代批量梯度下降算法是个不错的选择。
随机梯度下降算法的思路:
① 把J(θ)定义为由单一的训练实例贡献的代价函数:

cost(θ,(xi,yi))=12(yihθ(xi))2

② 接着,对训练集D进行randomly shuffle,得到一个新的训练集D1。
③ 然后,对每个代价函数,分别更新θj, j=0,1,2,…,n(假设特征维度为n)。
④ 随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如上百万),那么可能只用其中几万个或更少的样本,就已经将θ迭代到局部最优解了。对比上面的批量梯度下降,迭代一次需要用到全部训练样本*特征个数。而且一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,值得注意的是:SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向

下图为批量梯度下降和随机梯度下降的对比

三、遗留问题

一、学习率的选取
一般来讲,学习率不宜过大,过大的话很容易使解震荡,反倒不容易收敛。而太小又影响到速度,如用BGD对中大型训练集,选取很小的学习率α是很耗费时间的事情。
通常可以考虑选α为0.01, 0.03, 0.1, 0.3等来进行调试
二、特征缩放
在多维特征问题中,我们要保证这些特征都有相近的尺度,这可以帮助梯度下降算法更快的收敛(converge)。以房价问题为例,假设我们的特征分别为θ1 :房屋大小, θ2:房间数量。房屋大小范围在0-2000平方英尺;房间数量在0-5。以两个参数分别作为横纵坐标,绘制代价函数的等高线图,可以看出,图像会显得很扁,需要多次迭代才能收敛。这里写图片描述
而将特征缩放后,代价函数的等高线图变得圆润,使得代价函数达到最小值所需的迭代次数显著降低。这里写图片描述
三、与牛顿法的比较
梯度下降法是用来求函数值最小处的参数值,而牛顿法是用来求函数值为0处的参数值,这两者的目的初看是感觉有所不同,但是再仔细观察下牛顿法是求函数值为0时的情况,如果此时的函数是某个函数A的导数,则牛顿法也算是求函数A的最小值(当然也有可能是最大值)了,因此这两者方法目的还是具有相同性的。牛顿法的参数求解也可以用矢量的形式表示,表达式中有hession矩阵和一元导函数向量。

首先的不同之处在于梯度法中需要选择学习率,而牛顿法不需要选择任何参数。第二个不同之处在于梯度法需要大量的迭代次数才能找到最小值,而牛顿法只需要少量的次数便可完成。但是梯度法中的每一次迭代的代价要小,其复杂度为O(n),而牛顿法的每一次迭代的代价要大,为O(n^3)。因此当特征的数量n比较小时适合选择牛顿法,当特征数n比较大时,最好选梯度法。这里的大小以n等于1000为界来计算。

0 0