|
@@ -131,7 +131,7 @@ |
|
|
| ... | ... | |
|
|
| ... | ... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这个训练集中,既给出了输入 $x$ ,又给出了输出结果 $y$,即”正确结果“,预测的量是连续的,属于监督学习中的回归问题。 |
|
|
|
|
|
|
|
|
房价预测训练集中,同时给出了输入 $x$ 和输出结果 $y$,即给出了人为标注的**”正确结果“**,且预测的量是连续的,属于监督学习中的回归问题。 |
|
|
|
|
|
|
|
|
2. **问题解决模型** |
|
|
2. **问题解决模型** |
|
|
|
|
|
|
|
@@ -143,19 +143,17 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。 |
|
|
|
|
|
|
|
|
> $x$: 特征/输入变量。 |
|
|
> $x$: 特征/输入变量。 |
|
|
|
|
|
|
|
|
上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测前的输入),所以怎样解得 $\theta$ 以拟合数据,成了求解该问题的最终问题。 |
|
|
|
|
|
|
|
|
上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测前的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。 |
|
|
|
|
|
|
|
|
单变量,即只有一个特征(如例子中房屋的面积这个特征)。 |
|
|
单变量,即只有一个特征(如例子中房屋的面积这个特征)。 |
|
|
|
|
|
|
|
|
## 2.2 损失函数(Cost Function) |
|
|
## 2.2 损失函数(Cost Function) |
|
|
|
|
|
|
|
|
为了求解上个视频中提到的 $\theta$,本视频引入了损失函数(Cost Function)这个概念,损失函数,用于度量预测结果于实际结果的**建模误差**。 |
|
|
|
|
|
|
|
|
目的在于求解预测结果 $h_\theta(x)$ 最接近于实际结果 $y$ 时 $\theta$ 的取值,则问题可表达为**求解 $\sum\limits_{i=0}^{m}(h_\theta(x^{(i)})-y^{(i)})$ 的最小值**。 |
|
|
|
|
|
|
|
|
目的在于求解预测结果 $h_\theta(x)$ 最接近于实际结果 $y$ 时 $\theta$ 的取值,则可以把问题转化为**求解 $\sum\limits_{i=0}^{m}(h_\theta(x^{(i)})-y^{(i)})$ 的最小值**。 |
|
|
|
|
|
|
|
|
|
|
|
> m: 训练集中的样本总数 |
|
|
|
|
|
|
|
|
> $m$: 训练集中的样本总数 |
|
|
> |
|
|
> |
|
|
> y: 目标变量/输出变量 |
|
|
|
|
|
|
|
|
> $y$: 目标变量/输出变量 |
|
|
> |
|
|
> |
|
|
> $\left(x, y\right)$: 训练集中的实例 |
|
|
> $\left(x, y\right)$: 训练集中的实例 |
|
|
> |
|
|
> |
|
@@ -163,15 +161,15 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
上图中,为在 $\theta$ 取不同值时的拟合情况,蓝色虚线代表的即为误差,要最小化的就是每个预测点的误差值。 |
|
|
|
|
|
|
|
|
上图展示了当 $\theta$ 取不同值时,$h_\theta\left(x\right)$ 对数据集的拟合情况,蓝色虚线部分代表**建模误差**(预测结果与实际结果之间的误差),我们的目标就是最小化所有误差之和。 |
|
|
|
|
|
|
|
|
这里则要引入损失函数的概念,我们对求最小值的式子进行数学建模,让其变得易于求最小值,而其中一种办法就是建模为二次函数,即统计学上的平方损失函数(最小二乘法): |
|
|
|
|
|
|
|
|
为了求解最小值,引入损失函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法): |
|
|
|
|
|
|
|
|
$$ J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $$ |
|
|
$$ J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $$ |
|
|
|
|
|
|
|
|
> 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解。 |
|
|
> 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解。 |
|
|
|
|
|
|
|
|
对于之前的房价问题来说,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。 |
|
|
|
|
|
|
|
|
讨论到这里,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -184,35 +182,35 @@ $$ J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\the |
|
|
- 损失函数(Cost Function): $ J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $ |
|
|
- 损失函数(Cost Function): $ J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $ |
|
|
- 目标(Goal): $\underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right)$ |
|
|
- 目标(Goal): $\underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right)$ |
|
|
|
|
|
|
|
|
为了直观的理解损失函数到底是在做什么,先假设 $\theta_1 = 0$,并假设训练集有三个数据,分别为$\left(1, 1\right), \left(2, 2\right), \left(3, 3\right)$。 |
|
|
|
|
|
|
|
|
为了直观理解损失函数到底是在做什么,先假设 $\theta_1 = 0$,并假设训练集有三个数据,分别为$\left(1, 1\right), \left(2, 2\right), \left(3, 3\right)$。 |
|
|
|
|
|
|
|
|
<!-->TODO: 可更换为动图<--> |
|
|
<!-->TODO: 可更换为动图<--> |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
上图显示了 $J\left(\theta_0, \theta_1\right)$ 随着 $\theta_1$ 的变化而变化,**当 $\theta_1 = 1$ 时,$J\left(\theta_0, \theta_1 \right) = 0$,取得最小值。** |
|
|
|
|
|
|
|
|
上图中 $J\left(\theta_0, \theta_1\right)$ 随着 $\theta_1$ 的变化而变化,**当 $\theta_1 = 1$ 时,$J\left(\theta_0, \theta_1 \right) = 0$,取得最小值。** |
|
|
|
|
|
|
|
|
## 2.4 损失函数 - 直观理解2(Cost Function - Intuition II) |
|
|
## 2.4 损失函数 - 直观理解2(Cost Function - Intuition II) |
|
|
|
|
|
|
|
|
> 注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解也可跳过。 |
|
|
|
|
|
|
|
|
> 注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解可跳过。 |
|
|
|
|
|
|
|
|
数据集: |
|
|
|
|
|
|
|
|
给定数据集: |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
下图是在该数据集中,平方损失函数在 $\theta_0 \neq 0$ 时绘制出的3-D图像,空间的高度则为 $J\left(\theta\right)$ 的值。 |
|
|
|
|
|
|
|
|
参数在 $\theta_0$ 不恒为 $0$ 时损失函数 $J\left(\theta\right)$ 关于 $\theta_0, \theta_1$ 的3-D图像,图像中的高度为损失函数的值。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
由于3-D图形不便于标注,所以将3-D图形转换为**轮廓图(contour plot)**,下面用轮廓图来作直观理解,即下图中的右图。 |
|
|
|
|
|
|
|
|
由于3-D图形不便于标注,所以将3-D图形转换为**轮廓图(contour plot)**,下面用轮廓图来作直观理解。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
轮廓图中,相同颜色的一圈代表同一高度(同一 $J\left(\theta\right)$ 值),最中心的部分,即红点的部分,就是这个损失函数的最小值,对应的 $h_\theta\left(x\right)$ 以及对数据的拟合情况就是左图啦,嗯,一看就拟合的很不错,预测应该比较精准啦 |
|
|
|
|
|
|
|
|
右图轮廓图中,相同颜色的一个圈代表同一高度(同一 $J\left(\theta\right)$ 值),最中心的点(红点),是图像中的最低点,也即损失函数的最小值,此时对应 $h_\theta\left(x\right)$ 对数据的拟合情况如左图所示,嗯,一看就拟合的很不错,预测应该比较精准啦。 |
|
|
|
|
|
|
|
|
## 2.5 梯度下降(Gradient Descent) |
|
|
## 2.5 梯度下降(Gradient Descent) |
|
|
|
|
|
|
|
|
由于数据量、特征量会随着数据集的增长而越来越大,即便是借用计算机来生成图像,人工的方法也无法读出 $J\left(\theta\right)$ 的最小值,并且大多数情况无法进行可视化,所以引入**梯度下降(Gradient Descent),让计算机自动找出 $\theta$ 值,最小化损失函数。** |
|
|
|
|
|
|
|
|
在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出 $J\left(\theta\right)$ 的最小值,并且大多数情况无法进行可视化,故引入**梯度下降(Gradient Descent)方法,让计算机自动找出最小化损失函数时对应的 $\theta$ 值。** |
|
|
|
|
|
|
|
|
梯度下降背后的思想是:开始时,我们随机选择一个参数组合$\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)$即起始点,计算损失函数,然后寻找下一个能使得损失函数下降最多的参数组合。不断迭代,直到找到一个**局部最小值(local minimum)**,由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是**全局最小值(global minimum)**,不同的初始参数组合,可能会产生不同的局部最小值。 |
|
|
梯度下降背后的思想是:开始时,我们随机选择一个参数组合$\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)$即起始点,计算损失函数,然后寻找下一个能使得损失函数下降最多的参数组合。不断迭代,直到找到一个**局部最小值(local minimum)**,由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是**全局最小值(global minimum)**,不同的初始参数组合,可能会产生不同的局部最小值。 |
|
|
|
|
|
|
|
@@ -220,14 +218,14 @@ $$ J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\the |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
视频中举了下山的例子,即我们在山顶上的某个位置,为了下山,就不断地看一下周围**下一步往哪走**下山比较快,然后就**迈出那一步**,一直重复,直到我们到达某一块山下的**陆地**。 |
|
|
|
|
|
|
|
|
视频中举了下山的例子,即我们在山顶上的某个位置,为了下山,就不断地看一下周围**下一步往哪走**下山比较快,然后就**迈出那一步**,一直重复,直到我们到达山下的某一处**陆地**。 |
|
|
|
|
|
|
|
|
先给出梯度下降的公式: |
|
|
|
|
|
|
|
|
给出梯度下降的公式: |
|
|
$$ |
|
|
$$ |
|
|
{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) |
|
|
{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) |
|
|
$$ |
|
|
$$ |
|
|
|
|
|
|
|
|
> ${\theta }_{j}$: 第 $j$ 个特征参数 |
|
|
|
|
|
|
|
|
> ${\theta }_{j}$: 第 $j$ 个特征参数 |
|
|
> |
|
|
> |
|
|
> ”:=“: 赋值操作符 |
|
|
> ”:=“: 赋值操作符 |
|
|
> |
|
|
> |
|
@@ -235,7 +233,7 @@ $$ |
|
|
> |
|
|
> |
|
|
> $\frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$: $J\left( \theta_0, \theta_1 \right)$ 的偏导 |
|
|
> $\frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$: $J\left( \theta_0, \theta_1 \right)$ 的偏导 |
|
|
|
|
|
|
|
|
学习速率决定了参数值变化的速率即”**走多少距离**“,而偏导这部分决定了下降的方向即”**下一步往哪里**“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”**陆地**“。 |
|
|
|
|
|
|
|
|
公式中,学习速率决定了参数值变化的速率即”**走多少距离**“,而偏导这部分决定了下降的方向即”**下一步往哪里**“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”**陆地**“。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
@@ -243,15 +241,15 @@ $$ |
|
|
|
|
|
|
|
|
## 2.6 梯度下降直观理解(Gradient Descent Intuition) |
|
|
## 2.6 梯度下降直观理解(Gradient Descent Intuition) |
|
|
|
|
|
|
|
|
该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,注意到这里为了数学定义上的精确性,是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。 |
|
|
|
|
|
|
|
|
该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,注意到这里为了数学定义上的精确性,用的是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
把红点定为初始点,切于初始点的红色直线的斜率,代表 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则 $\theta_1$ 等于 初始值 - 学习速率 * 导数,即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0,所以如果 $\theta$ 值已经在极小值点处时,梯度下降算法将什么也不做)。 |
|
|
|
|
|
|
|
|
把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则根据梯度下降公式 ,${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ 即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0,当然如果 $\theta$ 值开始就在极小值点处时,梯度下降算法将什么也不做)。 |
|
|
|
|
|
|
|
|
> 不熟悉斜率的话,可以理解为斜率的值等于图中三角形的高度除以水平长度,精确地求斜率的方法是求导。 |
|
|
|
|
|
|
|
|
> 不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。 |
|
|
|
|
|
|
|
|
对于学习速率 $\alpha$ ,需要选取一个合适的值才可以收敛。 |
|
|
|
|
|
|
|
|
另外,对于学习速率 $\alpha$ ,需要选取一个合适的值才能使得梯度下降算法运行良好。 |
|
|
|
|
|
|
|
|
- 学习速率过小: |
|
|
- 学习速率过小: |
|
|
|
|
|
|
|
@@ -265,28 +263,28 @@ $$ |
|
|
|
|
|
|
|
|
可能越过最低点,甚至导致无法收敛。 |
|
|
可能越过最低点,甚至导致无法收敛。 |
|
|
|
|
|
|
|
|
学习速率只需选定即可,不需要在运行梯度下降算法的时候进行动态改变,因为由于斜率的变化(越来越接近于0),损失函数的变化幅度会越来越小,直到收敛到局部极小值。 |
|
|
|
|
|
|
|
|
**学习速率只需选定即可**,不需要在运行梯度下降算法的时候进行动态改变,随着斜率越来越接近于0,损失函数的变化幅度会越来越小,直到收敛到局部极小值。 |
|
|
|
|
|
|
|
|
如图,品红色点为初始点,损失函数随着迭代的进行,变化的幅度越来越小。 |
|
|
如图,品红色点为初始点,损失函数随着迭代的进行,变化的幅度越来越小。 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
梯度下降不止可以用于线性回归中的损失函数,还通用于最小化其他的损失函数。 |
|
|
|
|
|
|
|
|
**最后,梯度下降不止可以用于线性回归中的损失函数,还通用于最小化其他的损失函数。** |
|
|
|
|
|
|
|
|
## 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression) |
|
|
## 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression) |
|
|
|
|
|
|
|
|
将线性回归模型和梯度下降算法结合,则可得出单变量线性问题的解。 |
|
|
|
|
|
|
|
|
线性回归模型 |
|
|
|
|
|
|
|
|
- $h_\theta(x)=\theta_0+\theta_1x$ |
|
|
- $h_\theta(x)=\theta_0+\theta_1x$ |
|
|
- $ J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $ |
|
|
- $ J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $ |
|
|
|
|
|
|
|
|
|
|
|
梯度下降算法 |
|
|
- ${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ |
|
|
- ${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ |
|
|
|
|
|
|
|
|
这里将线性回归模型公式直接带入梯度下降公式即可得出公式: |
|
|
|
|
|
|
|
|
直接将线性回归模型公式带入梯度下降公式可得出公式 |
|
|
|
|
|
|
|
|
 |
|
|
 |
|
|
|
|
|
|
|
|
其实上文中提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。 |
|
|
|
|
|
|
|
|
|
|
|
视频中直接给出了 $j = 0, j = 1$ 时求解偏导的计算方法,这里给出推导过程如下: |
|
|
视频中直接给出了 $j = 0, j = 1$ 时求解偏导的计算方法,这里给出推导过程如下: |
|
|
|
|
|
|
|
|
$\frac{\partial}{\partial\theta_j} J(\theta_1, \theta_2)=\frac{\partial}{\partial\theta_j} \left(\frac{1}{2m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}} \right)=$ |
|
|
$\frac{\partial}{\partial\theta_j} J(\theta_1, \theta_2)=\frac{\partial}{\partial\theta_j} \left(\frac{1}{2m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}} \right)=$ |
|
@@ -303,7 +301,11 @@ $\frac{\partial}{\partial\theta_0} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\ |
|
|
|
|
|
|
|
|
$\frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} *x_1^{(i)}$ |
|
|
$\frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} *x_1^{(i)}$ |
|
|
|
|
|
|
|
|
使用循环代码较为冗余,后面会讲到如何使用**向量化(Vectorization)**来简化代码并优化计算,使得梯度下降运行的更快。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。 |
|
|
|
|
|
|
|
|
|
|
|
使用循环求解,代码较为冗余,后面会讲到如何使用**向量化(Vectorization)**来简化代码并优化计算,使梯度下降运行的更快更好。 |
|
|
|
|
|
|
|
|
# 3 Linear Algebra Review |
|
|
# 3 Linear Algebra Review |
|
|
|
|
|
|
|
|