吴恩达机器学习 第二章 单变量线性回归

本文中所有的图片均来自 网易云课堂 - 吴恩达机器学习 的视频截图。

课时6 模型描述

假设你的朋友在北京有一套100平的房子要卖,你可以利用一组北京的已知房子大小和房价的数据进行模型拟合,这样子就可以预测一个数值。这个问题属于 监督学习,因为我们事先知道了不同大小的房子对应的房价是多少。同时,这个问题也属于 回归,因为我们预测的房价是一个连续性的输出。另一种常用的监督学习方式 分类,其预测的输出是离散的,比如根据数据预测一个人是否患感冒就是分类问题。

吴恩达机器学习 第二章 单变量线性回归
更为正式一点的描述,在监督学习中,我们会有一个数据集,我们称其为 训练集,在上面的例子中是房子大小及其对应的房价。在此我们需要定义一些符号,以方便后续的课程。

定义:

  • mm:训练样本的数量。在此例子中就是表格的行数。
  • xx:表示输入变量,也叫特征。此例子中是房子的大小。
  • yy:输出变量,也叫目标变量。此例子中是房价。
  • (x,y)(x, y):一个训练样本。此例子中是表格的任意一行。
  • (x(i),y(i))(x^{(i)},y^{(i)}):第 i 个训练样本。此例子中,x(1)=2104y(1)=460x^{(1)}=2104,y^{(1)}=460.

吴恩达机器学习 第二章 单变量线性回归

接下来我们来描述一下监督学习的过程:

  1. 首先我们会给出一个训练集;

  2. 然后在上面应用一个学习算法;

  3. 最后这个算法会输出一个 假设函数(hypothesis function),这个假设函数的作用就是把输入 x 映射到输出 y,在上面的例子中就是:输入房子的大小,能够输出房价。

    ps:不用纠结为什么这个函数叫假设函数,是不是有什么含义,这只是机器学习一直沿用的叫法,就跟着叫就行了。

吴恩达机器学习 第二章 单变量线性回归

在本章中,我们的假设函数是线性函数,表示为 hθ(x)=θ0+θ1xh_\theta(x) = \theta_0+\theta_1x,有时候也简写为 h(x)h(x)。其中的 θi\theta_i 我们称之为 模型参数,学习就是学习这些参数。

课时7 代价函数

我们先来看一下,对于不同的 θi\theta_i,我们的模型是什么样的。这个很简单,就是一条直线的方程。

吴恩达机器学习 第二章 单变量线性回归

在监督学习中,我们会有一个训练集,而我们的工作就是找出合适的 θ0\theta_0θ1\theta_1,使假设函数表示的直线能够较好的拟合训练数据。现在问题是该怎么去找?我们的主意是:对于一个训练样本 (x,y)(x,y),找到的 θ0\theta_0θ1\theta_1 ,要使得 h(x)h(x)yy 的差距最小。

所以我们要解决的其实是一个最小化问题,即使得 (h(x)y)2(h(x)-y)^2 最小。写成公式应该是:

minimumθ0θ112mi=1m(hθ(x(i))y(i))2minimum_{\theta_0 \theta_1} \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2

