「吴恩达机器学习」2.单变量线性回归
Model Representation
主要介绍单变量线性回归算法,以及监督学习的流程。
假如我们想要预测房价,那么,我们需要做的一件事就是构建一个模型,也许是一条直线,这样我们就能够通过房子的大小来预测对应的房价。
在监督学习中我们有一个数据集,这个数据集被称为训练集(Training Set)。
以房价预测为例,我们的训练集如下:
监督学习的工作流程如下:
\(h\)是一个从\(x\)到\(y\)的函数映射。
那么对于房价预测问题,我们应该如何表示假设函数\(h\)?
一种可能的表达方式为:\(h_\theta(x)=\theta_0+\theta_1 x\),因为只含有一个特征/输入变量,因此这样的问题叫做单变量线性回归问题。
Cost Function
主要定义了代价函数,这有助于我们选择最好的模型来拟合数据集。
在之前的房价预测问题中,我们定义来假设函数\(h_\theta(x)\),我们现在要做的是为我们的模型选择合适的参数(parameters)\(\theta_0\)和\(\theta_1\)。
选择了不同的参数意味着我们会画出不一样的直线。
我们的目标是选择合适的参数,使得在训练集中预测值\(h_\theta(x)\)尽可能地接近真实值\(y\),即预测值和真实值之间的误差尽可能小。为了量化这个误差,我们引入了代价函数(cost function)来表示总体的误差。
代价函数也称为平方误差函数(squared error funciton),平方误差代价函数。
其他的代价函数也能起到作用,但是平方误差函数在回归中是最常见的代价函数。
Cost Function Intuition
上节课主要通过数学定义的方式讲解来代价函数,本节课主要通过直观感受,加深对代价函数的理解。
下图中左边部分是我们之前介绍的假设函数、参数、代价函数,以及我们的目标。为了更方便地介绍代价函数,我们先把假设函数简化成只有一个参数的形式:\(h_\theta(x)=\theta_1x\),同时目标也简化成了求解使得\(J(\theta_1)\)最小的参数\(\theta_1\)。
假设左图中的三个红色✖️就是我们的数据集,选取不同的\(\theta_1\),就会得到不同斜率的直线,也就产生了不同的代价,把每个\(\theta_1\)的值以及对应的代价\(J(\theta_1)\)绘制在右图,我们就可以得到一个类似的曲线。
可以看到在这种情况下,当\(\theta_1=1\)的时候,\(J(\theta_1)=0\),也就是代价最小的时候,我们完美地拟合了数据集。
现在我们把假设函数改回原来两个参数的形式,接下来通过等高线的方式直观地感受代价函数。
回到之前房价预测的例子中,如果假设函数\(h_\theta(x)=50+0.06x\),那么我们将会得到下面的直线。
同样的,对于不同的参数\(\theta_0\)和\(\theta_1\),我们将得到不同的cost,由于\(\theta_0\)、\(\theta_1\)和cost一共三个参数,所以我们用3维图表示如下:
图中高度代表cost。
为了方便表示我们可以采用等高线图的方式表示:
等高线图中相同的圆圈代表相同的cost。
通过这些图形,我们可以更好地理解代价函数是怎样的,对应的假设函数是怎样的。
当然,我们不希望通过把这些点画出来,然后人工找到最好的参数,我们真正需要的是一种有效的算法,能够自动地找出代价函数最小对应的参数来。
Gradient Descent
本节课主要介绍如何通过梯度下降法找到代价函数的最小值。
既然我们的目标是找到最小的\(J(\theta_0, \theta1)\),那么我们的步骤应该是:
- 随机选取起始的\(\theta_0\)和\(\theta_1\)
- 不断地改变\(\theta_0\)和\(\theta_1\)来减小\(J(\theta_0, \theta1)\),直到找到最小值
我们通过图形直观地感受这整个流程。
首先我们把代价函数想象成一片山丘,我们随机出现在山丘中的一个地方,目标是尽快地到达最低点。假设我们眼前雾气很大,没办法一眼看到最低点的方向,于是我们只能环顾四周,找到最陡的一个方向,然后往前迈出一步。以此类推,我们不断地迈向最陡的地方,最终就会到达一个最低点。也就是代价函数\(J(\theta_0,\theta_1)\)的最小值(minimum),也称为最优解(optimum)。
如果我们一开始出现的起点不同,那么我们很有可能到达了不同的最低点。因为在这种情况下,我们到达的只是局部最小值(local minimum),而非全局最小值(global minimum)。
Gradient descent algorithm
总结起来,梯度下降算法的数学定义如下:
\(\alpha\)称为学习率(learning rate),它决定了我们沿着最陡的方向迈出的步子有多大。
这里参数\(\theta_0\)和\(\theta_1\)采用了相同的学习率。
注意:参数\(\theta_0\)和\(\theta_1\)需要同步更新。
Gradient Descent Intuition
上节课主要通过数学定义的方式介绍了梯度下降法,本节课程将更直观地介绍梯度下降法中的一些细节问题。
我们已经知道梯度下降法定义为:
可以看到,参数\(\theta\)的变化取决于学习率\(\alpha\)和导数项\(\frac{\partial}{\partial \theta_j}J(\theta_0, \theta_1)\),因此我们将分别介绍这两个部分对于代价函数的影响。
先看看导数项对于代价函数的影响。
为了简化问题,我们考虑只有一个参数的情况,假设我们的起始点\(\theta_1\)在代价函数\(J\)的右边,在这种情况下,导数(斜率)大于0,而学习率\(\alpha\)也是一个正数,因此\(\theta_1\)减小,朝着左边最小值的方向前进。
假设我们的起始点\(\theta_1\)在代价函数\(J\)的左边,在这种情况下,导数(斜率)小于0,而学习率\(\alpha\)也是一个正数,因此\(\theta_1\)增大,朝着右边最小值的方向前进。
接下来看看学习率对于代价函数的影响。
假如学习率太大,那么梯度下降每次只会更新一点点,速度就会非常慢;假如学习率太大,那么梯度下降可能无法收敛,甚至发散。
如果\(\theta_1\)当前已经处于局部最小值,那么下一步会怎么更新呢?
因为\(\theta_1\)处于局部最小值,因此导数\(\frac{d}{d\theta_1}J(\theta_1)\)为0,所以:
即\(\theta_1\)不会再继续更新。
在下图中,\(\theta_1\)一开始处在品红色的点,因为导数非常大,所以下一步就更新到绿色点;同时,导数减小了一下,所以下一步更新到红色点,以此类推。
我们可以发现,即使学习率\(\alpha\)是固定的,但是随着参数\(\theta_1\)越来越接近最小值,导数项越来越小,所以更新步长也会越来越小。也就是说即使学习率是固定的,我们的更新步长也会自动减小,所以不需要逐步减小学习率,就能达到一个局部最小值。
Gradient Descent for Linear Regression
前面的课程中分别介绍了线性回归模型以及梯度下降算法,本节课程主要介绍如何将梯度下降算法应用到求解线性回归模型的代价函数最优解上。
对线性回归问题运用梯度下降法,关键在于求解代价函数\(J(\theta_0, \theta_1)\)对于参数\(\theta_0\)和\(\theta_1\)的偏导数:
因此梯度下降算法改写为:
从我们之前对于梯度下降法的介绍可以得知,梯度下降法的一个问题是有可能求解到的是局部最优解,而非全局最优解。但是在线性回归问题中,我们不用担心这个问题。
因为在线性回归中,代价函数是一个凸函数(convex function),可以简单理解为一个碗状函数,因此不存在局部最优解,只有全局最优解。
现在我们已经可以采用梯度下降法来处理之前的房价预测问题。
我们刚刚使用的算法,也称为批梯度下降法(Batch Gradient Descent)。
“Batch”: Each step of gradient descent uses all the training examples.
“Batch”的意思指的是,我们在每一次计算偏导数的数值时,都用到了所有的训练样本。
梯度下降法虽然被我们应用在线性回归的代价函数中,但是其实它可以应用在任何的代价函数中。