机器学习梯度下降算法(一)


前言

梯度下降(gradient descent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。 本文将从基本的数学思想开始,先提出梯度下降算法的基本思想,进而从数学上解释梯度下降算法的原理,解释为什么要用梯度,最后实现一个简单的梯度下降算法的实例!


梯度下降的学习(上半篇)

1.定义模型

图1-1

图2-2

假设定义公式:

实际的x,y关系如下表所示:

在坐标轴展示数据的分布:

该线性函数与实际数据分布之间的差异:

2.最小二乘法

假设有n 个训练数据,那么它们的误差之和可以用这样的表达式表示。这个表达式称为目标函数,E(θ) 的E 是误差的英语单词Error 的首字母。

求和符号,我们对每个训练数据的误差取平方之后,全部相加,然后乘以。这么做是为了找到使E(θ) 的值最小的θ,这样的问题称为最优化问题。

中间以左的误差是负数,以右的误差是正数,二者相加正负相抵,所以采用平方,系数1/2是用来抵消参数,具体下面会讲到。

只要乘以正的常数,函数的形状就会被横向压扁或者纵向拉长,但函数本身取最小值的点是不变的。

我们实际来计算一下表达式E(θ) 的值吧。设 = 1、 = 2,然后将刚才列举的4 个训练数据代入表达式。求出来的误差112176.5有点大……

112 176.5 这个值本身没有什么意义,我们要修改参数θ,使这个值变得越来越小,这种做法称为最小二乘法。

3.最速下降法

如下图所示

微分后的结果:

增减表如下图:

根据这张增减表我们可以知道,在x < 1 时,g(x) 的图形向右下方延伸,反之当x > 1 时,g(x) 的图形向右上方延伸,换句话说就是从左下方开始延伸的。

比如在x = 3 这一点,为了使g(x) 的值变小,我们需要向左移动x,也就是必须减小x。如果是在另一侧的x = −1 这一点,为了使g(x) 的值变小,我们需要向右移动x,也就是必须增加x。

我们不难发现只要向与导数的符号相反的方向移动x,g(x) 就会自然而然地沿着最小值的方向前进。最速下降法或梯度下降法公式如下:

A := B 这种写法,它的意思是通过B 来定义A,上式来说就是用上一个x 来定义新的x。

我们再代入具体的值看一看。比如η = 1,从x = 3 开始,那么x会如何变化呢?

g(x) 的微分是2x − 2,那么更新表达式就是x := x − η(2x − 2)

x := 3 − 1(2 × 3 − 2) = 3 −4 =−1 x := −1 − 1(2×−1 − 2) = −1 + 4 = 3 x := 3 − 1(2 × 3 − 2) = 3 −4 =−1

一直在3 和−1 上跳来跳去啊,陷入了死循环

那设η = 0.1,同样从x = 3 开始,会怎么样呢?

x := 3 − 0.1 × (2 × 3 − 2) = 3 − 0.4 = 2.6 x := 2.6 − 0.1 × (2 × 2.6 − 2) = 2.6 − 0.3 = 2.3 x := 2.3 − 0.1 × (2 × 2.3 − 2) = 2.3 − 0.2 = 2.1 x := 2.1 − 0.1 × (2 × 2.1 − 2) = 2.1 − 0.2 = 1.9

4.公式推导

fθ(x) 拥有θ0 和θ1 两个参数。也就是说这个目标函数是拥有θ0 和θ1 的双变量函数,所以不能用 普通的微分,而要用偏微分。如此一来,更新表达式就是这样的。

我们可以使用复合函数的微分。就像你刚才说的,E(θ) 中有fθ(x),而fθ(x) 中又有θ0,所以我们可以这样分别去考虑它们。 u = E(θ) v = fθ(x)

表达式确实变整洁了。下面就是v 对θ0 进行微分的部分了。

接下来只要依照复合函数的微分表达式 将各部分的结果相乘,就可以得到对θ0 进行微分的结果了。对了,不要忘了把表达式2.3.12 中的v 替换回fθ(x)

接下来再算一下对θ1 进行微分的结果:

下面就是v 对θ1 进行微分的部分了:

更新后的关联表达式:


总结

以上是梯度下降算法的前半篇,休息一会,更新下半篇。

经验分享 程序员 微信小程序 职场和发展