上一节中,我们讲了梯度下降算法,这一节我们将要将梯度下降和代价函数结合得到线性回归算法。它可以用直线模型来拟合数据。
首先我们来回顾一下之前的知识点。左侧为梯度下降法,右侧为线性回归模型(包括线性假设和平方差代价函数)。
我们要做的就是将梯度下降法应用到最小化平方差代价函数。为了应用梯度下降法,我们要弄清楚公式中的导数项。
当我们计算完后,我们将它们代回到我们的梯度下降算法中。我们就会得到如下所示的式子。
这就是我们的线性回归算法。注意:在实现算法的时候,我们要同时更新θ0和θ1。
接下来,我们看一下梯度下降是如何实现的。在我们之前的例子中,出现过它容易陷入局部最优的问题。如下图,我们的起始位置不同会导致我们得到两个不同的局部最优解。
这个函数的特点就是只有一个全局最优。当你计算这种代价函数的梯度下降,只要你使用的是线性回归,它总是会收敛到全局最优。因为它并没有其他的局部最优解。
现在我们看一下这个算法的使用。这里有假设函数的曲线和代价函数J的曲线。
如果我们梯度下降一步,我们会从这个点往左下方移动一点点。之后我们会得到另外一条新的直线。我们每下降一步,就会得到代价更小的新的直线。随着我们不断下降,直线看起来也越来越好。最后,我们到了全局的最小值。
我们刚刚学习的算法有时候也被称作Batch梯度下降(批量梯度下降法)。它意味着在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。在后面的课程中,我们也将介绍这些方法。
将批量梯度算法应用到线性回归中,这就是用于线性回归的梯度下降法。
如果你之前学过线性代数,你应该知道有一种计算代价函数最小值的数值解法,不需要梯度下降这种迭代算法。在后面的课程中,我们也会谈到这个方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数的最小值,这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。
现在我们已经掌握了梯度下降,我们可以在不同的环境中使用梯度下降法,我们还将在不同的机器学习问题中大量地使用它。所以,祝贺大家成功学会你的第一个机器学习算法。