我们有一个房价的训练集,我们的工作是从这些数据中,如何学习预测房价?
用直角坐标系进行建模,横坐标表示面积,纵坐标表示售价:
我们观察这些直角坐标系中的点,似乎更适合用直线来拟合,这个特定的模型叫做单变量线性回归。设直线方程为(也就是我们的假设函数): H(x) = θ0 + θ1 x
θ0 、θ1 称为模型参数,选择不同的参数θ0 、θ1,会得到不同假设函数表示的直线。 我们用代价函数来度量直线与这些点的拟合程度:
现在我们就将问题转化为,求函数J(θ0 ,θ1)最小值时,θ0 、θ1的取值?
用一个小例子,来直观的解释代价函数用来做什么的,以及为什么要使用它?
有一个训练集,其中有三个点(1,1)、(2,2)、(3,3)。为了更好的使代价函数J可视化,我们使用一个简化的假设函数: H(x) = θ x ( θ0 = 0),则代价函数为:
当θ = 1时,H(x) = x
当θ = 2时,H(x) = 2x
当θ = 0.5 时,H(x) = 0.5x
. . . . . .
通过这些点,我们大概画出代价函数J(θ)的轮廓:
通过图形,我们很容易得出:当θ = 1时,函数J(θ)最小。同时我们注意到,当θ = 1时,这确实是一条最好拟合数据的直线,这就是为什么要最小化J(θ)的原因。
在最小化线J(θ)时,不可能每次都将J(θ)图形画出来后再找出最小值,我们可以使用梯度下降法最小化代价函数。
上图是J(θ0,θ1)三维图像,我们将它想象成一座山,而你站在山坡上准备下山。你环顾四周,找到一个最有利下山的方向,迈出一步;你到达新的点,再环顾四周,找到一个最有利下山的方向,迈出一步。重复上述动作,直到到达局部最低点,这就是梯度下降算法思想。需要注意的是,如果初始站立点不同,最后到达的最低点可能会有所不同,下面我们给出梯度下降算法的定义:
为了方便解释梯度下降法对代价函数起什么作用?我们引用上面代价函数只有一个参数的例子。此时梯度下降算法:
初始值 ,
学习速率,类似我们迈出一步的大小 ,
导数项,类似选取最有利下山的方向
代价函数J()图形如下, 选
= 2 ,
相当于
=2点的切线斜效率,该斜率为正斜率,所以
:=
-
*(正数),
永远大于零,于是
更新为
减去一点,相当于在图形中我将
向左移了,使
变小了。我们看到这么做对的,因为这个方向确认让我更接近那边的最低点。
选 = 0
相当于=0点做切线,该切线斜率为负斜率,所以
:=
-
*(负数),于是
更新为
加上一点,相当于在图形中我将
向右移了,使
变大了。我们看到这也是对的,因为这个方向确认让我更接近那边的最低点。
综上所述,我们可以得知,每次更新都是向最低点方向移动,且线的斜率由陡向缓,最终趋于水平。该点的导数等于该点切线的斜率,因此我的导数项会越来越小,直到到达最低点,导数为零。
在进行下一步梯度下降时,我的导数项是更小的,更新的幅度就会更小。随着梯度下降法的进行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现已经收敛到局部极小值了。这也解释了,即使学习速率
保持不变,梯度下降法也可以收敛到局部最低点的原点。不过我们需要注意
的选值:
如果 太小,就会像小宝宝的步伐,只能一点点地挪动去接近最低点,这样需要很多步才能到达最低点。所以如果
太小的话,梯度下降会很慢。
如果 太大,那么梯度下降可能会越过最低点,导致可能无法收敛或者发散。