梯度下降
对于假设函数,我们有一种方法来衡量它与数据的拟合程度。现在我们需要估计假设函数中的参数。这就是梯度下降的用武之地。
想象一下,我们根据其字段绘制我们的假设函数θ0和θ1(实际上,我们将成本函数绘制为参数估计的函数)。我们不是在绘制 x 和 y 本身,而是绘制我们假设函数的参数范围以及选择一组特定参数所产生的成本。
我们把 θ0在 x 轴和θ1在 y 轴上,成本函数在垂直 z 轴上。我们图表上的点将是成本函数的结果,使用我们的假设和那些特定的θ参数。下图描述了这样的设置:
当我们的成本函数位于图中坑的最底部时,即当它的值是最小值时,我们就会知道我们已经成功了。红色箭头显示图中的最小点。
我们这样做的方法是取我们的成本函数的导数(函数的切线)。切线的斜率是该点的导数,它将为我们提供前进的方向。我们在下降最陡的方向上降低成本函数。每一步的大小由参数α决定,称为学习率。
看看下面这张图,是梯度下降算法的定义:
我们将会返回做这些,直到收敛,我们要更新参数θj。
- := 表示赋值,这是一个赋值运算符
- α 称为学习速率,它控制了我们下山时会迈出多大的步子
- 微分项
实现梯度下降算法的微妙之处在于,如果你要更新这个等式,需要同时更新θ0和θ1,进一步的描述这个过程,可以通过下面的图片:
与此相反,下面是不正确的实现方式,因为它没有做到同步更新:
梯度下降直觉
当函数只有一个参数的情形,假如我们有一个代价函数J,只有参数θ1,则微分项的表达如下:
我们对这个点上用梯度下降法θ1进行了初始化,如下图:
下图显示当斜率为负时,θ1增加,当它为正时,值 θ1减少,如下图所示:
附带说明一下,我们应该调整我们的参数 α一种保证梯度下降算法在合理的时间内收敛。未能收敛或获得最小值的时间过长意味着我们的步长是错误的,如下图:
更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低点时导数等于0,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法,所以实际上没有必要再另外减小α。
同样也解释了为什么梯度下降能够达到局部最优解,即使在学习率α固定的情况下。
下图可以很好的解释:有一个关于θa的成本函数J,我想把它最小化,那首先初始化我的算法,
在梯度下降中,如果我前进一步,可能它会把它带到一个新的点,越往前走,越没有那么陡峭,因为越接近最小值,对应的导数越来越接近于0。在我接近最优值的过程中,每走一步,新的到的导数就会变小一点,所以如果我还要往前走一步,自然会采取稍微小一点的步子,直到更加接近全局最优值。
这就是梯度下降算法,你可以用它来最小化任何成本函数J。
线性回归的梯度下降
上面的三个公式,是我们之间所提到的:梯度下降算法、线性回归模型和线性假设、平方误差代价函数。
接下来,我们将要用梯度下降的方法来最小化平方误差代价函数。所以我们需要弄清楚在梯度下降方法里,偏导数项是什么,下图是它的推算过程:
这些微分项实际上就是代价函数J的斜率,我们把它放回梯度下降方法里,得到下面的结果:专用于线性回归的梯度下降,反复执行括号中的式子直到收敛
事实上,它还可以简化成下面的式子:
所以,这只是原始成本函数 J 的梯度下降。 这种方法在每一步都查看整个训练集中的每个示例,称为批量梯度下降,我们最终计算出来得到下面的式子:我们m个训练例子的综合,实际上我们找的是整个批次的训练例子。
请注意,虽然梯度下降一般容易受到局部最小值的影响,但我们在这里提出的线性回归优化问题只有一个全局最优值,没有其他局部最优值;因此梯度下降总是收敛(假设学习率 α 不是太大)到全局最小值。事实上,J 是一个凸二次函数。这是梯度下降的示例,因为它运行以最小化二次函数。
上面显示的椭圆是二次函数的轮廓。还显示了梯度下降的轨迹,它在 (48,30) 处初始化。图中的 x(由直线连接)标记了梯度下降在收敛到最小值时所经历的 θ 的连续值。