然后我们令 J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(\theta_0, \theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 ,于是我们的公式就可以写成:

minimumθ0θ1J(θ0,θ1)minimum_{\theta_0 \theta_1} J(\theta_0, \theta_1)

其中的 J(θ0,θ1)J(\theta_0, \theta_1) 就是 代价函数。在之后的课程会进行详细的介绍。

吴恩达机器学习 第二章 单变量线性回归

课时8 代价函数的直观理解(一)

首先我们简化一下我们的 hθ(x)h_\theta(x),令 θ0=0\theta_0=0,所以 hθ(x)=θ1xh_\theta(x)=\theta_1x。同时我们的J(θ0,θ1)J(\theta_0, \theta_1) 也可以简化为 J(θ1)=12mi=1m(θ1x(i)y(i))2J(\theta_1)=\frac{1}{2m} \sum_{i=1}^{m}(\theta_1x^{(i)}-y^{(i)})^2。我们再一次理清一下他们的关系,即 hθ(x)h_\theta(x) 是关于 xx 的函数,而 J(θ1)J(\theta_1) 是关于 θ1\theta_1 的函数,我们的目的是找到 J(θ1)J(\theta_1) 最小的 θ1\theta_1

然后现在我们有一个训练集,包含三个点:(1,1),(2,2),(3,3)(1, 1), (2,2),(3,3)

  • θ1=1\theta_1=1 时,在下图左可以看到对应的直线,下图右表示 J(θ1)J(\theta_1) 的取值,此时只有一个点 (1,0)(1,0)

    吴恩达机器学习 第二章 单变量线性回归

  • θ1=0.5\theta_1=0.5 时,同理我们可以画出对应直线和新的一个点。

    吴恩达机器学习 第二章 单变量线性回归

  • 如此,根据 θ1\theta_1 的取值不同,我们可以画出一系列的点,如下图。

    吴恩达机器学习 第二章 单变量线性回归

我们可以很容易的看出,当 θ1=1\theta_1=1 时,数据拟合的效果最好,而对应的 J(θ1)J(\theta_1) 也取得了最小值。

课时8 代价函数的直观理解(二)

本节我们保留了 θ0\theta_0 ,上一节中我们的代价函数画出来是一个碗状的曲线,现在我们有了 θ0\theta_0θ1\theta_1,就需要在3维坐标中画出代价函数的图像,实际上这也是一个碗状,不过不是一条线,而是一个面。

吴恩达机器学习 第二章 单变量线性回归

课时10 梯度下降

梯度下降是一个在机器学习中很重要的算法,不仅仅应用于线性回归,当下比较热门的神经网络,也是利用了梯度下降算法。

接下来讲一下问题。我们会有一个代价函数 J(θ0,θ1)J(\theta_0,\theta_1),我们要做的就是找到使 J(θ0,θ1)J(\theta_0,\theta_1) 最小的 θ0,θ1\theta_0,\theta_1。在实际应用中,参数可以不仅有两个,这里为了简洁起见只使用两个参数。

接下来讲一下梯度下降的思路:

  • 首先给参数赋初值,一般我们会令 θ0=0,θ1=0\theta_0=0, \theta_1=0,不过你开心就行。
  • 然后一点点的改变 θ0,θ1\theta_0,\theta_1,每次都使得 J(θ0,θ1)J(\theta_0,\theta_1) 的值变得更小,直到得到一个局部最小值。

现在的问题是,该怎么改变 θ0,θ1\theta_0,\theta_1才能使得 J(θ0,θ1)J(\theta_0,\theta_1) 的值变得更小?我们先来做一个直观的演示,假设 J(θ0,θ1)J(\theta_0, \theta_1) 的图像如下图所示:

吴恩达机器学习 第二章 单变量线性回归

是不是很像地形图,现在假设你设了一个初值,刚好在其中的一座小山包上,每次都找一条可以让你最快下山的路(即J(θ0,θ1)J(\theta_0,\theta_1) 以最快的速度变小),你终于找到了一个小盆地,如下图:

吴恩达机器学习 第二章 单变量线性回归

但是梯度下降算法一个特点就是,如果你选择不同的初始值,你就可能得到一个完全不同的结果。假如你换了一个初始值,如下图所示,你就会走到另一个小盆地里。

吴恩达机器学习 第二章 单变量线性回归

以上仅仅只是因为稍微调整了一下初始值,所以梯度下降可以找到一个局部最小值,但不保证是全局最小值。

接下来我们看一下梯度下降的数学表示:

吴恩达机器学习 第二章 单变量线性回归

意思就是重复那一个表达式直到收敛。我们逐项解释一下:

  • :=:= 表示赋值,等同于大部分编程语言的 ==
  • α\alpha 表示 学习率(learning rate),以上面的例子来讲的话就是表示你每次往山下走时迈的步子的大小,α\alpha 很大表示你下山是大步流星的走,α\alpha 很小表示你下山走小碎步。
  • θjJ(θ0,θ1)\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) 是梯度,具体的后面会讲到。你可以先放心的把他放到一边。

