机器学习笔记(2)— 梯度下降法

本文主要介绍机器学习中的梯度下降法以及梯度下降与线性回归的结合部分。

1.梯度下降法的思想

根据上文介绍,我们知道了代价函数为:
机器学习笔记(2)— 梯度下降法
我们需要求代价函数的最小值,即:
机器学习笔记(2)— 梯度下降法
梯度下降法的思想是:
(1)首先给定 θ0, θ1(这两值具体取多少不重要,通常是将 θ0, θ1均设置为0)
(2)接下来不停改变这两个值,从而使J( θ0, θ1)取得最小值。

2.梯度下降法的通俗解释

机器学习笔记(2)— 梯度下降法

图1

如图1所示为代价函数与 θ0, θ1 两个参数的三维模型。纵轴代表代价函数的值,平面代表 θ0, θ1组成的平面。
机器学习笔记(2)— 梯度下降法
图2
机器学习笔记(2)— 梯度下降法
图3

以下山作类比,当你从图2中的起点(最高点,即红色区域的点)开始下山,你在起点寻找最快的下山途径,确定下山途径后,你迈出第一步。之后再第一步的位置再次寻找最快的下山途径,迈出第二步,之后第三步等等,一直循环,直到下山。而图3,是起点在其他位置的下山途径,这两种途径都能使你下山,但是从图上看,两种不同的你会到达J(θ_0,θ_1 )的局部最小值,即局部最优解。

3.梯度下降法的数学理论

梯度下降法的数学公式为:
机器学习笔记(2)— 梯度下降法
其中:=表示赋值运算,α表示学习率,在上文的通俗解释中,它代表每一步迈出多大的步子,若该值大,则代表用大步子下山。

使用梯度下降法,我们要一直更新两个参数,即代价函数中的 θ0, θ1:
机器学习笔记(2)— 梯度下降法
其计算过程如下:
机器学习笔记(2)— 梯度下降法
如图所示展示了梯度下降法的正确和错误计算过程,梯度下降法强调两个参数需要同时更新

4.梯度下降法的数形结合理解

本部分,为了方便画图和理解,在这部分代价函数中我只使用了一个θ1,其图像如下:
机器学习笔记(2)— 梯度下降法
如图所示:其中b点代表J取得最小值。由上文我们可知梯度下降法的数学公式为:
机器学习笔记(2)— 梯度下降法
由于本部分,我们只是用一个参数,因此该函数可以更改为:
机器学习笔记(2)— 梯度下降法

首先我们分析a点:
当J( θ1)在a点时,倒数部分的求导结果为即为a点的斜率,该值为负。使用梯度下降法更新 θ1:
机器学习笔记(2)— 梯度下降法
此时更新 θ1,即相当于增大 θ1,通过不停的更新,使 θ1到达b点从而获得最小的代价函数。当 θ1到达b点时,倒数部分为0, θ1不再更新。在此过程中,参数α控制着每次增大的程度,若参数α较大,则可以在较快时间内到达b点,若参数α较小,则会在较慢时间内到达b点。但是斜率也会控制每次增大的程度,当距离最小值较远时,斜率较大;距离最小值较小时,斜率较小。所以说,斜率和参数α共同控制着增大的程度。但是如果参数过大或者过小,极有可能越过b点,使代价函数永远到不了b点。

之后我们来分析c点:
当J( θ1 )在c点时,倒数部分的求导结果为即为c点的斜率,该值为正。使用梯度下降法更新 θ1:
机器学习笔记(2)— 梯度下降法
此时更新 θ1,即相当于减小 θ1,通过不停的更新,使 θ1到达b点从而获得最小的代价函数。当 θ1到达b点时,倒数部分为, θ1不再更新。在此过程中,参数α控制着每次减小的程度,若参数α较大,则可以在较快时间内到达b点,若参数α较小,则会在较慢时间内到达b点。但是斜率也会控制每次减小的程度,当距离最小值较远时,斜率较大;距离最小值较小时,斜率较小。所以说,斜率和参数α共同控制着减小的程度。但是如果参数过大或者过小,极有可能越过b点,使代价函数永远到不了b点。

5.梯度下降法局部最优解的数形结合理解

机器学习笔记(2)— 梯度下降法
如图所示,d点为部最优解,根据梯度下降法,d点的导数为0.因此无论如何,使用梯度下降法都会使代价函数达到局部最优解。
然而在e点也会使导数0,在最高点会使系统不稳定(对于e点的理解较少,欢迎大家指教)。

6.线性回归中的梯度下降:

由上文可知,线性回归目标函数为:
机器学习笔记(2)— 梯度下降法
代价函数为:
机器学习笔记(2)— 梯度下降法
我们需要使用梯度下降法:
机器学习笔记(2)— 梯度下降法
将目标函数的代价函数代入梯度下降法中,得到:

机器学习笔记(2)— 梯度下降法
在求得最小的代价函数J( θ0, θ1 )。在此过程中,最重要的是偏导数项,分别对两个参数求偏导,结果如下:
机器学习笔记(2)— 梯度下降法
把 θ0, θ1的求导结果代入梯度下降法中:
机器学习笔记(2)— 梯度下降法

以上的梯度下降法又叫“Batch”梯度下降算法,从计算过程中,我们可以知道,每次求导都会计算整个数据集的平方和。有的梯度下降法并没有计算整个数据集的平方和,仅仅计算数据集子集的平方和。