-
机器学习笔记003 | 梯度下降算法
止一之路 / 2017-09-07 08:21 发布
为了达到最佳的预测效果,我们需要找到使得代价函数最小的参数。
还记得上一篇文章提到的代价函数么:
我们通过不断去调整参数θ0和θ1,最终找到让J(θ0 ,θ1)最小的参数。
如果直观来看,我们就像这样,一步一步地走下山:
走下山
具体是怎么实现的呢?
这里要提到一个算法:梯度下降(Gradient Descent)算法。
为了使得代价函数的结果越来越小,我们需要不断重复以下步骤:
来改变参数,以寻找使得代价函数最小的最优解。
需要注意的是,所有的参数θj必须同时更新,如:
同时更新
而下面这样的方式,是不正确的:
不同时更新
或者说已经不属于梯度下降算法的范畴,而是其他的算法了。
在这里,“:=”是赋值的含义,就是把等式右边的值赋予左边;α是学习的速率,代表着下山的脚步大小;后面这个是对代价函数的求导:
为什么通过这样的重复,可以找到最佳的参数呢?
为了方便理解,这里还是将θ0设置为0,也就是说,我们的预测函数为:
hθ(x1) = θ0 + θ1 xi = θ1 xi
那么对于θ1,我们需要重复的调整的步骤就是:
J(θ1)的代价函数大概是这样的:
代价函数曲线
对这样的代价函数求导,其实得到的,就是在某一个点的切线,也就是在该点的斜率。
斜率为正数
斜率为正,说明需要减去的是一个正数,θ1的值变小。
斜率为负数
斜率为负,说明需要减去了一个负数,也就是加上一个正数,θ1的值变大。
可以看到,两个图的绿点就是最低点。
因为斜率的原因,不管红点在绿点的左边还是右边,最终都会往绿点靠拢。
当到达最低点的时候,斜率为0,所以在这个位置,参数保持很定不变。
所以不管初始点设置在最低点的哪一边,在设置了合理的学习速率α的情况下,重复了这些步骤之后,最终都会往最低点汇聚。
为什么说是合理学习速率α呢?
因为如果学习速率α太大,那么有可能一直偏离,永远的去不到最低点。
如图,随着斜率的绝对值变大,脚步还越来越大,从距离低点最近的参数偏离得越来越远:
学习速率α太大
如果学习速率α太小,那么就需要很多的步骤,才能够找到最优解:
学习速率α太小
那么是否需要随着参数逐渐接近最优解的时候,降低学习速率α呢?
其实没有必要,你看一个在学习速率α固定的情况下,迈出的步子大概是这样的:
学习速率α固定
由于越接近最低点,斜率的绝对值就越小。
那么也就意味着即使学习速率恒定不变,由于斜率绝对值的不断变小,机器学习所走的脚步也会变得越来越小。
相信看到这里,你也对算法的原理有了个基本的理解。
下面是J(θ0 ,θ1)代入之后,得到的等式:
为什么两个等式会不同呢?
其中对于θ1求导数的过程如下:
求导过程
看完这个,你应该就能明白,之前代价函数为什么要乘以 1/2 了吧。
如果看不懂也没有关系,直接记住前面的等式就行了。
由于这样的梯度下降算法在整个训练过程中,每一步都去计算所有的训练样本,被命名为“批量梯度下降(batch gradient descent)”。
文章提前发布在**:止一之路