一个需要注意的问题是,在使用梯度下降时,需要同时更新所有的参数,如下图左,如果不同时更新(如下图右),可能也可以得到一个不错的结果,但是这个算法就不叫梯度下降了。

吴恩达机器学习 第二章 单变量线性回归

课时11 梯度下降的直观理解

以下是我们上一节讲过的梯度下降算法,这一节我们的目的就是为了讲清楚 学习率α\alphaθjJ(θ0,θ1)\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) 的作用。为了简化问题,我们还是选择令 θ0=0\theta_0=0,于是代价函数就变成了 J(θ1)J(\theta_1),同时我们的偏导项也就变成了 ddθ1J(θ1)\frac{d}{d\theta_1}J(\theta_1)

吴恩达机器学习 第二章 单变量线性回归

然后我们假设 J(θ1)J(\theta_1) 的图像如下,还是一个碗状的曲线,我们选择图中红点开始运行梯度下降算法,这个点的导数即此点的切线斜率,切线如红色线段所示,易知该切线斜率为正数。由于学习率 α\alpha 一定是正数,所以更新后的 θ1\theta_1 一定变得更小了,从图上可以看出,θ1\theta_1 确实是朝着正确的方向前进了。

吴恩达机器学习 第二章 单变量线性回归

现在我们换一个点试一下,如下图,在此点具有负斜率,于是 θ1\theta_1 更新之后就会变大,也是朝着正确的方向前进了。

吴恩达机器学习 第二章 单变量线性回归

接下来我们再看一下学习率α\alpha有什么用。首先我们看一下如果学习率太小会怎么样,如下图上半部分所示,学习率太小的话,每次迭代就只挪动一小步,在实际应用中,可能会导致收敛太慢,浪费计算资源等问题。

如果学习率太大的话,可能会跨过最小值,导致算法不能收敛,甚至还可能发散。

吴恩达机器学习 第二章 单变量线性回归

如果 θ1\theta_1 已经处于一个局部最小值会怎么样?那么此点的导数为 0,θ1\theta_1 会保持不变。

吴恩达机器学习 第二章 单变量线性回归

所以应该怎么确定学习率呢?我们发现,在越接近局部最小值的地方,斜率就会变得越来越平缓,所以我们的做法是根据斜率的大小来确定学习率,如下图所示,在梯度下降的过程中,学习率会自动调整,在越接近局部最小值的地方就越小。

吴恩达机器学习 第二章 单变量线性回归

课时12 线性回归的梯度下降

本节我们要做的就是把梯度下降算法应用到线性回归模型中,要做到这一点最重要的就是搞清楚 θjJ(θ0,θ1)\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) 的作用。

吴恩达机器学习 第二章 单变量线性回归

首先我们先把 θjJ(θ0,θ1)\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) 算出来,如下图,会算的可以自己算一下,不会算的也没关系。

吴恩达机器学习 第二章 单变量线性回归

将以上的结果代入梯度下降算法:

吴恩达机器学习 第二章 单变量线性回归

以下是使用房价数据模拟梯度下降的示意图,右边的是等高线图,每个小红叉是一次更新的结果,从外围一直更新到一个最优解,最终得到的直线如左边所示,很好的拟合了数据。

吴恩达机器学习 第二章 单变量线性回归

最后要讲的一点是,我们的这种梯度下降的方法叫做 Batch Gradient Descent,即每次更新参数都用到了所有的训练样本(因为J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(\theta_0, \theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 用到了所有的数据)。

吴恩达机器学习 第二章 单变量线性回归