机器学习笔记(3)梯度下降

/*本课程笔记依托于Machine Learning——Andrew Ng(Stanford University)*/

上一篇笔记提到了可以利用图像来观察代价函数(Cost Funciton)的最小值,这是一个比较直观的方法,但是存在一个问题,让计算机罗列出所有的直线让人来进行选择是不合理的,我们想采用一种方法,让计算机自动根据图像和数据找到最小值,听起来似乎不太可能,这一方法就是这篇笔记要写的梯度下降(Gradient Descent)方法

梯度下降是一个用来求函数 最小值的算法,我们可以用梯度下降来求出带有两个参数的代价函数J( θ0,θ1),甚至可以用梯度下降求出带n个参数的代价函数J( θ0,θ1…θn)的最小值

下面抄一下梯度下降的定义和一些说明

梯度下降简单的来理解可以理解为一步一步下山,在下图中我们从最高点出发的整个下山过程实际上就是梯度下降,走一步判断下一步应该向哪里走。但这样的梯度下降会导致一个问题,在图中也表现了出来:根据梯度下降算法图中最后可能到达一个局部最优解(local minimum)也就是右边箭头指的地方,而我们希望得到的是全局最优解(global minimum),也就是图片中左边的那个。所以在使用梯度下降方法中,我们应该避免自己得到的是局部最优解。

Andrew Ng如是说

那么如何规避局部最优解,当我们不知道那个是全局最优解时,可以将所有的可以得到的局部最优解都求出来,从所有的局部最优解中得到全局最优解

这是网上一位大神对梯度下降如何规避局部最优解的见解

现在了解了梯度下降算法,那么如何将梯度下降算法融合在机器学习中,让计算机自动寻找代价函数的最小值,这就是下面要阐述的问题了

首先需要引入批量梯度下降的公式(这里假设我们的假设函数只有两个参数θ0,θ1)这里的j的取值就变成了”for j = 0 and j = 1″,有的时候也简称梯度下降公式,这个公式里α是学习速率(learning rate),α决定你以多大的步伐下山。α后面的部分是J( θ0,θ1)的偏导数。

从上面的阐述可以得知,我们需要在梯度下降公式中更新,并且应该保证被同步更新,如下图所示

为什么要同步更新,因为当更新了θ0后,更新过的θ0的值会影响接下来需要更新的θ1,所以这里需要同步更新,第二种更新方法是不对的,同步更新是梯度下降方法中比较常用的更新方法,也是更自然的更新方法。采用右面的算法并不是人们所说的梯度下降

Andrew Ng如是说

下面我们来详细研究一下梯度下降公式中的比较重要的部分

当估计点(θ1)在极小值的右边时,估计点处的斜率为正,则部分就为正,就会靠近极小值点;当估计点在极小值点左边,估计点处的斜率就为负,则部分就为负,同样也会靠近极小值点

如果我们一开始就将估计点放在局部最优解上,那就会导致梯度下降算法完全不会工作。因为在局部最低点时为0(导数为0),会固定等于θj不变,因此完全不会工作

如果我们的α值取得很小,那么我们的梯度下降算法就会下降的很慢,会花费更多的时间;如果我们的α取得过大,那么我们的梯度下降算法就会越过极小值点,然后偏离正确值越来越远,也就是无法收敛。下两幅图表示了前面说的两种情况

上面简述了梯度下降算法的第一个特性,下面将简述梯度下降算法的第二个特性:靠近极小值点自动减速

这听起来可能很神奇。如下图所示,在品红色点的导数值要明显大于绿色点的导数值,对于来说,品红色的值大于绿色的值,在靠近极小值点的过程中值变得越来越小,对于来说就下降的越来越慢,因此靠近极小值点会自动减速

上面提了这么多,现在要将梯度下降算法和代价函数结合到一起,就变成了(只写比较重要的那一部分,写公式什么的实在太麻烦了)

因为我们只要更新θ0和θ1的值因此,我们只需要写出θ0与θ1的等式即可(在本例中是这样的,如果不明白为什么只计算θ0和θ1,请参照上文),不要忘记需要同时更新θ0和θ1

这里还要写一个很通用的算式,这是第j个θ参数的优化方法,是比较通用的一种方法

计算代价函数的最小值的并不是只有梯度下降一种办法,还有一种被称为正规方程(Normal Equations)的方法,后面的笔记会详细探讨正规方程

About the author

NOBUG.IN

Add comment

By NOBUG.IN

Your sidebar area is currently empty. Hurry up and add some widgets.