机器学习入门系列一(关键词:单变量线性回归,梯度下降法)
如上图所示,我们的目标是希望通过这些数据得到城市人口数和利润可能的对应关系,并可以通过城市人口数(利润)来预测它的利润(城市人口数),在这里我们先规定一下符号记法。
在本例中,训练样本个数m为97;输入变量x为城市人口数,其中x(i)表示第i个城市的人口数;输出变量y为利润,其中y(i)表示第i个城市所得利润。有了训练样本,下一步我们需要用一种算法得到一个比较好的映射关系hθ(x),当给定城市人口数x∗时,通过映射关系可以得到一个符合训练样本规律的合理的利润y∗。由于我们现在讨论的是比较简单的单变量的线性回归,因此我们假设
hθ(x)=θ0+θ1x(1) 现在我们要选择一组θ0,θ1,使得在训练集中对于给定x,hθ(x)尽可能地接近y,因为只有这样,hθ(x)才能更为接近训练样本的规律,才能进行更为准确的预测。汉语言中的“尽可能地接近”非常的抽象,此时我们要把它转化为数学语言。不妨用数值之差的平方来表示,事实证明用这种表示方法可以更为方便地进行后续的数学处理。 argminθ0,θ112m∑i=1m(hθ(x(i))−y(i))2
为方便说明,我们在此定义一个代价函数J(θ0,θ1)。这样,问题就转化为寻找一组θ0,θ1使得J(θ0,θ1)最小。 J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2(3) 那么这个代价函数J(θ0,θ1)到底是什么,长的什么样子?我们不妨穷举可能的θ0,θ1,并画出J(θ0,θ1)的三维图像。
从图像可以很直观地看到,代价函数存在着最小值,但是我们该如何找到这样的θ0,θ1,难道真的要遍历所有可能的θ么?其一,我们有可能会找到效果比较好的θ,但是无法找到最优解;其二,当问题变得比较复杂,代价函数变得比较复杂时(hθ(x)不是现在的一元一次),我们甚至不能确定θ的可能范围,那么我们只能在整个实数范围内去搜寻,可想而知这是一项多么艰巨的任务。
那么该如何找到最优解,下面介绍一个很重要也很实用的方法,梯度下降法。
什么是梯度下降法?让我们置身于一望无际的群山之中,现在我们在某个山的半山腰上,现在天快黑了,我们想要下山。忽略一切危险的可能,我们当然要顺着最陡的路下山,毕竟这样比较快。设想一下如果沿着一个非常非常缓的坡下山,我们就要走很久很久的路,无法在天黑之前顺利下山。这就是梯度下降法,即朝着梯度最大的方向移动。
在本例中,数学语言描述如下,其中α(正数)为移动的步长,我们首先初始化一组随机的θ0,θ1,然后对其进行更新。
⎧⎩⎨θ0=θ0−α∂∂θ0J(θ0,θ1)θ1=θ1−α∂∂θ1J(θ0,θ1)(4)
注意!!梯度下降法是同时更新θ0和θ1,而不是先更新θ0再用更新后的θ0去更新θ1!
梯度下降法有一些很有趣的特征
1.可以找到最优值。
为方便说明,我们设θ0=0,即代价函数J(θ0,θ1)是关于θ1的函数。
- 当初始θ1位于左侧,即小于最优θ1时,梯度为负数,由式(4)可知θ1将会增加。
- 当初始θ1位于右侧,即大于最优θ1时,梯度为正数,由式(4)可知θ1将会减小。
2.容易陷入局部最优值。
假设代价函数J(θ0,θ1)有多个极值点,如图所示。不同的初始点,所得的梯度将会不同,迭代很多次后,不同的初始点所走的路线可能会有很大的差异,最终甚至陷入不同的局部最优值。
3.α的选取有一定的讲究,过大或过小都无法找到最优值。
为方便说明,我们设θ0=0,即代价函数J(θ0,θ1)是关于θ1的函数。
- α过小。如图和式(4)可知当逐渐逼近最优解时,梯度会变小,θ1的变化速度将会越来越小,于是需要经过很多很多次迭代才能找到最优解。对于极端情况,θ1甚至永远也无法得到最优解。
- α过大。如图和式(4)可知,若初始点距离最优点比较近时,经过一次迭代,θ1将会跨越过最优值,而此时对应的梯度大于初始点的梯度,因而再一次的迭代可能将会更远离最优值。这样迭代下去,既无法收敛,也无法找到最优解。
现在我们对梯度下降法有一定的了解,但是该如何去应用在寻找局部最小值?首先我们要求得代价函数J(θ0,θ1)的梯度,求法如下
在本例中对式(1)中的hθ(x)求偏导,结果如下
∂∂θ0hθ(x)=1(6) ∂∂θ1hθ(x)=x(7) 把式(1)(5)(6)(7)代入到(4)中,得
⎧⎩⎨⎪⎪⎪⎪⎪⎪θ0=θ0−αm∑i=1m(θ0+θ1x(i)−y(i))θ1=θ1−αm∑i=1m(θ0+θ1x(i)−y(i))x(i)(8) 因此梯度下降法算法为:
1. 初始化一组随机的θ0,θ1,选取一个合适的α。
2. 用式(8)循环迭代计算θ0和θ1,直至收敛到局部最小值。
训练结果如下