梯度下降(Gradient descent)
前面学习了有关代价函数的问题,看一下有关的一些表达:
如图所示,我们有一个代价函数,可以包含若干个参数,我们的目标是想得到代价函数的最小值。步骤是我们首先选择一些值,慢慢的不断改变参数值,希望可以到达最小值。
换言之,最小值是客观存在的,如何到达这一点,就会有不同的路径,这就引出了梯度下降。
看下面两张等高图:
通过这两张图我么你可以看出,从某一点出发,沿不同的路径我们可以到达两个不同的最低点,也就是最低点可能不唯一,下降的路径也不唯一。
梯度下降是一个用来求最小值得算法,我们使用梯度下降算法来求出代价函数J( θ0,θ1)的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数组合( θ0,θ1,…, ,…, θn),计算代价函数,然后我们寻找下一个能使代价函数值下降最多的参数组合,我们持续这么做直到到一个局部的最小值。因为我们无法尝试尽所有的参数组合,所以就无法确定局部的最小值是否也是全局的最小值,因此选择不同的参数组合就会有不同的局部最小值。
梯度下降算法的公式为:
其中的参数表示是:α表示的是学习率,表示了让代价函数下降的最大方向向下的步子有多大。我们每一次都是让所有的参数减去学习率乘以代价函数的偏导数。注意的是,在梯度下降算法中我们要同时更新所有的参数,不能更新一个后带入表达式再求另外一个,图中的Incorrect部分就是错误的做法,在计算temp1时,使用的就是已经更新后的θ0了。
下面我们来看一下这个算法是做什么的,更新过程有何意义,以及偏导数项代表了什么。
我们的算法为: ,我们不断的迭代的给西塔赋值,最终可以取到最小值。
学过微积分我们知道,那个偏导数(这里讨论时只有一个参数,也可以看成是导数),在几何意义上表示的就是红线所画,为曲线的斜率。当我们的导数大于零时,切线于X轴的的夹角度数小于90度,而小于零时,此时夹角大于90度。而α就表示了我们下降的程度大小,偏导数和α的乘积就是移动的距离的大小。
而如果我们一开始选择的参数已经是最低点时,以后的就不会在改变了,这也解释了为什么梯度下降可以收敛到局部最低点。
当我们所选的α太小时,迭代的速度就会很慢,这要会影响算法的效率,而如果所选的α太大时,会导致移动的步子太大,严重情况下会导致无法收敛。
在梯度下降中的过程中,你移动的幅度会越来越小,直到最终移动的幅度非常小,此时就到了局部的最小值,所以我们不用手动的不断修改α的值。
梯度下降与线性回归
在前面学习了梯度下降和线性回归,他们的表示如下:
对于我们之前的回归问题使用梯度下降算法,关键在于求出代价函数的导数,步骤如下:
此时的算法为:
这样的算法也叫做“批量梯度下降”,是因为此时我们用到的是整个训练集中的所有训练样本,相对的就会有其他的梯度下降算法使用的就可能是某些样本而非全部。
效果如下:
看到别人写的一篇线性回归的博客
http://lib.csdn.net/article/machinelearning/51378