线性回归模型
数据集表示
这里我们规定了一些表示方法:
- m:表示数据集大小
- x’s:表示输入变量或者特性
- y’s:表示输出变量或目标
\((x^{(i)}, y^{(i)})\)表示第i个训练数据
预测函数表示
这里预测函数使用了hypothesis这个英文单词,虽然表达上不太好,但由于早期的机器学习使用了这个单词,所以一直沿用下来。
代价函数
线性模型假设预测函数是如下的线性函数:
\[h_{\theta}(x)=\theta_0+\theta_1x\]\(\theta_0\)和\(\theta_1\)被称作模型参数,我们要做的就是如何选择这两个参数,使得\(h_\theta(x)\)接近训练集(x,y)。
判断误差的方法有很多,常见的就是计算均方差方法,即:
\[J(\theta_0, \theta_1) = \frac1{2m}\displaystyle\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\]注意:视频中吴恩达把公式写错了。机器学习中把判断误差的函数称为代价函数(Cost Function),在这个例子中我们的代价函数是\(J(\theta_0, \theta_1)\)
找到使得代价函数最小的预测函数
现在,我们设定了预估函数模型
\[h_\theta(x)=\theta_0+\theta_1x\]模型有两个参数\(\theta_0,\theta_1\),我们将这两个参数作为变量,代入代价函数\(J(\theta_0, \theta_1)\)会得到一个样本(x,y)集合的误差,我们的目标就是找到能让这个误差最小化的\(\theta_0, \theta_1\)
\[\frac{minimize}{\theta_0, \theta_1}J(\theta_0, \theta_1)\]怎么找呢?
直觉1
先考虑\(J(\theta_0, \theta_1)\)中\(\theta_0=0\)的情况,这样公式可以简化为:
\[J(\theta_1)=\theta_1x\]然后假设有如下样本集合m:
(1, 1), (2, 2), (3, 3)
对于不同的\(\theta1\)可以计算出\(J(\theta_1)\),把它们表示在坐标上,就是一条弓形曲线,如下图所示。
从图中可以看出,当\(\theta_1=1\)时,\(J(\theta_1)\)最小。
直觉2
现在我们考虑没有简化的\(J(\theta_0, \theta_1)\),由于是两个参数,因此把\(J(\theta_0, \theta_1)\)表示在坐标上就是一个弓形曲面。
这个三维曲面可以用轮廊图(等高线)来表示:
不同的演示代表不同的\(J(\theta_0, \theta_1)\)值,蓝色越深代表误差越小,红色越深代表误差越大。
接下来,我们需要一个算法去自动找出误差最小的\(J(\theta_0, \theta_1)\)
梯度下降法
在寻找最小的\(J(\theta_0, \theta_1)\)算法中,比较常用的就是梯度下降法。这个算法是随机选择一个起始点,计算出\(\theta_0, \theta_1\)的斜率,选择斜率最大的方向前进。
repeat until conergence { \(\theta_j :=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0, \theta_1)\) (for j=0 and j=1) }
这里的\(\alpha\)是学习率,也可以理解为步长,算法的这种表示方法比较有意思,简洁明了,十分适用于科学算法的描述, 梯度下降法有个特点就是,当你选择不同的起始点,可能会得到不同的局部最优解:
如上图所示,不同的起始点会引导我们到达不同的两个山谷。
直观
直观上来看梯度下降法可能会导致如下两个问题:
- 学习率太小,导致需要计算很多次才能找到最低点
- 学习率太大,导致跳过了最低点
那么是不是,必须要调整学习率呢?实际上,不需要。参考下图:
图上可以看出,即使学习率是固定的,梯度下降法会在接近低点时自动减小步长。
线性函数的梯度下降
值得注意的是,线性函数是不存在局部最优解,只有全局最优解,所以只要我们使用的是线性模型那么梯度下降法找到的就是全局最优解。在机器学习中每次步进时都需要计算所有的训练集合,每一次计算成为Batch。