吴恩达机器学习 第二章 单变量线性回归
本文中所有的图片均来自 网易云课堂 - 吴恩达机器学习 的视频截图。
课时6 模型描述
假设你的朋友在北京有一套100平的房子要卖,你可以利用一组北京的已知房子大小和房价的数据进行模型拟合,这样子就可以预测一个数值。这个问题属于 监督学习,因为我们事先知道了不同大小的房子对应的房价是多少。同时,这个问题也属于 回归,因为我们预测的房价是一个连续性的输出。另一种常用的监督学习方式 分类,其预测的输出是离散的,比如根据数据预测一个人是否患感冒就是分类问题。
更为正式一点的描述,在监督学习中,我们会有一个数据集,我们称其为 训练集,在上面的例子中是房子大小及其对应的房价。在此我们需要定义一些符号,以方便后续的课程。
定义:
- :训练样本的数量。在此例子中就是表格的行数。
- :表示输入变量,也叫特征。此例子中是房子的大小。
- :输出变量,也叫目标变量。此例子中是房价。
- :一个训练样本。此例子中是表格的任意一行。
- :第 i 个训练样本。此例子中,.
接下来我们来描述一下监督学习的过程:
-
首先我们会给出一个训练集;
-
然后在上面应用一个学习算法;
-
最后这个算法会输出一个 假设函数(hypothesis function),这个假设函数的作用就是把输入 x 映射到输出 y,在上面的例子中就是:输入房子的大小,能够输出房价。
ps:不用纠结为什么这个函数叫假设函数,是不是有什么含义,这只是机器学习一直沿用的叫法,就跟着叫就行了。
在本章中,我们的假设函数是线性函数,表示为 ,有时候也简写为 。其中的 我们称之为 模型参数,学习就是学习这些参数。
课时7 代价函数
我们先来看一下,对于不同的 ,我们的模型是什么样的。这个很简单,就是一条直线的方程。
在监督学习中,我们会有一个训练集,而我们的工作就是找出合适的 和 ,使假设函数表示的直线能够较好的拟合训练数据。现在问题是该怎么去找?我们的主意是:对于一个训练样本 ,找到的 和 ,要使得 和 的差距最小。
所以我们要解决的其实是一个最小化问题,即使得 最小。写成公式应该是:
然后我们令 ,于是我们的公式就可以写成:
其中的 就是 代价函数。在之后的课程会进行详细的介绍。
课时8 代价函数的直观理解(一)
首先我们简化一下我们的 ,令 ,所以 。同时我们的 也可以简化为 。我们再一次理清一下他们的关系,即 是关于 的函数,而 是关于 的函数,我们的目的是找到 最小的 。
然后现在我们有一个训练集,包含三个点:。
-
当 时,在下图左可以看到对应的直线,下图右表示 的取值,此时只有一个点 。
-
当 时,同理我们可以画出对应直线和新的一个点。
-
如此,根据 的取值不同,我们可以画出一系列的点,如下图。
我们可以很容易的看出,当 时,数据拟合的效果最好,而对应的 也取得了最小值。
课时8 代价函数的直观理解(二)
本节我们保留了 ,上一节中我们的代价函数画出来是一个碗状的曲线,现在我们有了 和 ,就需要在3维坐标中画出代价函数的图像,实际上这也是一个碗状,不过不是一条线,而是一个面。
课时10 梯度下降
梯度下降是一个在机器学习中很重要的算法,不仅仅应用于线性回归,当下比较热门的神经网络,也是利用了梯度下降算法。
接下来讲一下问题。我们会有一个代价函数 ,我们要做的就是找到使 最小的 。在实际应用中,参数可以不仅有两个,这里为了简洁起见只使用两个参数。
接下来讲一下梯度下降的思路:
- 首先给参数赋初值,一般我们会令 ,不过你开心就行。
- 然后一点点的改变 ,每次都使得 的值变得更小,直到得到一个局部最小值。
现在的问题是,该怎么改变 才能使得 的值变得更小?我们先来做一个直观的演示,假设 的图像如下图所示:
是不是很像地形图,现在假设你设了一个初值,刚好在其中的一座小山包上,每次都找一条可以让你最快下山的路(即 以最快的速度变小),你终于找到了一个小盆地,如下图:
但是梯度下降算法一个特点就是,如果你选择不同的初始值,你就可能得到一个完全不同的结果。假如你换了一个初始值,如下图所示,你就会走到另一个小盆地里。
以上仅仅只是因为稍微调整了一下初始值,所以梯度下降可以找到一个局部最小值,但不保证是全局最小值。
接下来我们看一下梯度下降的数学表示:
意思就是重复那一个表达式直到收敛。我们逐项解释一下:
- 表示赋值,等同于大部分编程语言的 。
- 表示 学习率(learning rate),以上面的例子来讲的话就是表示你每次往山下走时迈的步子的大小, 很大表示你下山是大步流星的走, 很小表示你下山走小碎步。
- 是梯度,具体的后面会讲到。你可以先放心的把他放到一边。
一个需要注意的问题是,在使用梯度下降时,需要同时更新所有的参数,如下图左,如果不同时更新(如下图右),可能也可以得到一个不错的结果,但是这个算法就不叫梯度下降了。
课时11 梯度下降的直观理解
以下是我们上一节讲过的梯度下降算法,这一节我们的目的就是为了讲清楚 学习率 和 的作用。为了简化问题,我们还是选择令 ,于是代价函数就变成了 ,同时我们的偏导项也就变成了 。
然后我们假设 的图像如下,还是一个碗状的曲线,我们选择图中红点开始运行梯度下降算法,这个点的导数即此点的切线斜率,切线如红色线段所示,易知该切线斜率为正数。由于学习率 一定是正数,所以更新后的 一定变得更小了,从图上可以看出, 确实是朝着正确的方向前进了。
现在我们换一个点试一下,如下图,在此点具有负斜率,于是 更新之后就会变大,也是朝着正确的方向前进了。
接下来我们再看一下学习率有什么用。首先我们看一下如果学习率太小会怎么样,如下图上半部分所示,学习率太小的话,每次迭代就只挪动一小步,在实际应用中,可能会导致收敛太慢,浪费计算资源等问题。
如果学习率太大的话,可能会跨过最小值,导致算法不能收敛,甚至还可能发散。
如果 已经处于一个局部最小值会怎么样?那么此点的导数为 0, 会保持不变。
所以应该怎么确定学习率呢?我们发现,在越接近局部最小值的地方,斜率就会变得越来越平缓,所以我们的做法是根据斜率的大小来确定学习率,如下图所示,在梯度下降的过程中,学习率会自动调整,在越接近局部最小值的地方就越小。
课时12 线性回归的梯度下降
本节我们要做的就是把梯度下降算法应用到线性回归模型中,要做到这一点最重要的就是搞清楚 的作用。
首先我们先把 算出来,如下图,会算的可以自己算一下,不会算的也没关系。
将以上的结果代入梯度下降算法:
以下是使用房价数据模拟梯度下降的示意图,右边的是等高线图,每个小红叉是一次更新的结果,从外围一直更新到一个最优解,最终得到的直线如左边所示,很好的拟合了数据。
最后要讲的一点是,我们的这种梯度下降的方法叫做 Batch Gradient Descent,即每次更新参数都用到了所有的训练样本(因为 用到了所有的数据)。