学习笔记

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

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

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

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

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

梯度下降法是一个最优化算法,通常也称为最速下降法。
最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。
最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。

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

想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上
在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山
这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤
从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。

Andrew Ng如是说

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

开始时我们随机选择一个参数的组合(θ0,θ1,...,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。
我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。

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

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

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

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

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

It turns out that the way gradient descent is usually implemented, which I'll say more about later, it actually turns out to be more natural to implement the simultaneous updates

Andrew Ng如是说

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

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

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

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

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

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

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

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

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

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

发表评论

您的电子邮箱地址不会被公开。