机器学习(二) 梯度下降法

前言: 在上篇博文机器学习(一)中,最后我们提到,通过计算代价函数J(Θ)是否收敛于最小值来确定假设函数的参数Θ,进而训练出机器学习中的线性回归算法,那么如何来找到使得J(Θ)最小话的参数Θ呢,本篇博文将介绍一种常用的方法,梯度下降法来确定参数Θ值。

一、对于单特征线性回归,梯度下降法的算法如下:

repeat untile Θ no change

{

每个变量依次梯度下降_代价函数


}

其中 α是步长常量,关于这个步长的选择不同的训练样本有不同的选择,如何选择合适的α值,一般就是通过不断的尝试,最终找到一个合适值,至于什么样的α值是合适什么样的是不合适,后面我们会讲到。

注意 上面循环中的Θj一定要同步更新,即正确的过程如下:

repeat untile Θ no change

{

每个变量依次梯度下降_梯度下降法_02


每个变量依次梯度下降_每个变量依次梯度下降_03


//同步更新参数值

Θ0=temp0;

Θ1=temp1;

}错误的过程如下:

repeat untile Θ no change

{

每个变量依次梯度下降_梯度下降法_02


//未同步更新参数值

Θ0=temp0;

每个变量依次梯度下降_每个变量依次梯度下降_03


//未同步更新参数值

Θ1=temp1;

}二、直观理解梯度下降法的工作原理

为了便于理解,我首先假设线性回归的假设函数hΘ(x)=Θ0+Θ1x中参数Θ0=0;,则我们得到简单的假设函数是hΘ(x)=Θ1x

1、假设我有m=3个训练集,分别是(1,1)(2,2),(3,3),它的样本数据分布图如下:

每个变量依次梯度下降_机器学习_06


2、我们的代价函数如下:

每个变量依次梯度下降_代价函数_07


3、我们可以假设若干个Θ1的值,然后近似绘制出代价函数的图形,比如

取Θ1=0.5,可以得到J(Θ1)=( (0.51-1)2+(0.52-2)2 +(0.5*3-3)2 ) / (2 * 3) =0.375;

即代价函数的一个值为(0.5,0.375);以此类推,可以得到多个代价函数的坐标对(1,0),(1.5,0.375),(0,2.3),从而得出代价函数的近似图形,如下图所示

每个变量依次梯度下降_机器学习_08


4、从代价函数的图形中可以直观的看出,当θ1=1时J(θ1)收敛到最小值,这也是我们的目标,因此,我们训练到假设函数为hΘ(x)=x;它与训练集的拟合效果如下图

每个变量依次梯度下降_梯度下降法_09


由此最简单的一个例子,可以看出,我们直观上训练出了与样本数据拟合度很高的假设函数5、那么梯度下降法是怎么找到使得代价函数最小的θ1呢?我们上面提到梯度下降法的算法是

每个变量依次梯度下降_代价函数


其中

每个变量依次梯度下降_梯度下降法_11


是代价函数的偏导数,如果对导数和偏导数有过学习都知道,某点的导数其实是某点的斜率,从第3步得到的代价函数图可以知道:

如果θ1在θ1=1的右侧,则偏导数为正数,那么梯度下降法中,θ1=θ1-α*(正数),则θ1向左移动,即向θ1=1的位置移动;

每个变量依次梯度下降_机器学习_12

如果θ1在θ1=1的左侧,则偏导数为负数,那么梯度下降法中,θ1=θ1-α*(负数),则θ1向右移动,即向θ1=1的位置移动;

每个变量依次梯度下降_机器学习_13

那么如果选取的α值,即步数值,也就是θ1每次移动的步子大小,比较合适的话,那么最终通过多次梯度下降,一定能够收敛于使得代价函数值最小的θ1

注意: 由第5步分析梯度下降法的工作原理,我们也知道选取一个合适的α值是多么重要,

如果选取的α值过大,那么可能导致在接近θ1=1的时候,由于跨度过大直接跨过了最优解,甚至会导致代价函数不能收敛,就是梯度下降法处于死循环状态;

每个变量依次梯度下降_线性回归_14


但如果选取的α值过小,虽然可以得到最优的θ1,但是效率会降低,因为步数太小,每次就下降一点点,那么下降到最优的θ1将会经过很多步骤。

每个变量依次梯度下降_线性回归_15

那么如何选取一个合适的α值,这一点需要经验也许不断的尝试,后面会讲解如何不断尝试,然后得到一个比较合适的α值。

三、求解梯度下降算法

以hθ(x)=θ01*x为例,可得如下推导:

每个变量依次梯度下降_梯度下降法_16