本人在学习斯坦福大学的机器学习课程,特记录课程概要内容。课程地址: Andrew Ng机器学习课程
梯度下降算法
前面课程我们有了一种方法来衡量假设函数如何拟合数据。现在我们需要估计假设函数中的参数,这就需要梯度下降方法。
想象一下,我们基于 θ0 和 θ1 绘制假设函数(实际上我们将代价函数绘制为参数估计的函数)。我们不是绘制x和y,而是绘制假设函数的参数范围和一组特定参数计算出的代价函数。
我们将θ0放在x轴上,θ1放在y轴上,代价函数结果则在z轴上。所以图上的点是我们使用假设函数和一些特定的 θ
参数计算的代价函数的结果。下图显示了这样的结果集。
我们可以知道当代价函数处于图中凹坑的最底部时,即当其值是最小值时,假设函数对数据集的拟合度是最高的。图中红色箭头指示了最小点。
而我们获得最小点的方式是通过计算代价函数的导数(函数切线)。切线的斜率是在切点的导数,它可以给我们指定一个移动的方向。使得我们以最快的下降方向降低代价函数值。每个下降幅度由参数α确定,我们称之为学习速率。
例如,上图中的每个“星”之间的距离表示由参数α确定的步长。较小的α将导致较小的步长,较大的α导致较大的步长。下降的方向则由 J(θ0, θ1) 的偏导数决定。从图上的哪一个点开始,可能会在不同的地方结束。上图显示了两个不同的起点,最终得到两个不同的地方。
梯度下降算法为:
*重复以下步骤直到收敛: *
(j=0,1表示特征值索引)
在每次迭代 j 中,应同时更新参数 θ1, θ2, ..., θn 。在第 j(th) 次迭代计算另一个参数之前更新特定的参数会导致错误。
梯度下降算法 - 解析
我们先讨论一个参数 θ1 的梯度下降情况。公式是:
重复直到收敛:
无论斜率
另外,我们应该调整参数α,以确保梯度下降算法在合理的时间内收敛。无法收敛或花太多时间来获得最小值意味着我们的步长是错误的。
梯度下降算法如何以固定的步长α收敛呢?
收敛的结果就是当我们接近函数最底部时,
线性回归的梯度下降算法
当具体应用于线性回归的情况时,可以导出梯度下降方程的新形式。 我们可以用实际代价函数和实际假设函数来代替:
*重复直到收敛: * {
其中 m 是训练集的大小,θ0 是与 θ1 同时变化的常数,xi,yi 是给定训练集(数据)的值。
注意,我们将 θj 分为 θ0 和 θ1 的单独方程; 并且对于 θ1 ,由于导数而在结尾处乘以 xi 。以下是单个θ的推导:
如果我们从一个猜测点的假设函数开始,然后重复应用梯度下降方程,那么我们的假设函数将会越来越准确。
这是简单的代价函数J的梯度下降方程。该方法根据整个训练集的实例的计算每个步骤,称为批量梯度下降。请注意,虽然梯度下降一般容易受局部极小值的限制,但我们在此提出的线性回归的优化问题只有一个全局的最小值,没有其他的局部最优;因此梯度下降总是收敛(假设学习速率α不是太大)到全局最小值,因为J是一个二次函数。 这个梯度下降的示例会趋向最小化二次函数。
上图所示的椭圆是二次函数的轮廓图。还显示了由(48, 30)初始化的梯度下降所采取的轨迹。图中的x轴(由直线连接)标记了梯度下降过程中经过的 θ 逐渐收敛到最小值的连续值。