回顾
之前我们介绍了线性回归模型与梯度下降法,很显然,梯度下降法可以帮助我们实现在线性回归模型中自动寻找代价函数最小值对应的参数,现在,我们要将代价函数和梯度下降结合得到线性回归的算法,它可以用直线模型拟合数据。
左边是梯度下降算法,我们会反复做这一步
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
\theta_j:=\theta_j-\alpha{\large\frac {\partial} {\partial\,\theta_j}}J(\theta_0,\theta_1)
θj:=θj−α∂θj∂J(θ0,θ1),直到梯度下降收敛。
右边是我们的线性回归模型,其中, h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x表示线性假设函数, J ( θ 0 , θ 1 ) = J(\theta_0,\theta_1)= J(θ0,θ1)= 1 2 m \,\Large1\over {2m} 2m1 ∑ i = 1 m \large\sum_{i=1}^m ∑i=1m ( h θ ( x i ) − y i ) 2 (h_\theta(x^i)-y^i)^2 (hθ(xi)−yi)2表示平方差代价函数。
实现线性回归的梯度下降算法
现在,我们的目标就是将梯度下降应用到最小化平方差代价函数,即 θ 0 θ 1 m i n i m i z e \large_{\;\;\;\;\theta_0\theta_1}^{minimize} θ0θ1minimize J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1),我们要写出梯度下降的方程,关键步骤就是这个微分项 ∂ ∂ θ j J ( θ 0 , θ 1 ) {\large\frac {\partial} {\partial\,\theta_j}}J(\theta_0,\theta_1) ∂θj∂J(θ0,θ1),因此,我们需要计算出这个偏导数项是什么。
偏导数的计算
我们首先将假设函数代入代价函数中,可得
J
(
θ
0
,
θ
1
)
=
J(\theta_0,\theta_1)=
J(θ0,θ1)=
1
2
m
\,\Large1\over {2m}
2m1
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
2
(\theta_0+\theta_1x^i-y^i)^2
(θ0+θ1xi−yi)2
再将代价函数代入偏导数中,可得
1
2
m
\Large{1\over {2m}}
2m1
∂
∂
θ
j
{\large\frac {\partial} {\partial\,\theta_j}}
∂θj∂
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
2
(\theta_0+\theta_1x^i-y^i)^2
(θ0+θ1xi−yi)2
再分别讨论 j j j 的取值
当
j
=
0
j=0
j=0时,有
1
2
m
\Large{1\over {2m}}
2m1
∂
∂
θ
0
{\large\frac {\partial} {\partial\,\theta_0}}
∂θ0∂
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
2
=
(\theta_0+\theta_1x^i-y^i)^2=
(θ0+θ1xi−yi)2=
1
m
\Large{1\over {m}}
m1
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
(\theta_0+\theta_1x^i-y^i)
(θ0+θ1xi−yi)
当
j
=
1
j=1
j=1时,有
1
2
m
\Large{1\over {2m}}
2m1
∂
∂
θ
1
{\large\frac {\partial} {\partial\,\theta_1}}
∂θ1∂
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
2
=
(\theta_0+\theta_1x^i-y^i)^2=
(θ0+θ1xi−yi)2=
1
m
\Large{1\over {m}}
m1
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
θ
0
+
θ
1
x
i
−
y
i
)
∗
x
i
(\theta_0+\theta_1x^i-y^i)*x^i
(θ0+θ1xi−yi)∗xi
最后代入到梯度下降算法中,即可得到如下图所示的方程组
这就是我们线性回归中的梯度下降算法,需要注意的是在更新参数时,我们需要遵循同步更新的原则。
梯度下降的过程
从上图中可以看出,我们从一个初始位置出发,然后一步一步的向全局最优点靠近。
之前我们讨论到代价函数随着参数数量的增加,其对应的维度也会增加,在三维的图像中,我们可能存在着多个局部最小值,梯度下降最终会收敛到哪个最小值,取决于我们参数初始化的取值。而在线性回归模型中,其代价函数往往是一个凸函数,也就是说在线性回归中,往往只有一个全局最优点,对于这种函数使用梯度下降,它总是会收敛到全局最优,因为它没有局部最优的情况。
Batch梯度下降
我们在上面介绍的这种梯度下降法,有时被称为Batch梯度下降,这意味着每一步梯度下降,我们都遍历了整个训练集的样本,因为根据我们之前给出的代价函数公式
J
(
θ
0
,
θ
1
)
=
J(\theta_0,\theta_1)=
J(θ0,θ1)=
1
2
m
\,\Large1\over {2m}
2m1
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
h
θ
(
x
i
)
−
y
i
)
2
(h_\theta(x^i)-y^i)^2
(hθ(xi)−yi)2,可以看出,每一步梯度下降,在计算总和
∑
i
=
1
m
\large\sum_{i=1}^m
∑i=1m
(
h
θ
(
x
i
)
−
y
i
)
2
(h_\theta(x^i)-y^i)^2
(hθ(xi)−yi)2时,我们会计算所有样本的平方差,所以我们称之为Batch梯度下降法。很显然,有时候还会有不是Batch梯度下降的梯度下降法,它们往往并没有关注整个训练集,而是每次只关注一些小子集。