机器学习笔记002——单变量线性回归
本学习笔记为吴恩达教授机器学习系列课程第二章:单变量线性回归(Linear Regression with One Variable)。
学习地址:[中英字幕]吴恩达机器学习系列课程
文字版参考及PPT来源:Coursera-ML-AndrewNg-Notes
第一章:【经典】吴恩达——机器学习笔记001
另外,本节之外笔者学习了如何用Latex编写数学公式,参考链接:Latex数学公式编写
本章概述
这一章内容首先介绍了我们将用到的一些模型表示的符号,然后引入代价函数来解决模型评估的问题,之后介绍了我们即将接触到的第一个机器学习算法,也是本章的重点:梯度下降算法。在本章的最后一节,我们学习了用梯度下降算法去解决最小化代价函数的问题,用来求解一元线性回归中的拟合问题。吴教授用生动的“下山法”讲解了“梯度下降”的概念,相信看完这章的小伙伴一定会收获颇多。
2-1 模型表示
首先我们仍以之前视频中提到的房价预测问题为例,首先从线性函数入手进行拟合,之后再逐步尝试更复杂的模型,运用更复杂的学习算法。此处说明,一元线性回归函数也就是单变量线性回归函数,吴教授的视频考虑到了不同层次同学的高数基础可能不同,对代数部分有非常细致的讲解。
回到线性函数的表示问题,课程中我们以下式:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_θ(x)=θ_0+θ_1x
hθ(x)=θ0+θ1x
来表示线性函数。这个公式其实我们已经非常熟悉了,一元线性函数,
θ
1
θ_1
θ1表示斜率,
θ
0
θ_0
θ0表示截距。
定义
(
x
(
i
)
,
y
(
i
)
)
(x^{(i)},y^{(i)})
(x(i),y(i))
表示第
i
i
i个样本,如
(
x
(
1
)
,
y
(
1
)
)
(x^{(1)},y^{(1)})
(x(1),y(1))表示第一个样本。这一定义就与我们习惯的用下标表示第
i
i
i个有所出入,当然我们可以根据习惯进行定义,但第一节的主要目的就是为了让听、授双方达成共识,能理解我们接下来所要用到的符号。
2-2 代价函数(Lost Function)
在本节中,我们要弄清楚如何把最有可能的直线与我们的数据相拟合,也就是以房价问题为例,我们怎样能找到一条拟合最优的线性函数。
“最优”就涉及到一个评估问题,我们如何选择上述线性函数中的
θ
0
θ_0
θ0和
θ
1
θ_1
θ1的值?
在线性回归中,我们要解决的是一个最小化的问题,我们希望
h
(
x
)
h(x)
h(x)和
y
y
y也就是预测值与实际值之间的差值尽可能小,即
[
h
(
x
)
−
y
]
2
[h(x)-y]^2
[h(x)−y]2的最小值,此处因为差值有正负,对差值整体进行平方运算可以消去正负差异并不会改变差值大小的比较。
要解决一个线性函数拟合最优的问题,我们要考量的不是某个点的最优,而是全局的最优,因此我们要对所有样本的样本值和输出值的差值平方进行求和,也就是:求预测值和实际值的差的误差平方和作为我们定义的代价函数,最终代价函数的值越小,说明我们得到的线性函数的拟合程度越高。此时得到的代价函数可表示为:
∑
i
=
1
m
(
h
(
x
i
)
−
y
i
)
2
\sum_{i=1}^{m}{(h(x^i)-y^i)^2}\\
i=1∑m(h(xi)−yi)2
其中,
m
m
m表示训练集的样本容量。
为了其计算出的数值更加直观,我们对其平均分
m
m
m份后取其
1
2
\dfrac{1}{2}
21的最小值。首先我们已知添加
1
m
\dfrac{1}{m}
m1(
m
m
m恒为正)不会对整个代价函数得到的
θ
0
θ_0
θ0和
θ
1
θ_1
θ1产生影响,添加
1
2
\dfrac{1}{2}
21同理,而添加
1
2
\dfrac{1}{2}
21是为了后续求导更加便利,这里我们后面会再次解释为什么对整体乘以
1
2
\dfrac{1}{2}
21。
于是,我们此时得到了我们的最终代价函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
i
)
−
y
i
)
2
J(θ_0,θ_1)=\dfrac{1}{2m}\sum_{i=1}^{m}{(h(x^i)-y^i)^2}
J(θ0,θ1)=2m1i=1∑m(h(xi)−yi)2
我们的目标为:
min
θ
0
,
θ
1
J
(
θ
0
,
θ
1
)
\min \limits_{θ_0,θ_1}J(θ_0,θ_1)
θ0,θ1minJ(θ0,θ1)
即尝试求解代价函数最小时的
θ
0
θ_0
θ0和
θ
1
θ_1
θ1的值。
2-3 代价函数的直观理解
代价函数有时也被称为平方误差代价函数(Squared Error Cost Function)。平方误差代价函数可能是解决回归问题最常用的方法了。
其实一接触到代价函数,我们自然而然会想到“最小二乘法”,以下文字来源于百度百科。
最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具 。
最小二乘法的目标函数为:
可以看到,此处二者的目标函数是极为相似的,寻求最小值的思路是一致的。
为了进一步理解代价函数,我们将上式进一步简化为一元线性函数,即:
h
θ
(
x
)
=
θ
1
x
h_θ(x)=θ_1x
hθ(x)=θ1x
可理解为
θ
0
=
0
θ_0=0
θ0=0,此时的
h
θ
(
x
)
h_θ(x)
hθ(x)和
J
(
θ
1
)
J(θ_1)
J(θ1)函数图像为:
很明显,当
θ
1
=
1
θ_1=1
θ1=1时,
h
θ
(
x
)
h_θ(x)
hθ(x)完全拟合,此时代价函数值为0,
θ
1
=
1
θ_1=1
θ1=1即为我们的求解目标。
若回归函数真的是一元函数,完全可以用我们之前学的对函数求导的方法得到极值点。若回归函数为二元函数,则需要求偏导。
若
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_θ(x)=θ_0+θ_1x
hθ(x)=θ0+θ1x,即回归函数为二元函数,此时
J
(
θ
0
,
θ
1
)
J(θ_0,θ_1)
J(θ0,θ1)函数为一个三维碗状函数,如下图:
h
θ
(
x
)
h_θ(x)
hθ(x)与
J
(
θ
0
,
θ
1
)
J(θ_0,θ_1)
J(θ0,θ1)的关系转化到平面图中为一个线性函数图像与一个等高线图,如下图:
很明显,当函数趋向于多元,我们的求解也就变得愈发困难,我们急需通过编程去求解更高维的图形,也就是我们即将学到的梯度下降法。
2-4 梯度下降
我们学习梯度下降算法的目的,是为了用这种算法将代价函数J最小化。实际上,梯度下降法被广泛应用于机器学习的众多领域。
我们学习这个算法的目标是:应用梯度下降法最小化任意函数。
吴教授形象地用“下山”这一概念来为我们解释梯度下降。
假设目前我们站在山顶,想要尽快下山,下山可以朝着任意方向走,每次迈的步长是相同的,那么我们选择什么方向才能尽快下山呢?
很明显,我们每走一步,都要朝着坡度最陡的方向迈步,只有这样,才能尽快到达山脚。
这里的“最陡”,也就是梯度最大,到达山脚,也就是我们所追求的局部最低点。
需要特别强调的是,这个“最优”具有局部性,每次出发点不同,最终达到的局部最优值也有很大差异。如下图:
此处有一个参数为α,我们称之为学习率(learning rate),这个参数决定了梯度下降时我们迈出的“步子”有多大,也就是以多大幅度更新参数
θ
1
θ_1
θ1。
当J=0时,更新
θ
0
θ_0
θ0和
θ
1
θ_1
θ1。特别要注意的是,
θ
0
θ_0
θ0和
θ
1
θ_1
θ1必须同时更新。如下式:
左侧为正确的,首先计算出temp0和temp1,再更新,如果像右侧这样先更新了
θ
0
θ_0
θ0,则会影响
θ
1
θ_1
θ1的值。
2-5 梯度下降的直观理解
本节目的是让同学们更直观地感受到这个算法的租用以及梯度下降算法的更新过程。这一节推荐大家看视频学习,以便深入理解梯度下降算法的寻优过程。
梯度下降函数的表达式:
式中的导数项在一元函数中,也就是求取切线斜率的意思。
当
J
(
θ
1
)
J(θ_1)
J(θ1)在极小值点右侧时,斜率为正,
θ
1
=
θ
1
−
θ_1=θ_1-
θ1=θ1−一个正数,结果变小;反之,当
J
(
θ
1
)
J(θ_1)
J(θ1)在极小值点左侧时,斜率为负,
θ
1
=
θ
1
−
θ_1=θ_1-
θ1=θ1−一个负数,结果变大,于是
θ
1
θ_1
θ1总是趋向于斜率为0的一点,即
J
(
θ
1
)
J(θ_1)
J(θ1)的极值点。
另外我们要探讨一下参数值α的取值问题:
当学习率α过小。学习速率太慢,算法将迟迟达不到最优点;当学习率过大,很有可能越过最优点,甚至无法收敛或发散,表现在图像上为算法在最优值附近“徘徊”,但迟迟不能到达理想精度。
另外我们也应该能发现,当
θ
1
θ_1
θ1的值逐步接近最小值时,其实步长是越来越小的,虽然学习率α不变,但斜率逐渐变小,这也使得函数易收敛。
2-6 梯度下降的线性回归
本节我们将本章两个重点知识:代价函数和梯度下降算法联系起来,谈谈我们的最终目的:用梯度下降算法解决最小化代价函数的问题。
上式中,左侧为我们最终得出的梯度下降算法核心表达式,右侧为我们线性回归函数的代价函数,我们的目标是求得最小化代价函数中
θ
0
θ_0
θ0和
θ
1
θ_1
θ1的值,即求一个能够拟合线性函数的最优参数值。将两式合并即可得到下式:
此处对
J
(
θ
0
,
θ
1
)
J(θ_0,θ_1)
J(θ0,θ1)求导得到的"2"刚好消去原式中的
1
2
\dfrac{1}{2}
21,这也是我们之前留的一个悬念,为什么要在
J
(
θ
0
,
θ
1
)
J(θ_0,θ_1)
J(θ0,θ1)中添加
1
2
\dfrac{1}{2}
21。
至此我们终于解决了最初的问题,如何计算回归函数的拟合函数中的参数值,与其说是计算,我更愿意把它理解为“寻找”。
最后,吴教授提到,这种梯度下降方法又叫“Batch”梯度下降法,或者翻译成批处理梯度下降算法,因为我们在求解时,梯度下降的每一步都使用所有的训练样本。
本章总结
本章的核心就是代价函数和梯度下降算法,我们的目标是寻找回归问题的最佳拟合函数,为了衡量“最佳”的概念,我们引入了代价函数,用误差平方的方法来体现拟合程度。为了求得代价函数的最小值,我们引入了一个常用来最小化函数的算法,叫梯度下降法。这个算法通过每次向梯度最大的方向“迈步”,也就是参数每次变化一个单位的学习率x斜率的方式,不断逼近一个局部最优值,从而求解。
在面对多元多维复杂函数时,我们不得不借助计算机的力量通过编程求解,这时算法就帮了我们大忙。本章学习让我深深感受到了算法的魅力,把本来觉得很抽象的“梯度下降”概念彻底弄懂了,感谢吴教授这么优秀的课程!
下一章我们将学习正规方程组法,一种梯度下降算法的通用算法。
感谢阅读。