【吴恩达机器学习笔记】第一章 单变量线性回归
1、代价函数
假设
h
θ
(
x
)
=
θ
0
+
θ
1
x
{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x
hθ(x)=θ0+θ1x其中 :
θ
0
\theta_0
θ0 、
θ
1
\theta_1
θ1为参数
怎样设置参数?选择
θ
0
\theta_0
θ0 、
θ
1
\theta_1
θ1 使得:
min
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\min \frac{1}{{2m}}{\sum\limits_{i = 1}^m {\left( {{h_\theta }\left( {{x^{(i)}}} \right) - {y^{(i)}}} \right)} ^2}
min2m1i=1∑m(hθ(x(i))−y(i))2其中:m为训练集的样本容量
以上为我们线性回归的整体目标函数,为了使它更明确一点,我们要定义一个代价函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left( {{\theta _0},{\theta _1}} \right) = \frac{1}{{2m}}{\sum\limits_{i = 1}^m {\left( {{h_\theta }\left( {{x^{(i)}}} \right) - {y^{(i)}}} \right)} ^2}
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
min
J
(
θ
0
,
θ
1
)
\min J\left( {{\theta _0},{\theta _1}} \right)
minJ(θ0,θ1)这就是我们的代价函数
代价函数也被称为平方误差函数,有时也被称为平方误差代价函数,此函数对于大多数线性回归问题是非常合理的。
代价函数的三维图像如下所示:
假设函数与代价函数的等高线图如下所示:
其中每个椭圆形显示了一系列
J
(
θ
0
,
θ
1
)
J\left( {{\theta _0},{\theta _1}} \right)
J(θ0,θ1)值相同的点。
2、梯度下降算法
梯度下降(gradient descent)是很常用的算法。它不仅被用在线性回归上,也被应用在机器学习的多种领域。
算法步骤:
1、给定
θ
0
\theta_0
θ0 、
θ
1
\theta_1
θ1初始值(通常是将它们都初始化为0)
2、不断改变
θ
0
\theta_0
θ0 、
θ
1
\theta_1
θ1的值,直到找到
J
(
θ
0
,
θ
1
)
J\left( {{\theta _0},{\theta _1}} \right)
J(θ0,θ1)的最小值或局部最小值
为了方便理解我引用吴老师的原话:
现在我希望大家把这个图像想作一座山,想象这是个长满青草的公园,其中有两座这个样的山,想象一下,你正站在这一点上,站在公园这座红色的山上。在梯度下降算法中,我们要做的就是,旋转360度,看看你的周围,并问自己,如果我要在某个方向上走一小步,我想尽快走下山,我应该朝什么方向迈步?
数学思想:
重复直到找到局部最优解{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
f
o
r
(
j
=
0
a
n
d
j
=
1
)
\quad \quad\quad\quad{\theta _j}: = {\theta _j} - \alpha \frac{\partial }{{\partial {\theta _j}}}J\left( {{\theta _0},{\theta _1}} \right)\quad \quad for(j=0\quad and\quad j=1)
θj:=θj−α∂θj∂J(θ0,θ1)for(j=0andj=1)
}
其中::=表示赋值
α
\quad\quad\alpha
α为学习率,用来决定梯度下降时,我们迈多大的步子。如何设置
α
\alpha
α后面会详细介绍。
在梯度下降中,有一个特点:是必须同时更新 θ 0 \theta_0 θ0 、 θ 1 \theta_1 θ1。所以有更加详细的步骤如下所示: t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0: = {\theta _0} - \alpha \frac{\partial }{{\partial {\theta _0}}}J\left( {{\theta _0},{\theta _1}} \right) temp0:=θ0−α∂θ0∂J(θ0,θ1) t e m p 1 : = θ 1 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp1: = {\theta _1} - \alpha \frac{\partial }{{\partial {\theta _0}}}J\left( {{\theta _0},{\theta _1}} \right) temp1:=θ1−α∂θ0∂J(θ0,θ1) θ 0 : = t e m p 0 {\theta _0}: = temp0 θ0:=temp0 θ 1 : = t e m p 1 {\theta _1}: = temp1 θ1:=temp1用上述方法就可以正确的实现梯度下降了。如果将步骤2和3交换,则没有达到同步更新,就是错误的。
解释导数项的意义:
解释学习速率
α
\alpha
α的意义:
当
α
\alpha
α过小时,会导致每一步更新过于小,使速率过于缓慢,需要迭代很多次才能达到局部最优点。如下图所示:
而
α
\alpha
α过大时,梯度下降可能会越过最低点,可能导致无法收敛甚至发散,如下图所示:
3、线性回归的梯度下降
将前文的代价函数和梯度下降结合后,得到:
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
=
∂
∂
θ
j
1
2
m
∑
i
=
1
m
(
θ
0
+
θ
1
x
(
i
)
−
y
(
i
)
)
2
\frac{\partial }{{\partial {\theta _j}}}J\left( {{\theta _0},{\theta _1}} \right) = \frac{\partial }{{\partial {\theta _j}}}\frac{1}{{2m}}{\sum\limits_{i = 1}^m {\left( {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} \right)} ^2}
∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(θ0+θ1x(i)−y(i))2
则可以分别求出
t
e
m
p
0
temp0
temp0,
t
e
m
p
1
temp1
temp1为:
t
e
m
p
0
=
∂
∂
θ
0
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
θ
0
+
θ
1
x
(
i
)
−
y
(
i
)
)
temp0 = \frac{\partial }{{\partial {\theta _0}}}J\left( {{\theta _0},{\theta _1}} \right) = \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} \right)}
temp0=∂θ0∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))
t
e
m
p
1
=
∂
∂
θ
1
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
θ
0
+
θ
1
x
(
i
)
−
y
(
i
)
)
⋅
x
(
i
)
temp1 = \frac{\partial }{{\partial {\theta _1}}}J\left( {{\theta _0},{\theta _1}} \right) = \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} \right)} \cdot {x^{(i)}}
temp1=∂θ1∂J(θ0,θ1)=m1i=1∑m(θ0+θ1x(i)−y(i))⋅x(i)
综上所述,可得回归的梯度下降算法如下所示:
重复直到找到局部最优解{ θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) {\theta _0}: = {\theta _0} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} \right)} θ0:=θ0−αm1i=1∑m(θ0+θ1x(i)−y(i)) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) ⋅ x ( i ) {\theta _1}: = {\theta _1} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} \right)} \cdot {x^{(i)}} θ1:=θ1−αm1i=1∑m(θ0+θ1x(i)−y(i))⋅x(i)}
前文说过梯度下降算法容易陷入局部最优解,但是在线性回归中,大部分的代价函数使凸函数,如下图所示:
这种函数是没有局部最优解的,所以在用梯度下降解决线性回归问题,它总是会求得全局最优解的。
在机器学习领域中,梯度下降算法遍历了所有的数据集,则其也被称为“Batch”梯度下降算法。
了解过线代的同学可能知道,解决线性回归问题还有一种方法,叫做正规方程组方法,事实上,梯度下降算法更加适用于数据集比较大的问题,正规方程组方法在后文中也会详细介绍。