本文只是简单解释一下梯度下降,其中涉及到的公式并没有展示说明。
1.什么是梯度?
梯度也可以理解为导数。
在一维空间中:梯度就是导数,或者说对于一个线性函数,也就是线的斜率。
2.什么是梯度下降?
梯度是个向量,自变量沿着该向量的方向变化,函数值变化最快。在机器学习中,为使损失函数下降 最快,我们需要让模型参数**++沿着梯度的负方向更新++** ,即梯度下降。
附上图解(简略过程):
![](https://i-blog.csdnimg.cn/direct/dd88e698917c449d954e33528a74dd3c.png)
第一步:计算函数的导数f(x)'
第二步:任意选择一个起点,如A点。代入X得出Y',将计算得到的Y'作为新的X,图中对应B点。
第三步:对B点重复第二步操作,会得到C、D、F......以此类推
一般而言,随着梯度值逐步逼近0,每次X更新幅度越来越小。
3.梯度下降的作用?
如果看懂了上面说的梯度下降的简略过程,这里就很容易明白了。我们将上面的函数换成损失函数,梯度下降就是用来求损失函数最小值时自变量对应取值。
什么是损失函数?
机器学习算法的预测值减去真实值最后取绝对值叫做误差,而损失函数就是负责计算这个误差的。不同的参数会产生不同的误差,梯度下降就是为了找到让误差值最小时候对应的参数。
额外补充:机器学习常见的两类算法
1,回归算法,产生一条曲线来拟合现有的数据,实现预测未来的数据。
2,分类算法,产生一条曲线实现分类,在这个曲线一侧为一类另外一侧算一类。
而损失函数就是用来评估算法产生的这条曲线的效果好不好
4.常用的梯度下降方法
批量梯度下降
批量梯度下降对训练集中的每个点的误差求和,仅在评估所有训练样本后才更新模型。这个过程称为训练周期。
批量梯度下降的最要问题是计算每一步的梯度时都需要使用整个训练集,这导致在规模较大的数据集上,其会变得非常的慢。
随机梯度下降
在每一步的梯度计算上只随机选取训练集中的一个样本 。很明显,由于每一次的操作都使用了非常少的数据,这样使得算法变得非常快。由于每一次迭代,只需要在内存中有一个实例,这使随机梯度算法可以在大规模训练集上使用。
另一方面,由于它的随机性,与批量梯度下降相比,其呈现出更多的不规律性:它到达最小 值不是平缓的下降,损失函数会忽高忽低,只是在大体上呈下降趋势。随着时间的推移,它 会非常的靠近最小值,但是它不会停止在一个值上,它会一直在这个值附近摆动。因此,当算法停止的时候,最后的参数还不错,但不是最优值。
![](https://i-blog.csdnimg.cn/direct/fd2d9b5ff71348baaa744f7c9b2c0151.png)
小批量梯度下降
小批量梯度下降结合了批量梯度下降和随机梯度下降概念。每次迭代只使用训练集其中一个小批量来训练模型,这个批中的所有样本共同决定了本次迭代中梯度的方向,这种方法兼顾了批量梯度下降的计算效率和随机梯度下降的速度。
补充
学习率
在梯度下降的过程中学习率不能过大或者过小,下图的正常情况。
![](https://i-blog.csdnimg.cn/direct/f889d0de54054116a37d50ad9ac62ec6.png)
当学习率过小,会大大增加迭代时间,如下图所示。
![](https://i-blog.csdnimg.cn/direct/f126dc9eb828411d93d56a2125e28313.png)
如果学习率过大可能会发生梯度发散,即可能下一次的值比上一次还要大,导致最终无法收敛。如下图所示。
![](https://i-blog.csdnimg.cn/direct/72a139adebd24cd79817b42525712613.png)
损失函数
在实际训练过程中,损失函数一般不会很简单的就是一个开口向上的二次函数,例如下图。
![](https://i-blog.csdnimg.cn/direct/c3d4ff9322a8404eb417245bf08ee8ca.png)
如果随机初始值选在了图像的左侧,则它将收敛到局部最小值,这个值要比全局最小值要大。 如果它从右侧开始,那么训练需要很长时间,如果你早早地结束训练,你将永远到不了全局最小值。
但是线性回归模型的均方差损失函数是一个凸函数(曲线上的任意两点,它们的连线段不会与曲线发生交叉,即该线段不会与曲线有第三个交点)。这意味着这个损失函数没有局部最小值,仅仅只有一个全局最小值。