Browse Source

optimize

master
scruel 8 years ago
parent
commit
e6c5a4b41c
7 changed files with 53 additions and 47 deletions
  1. +3
    -3
      week1.html
  2. +25
    -24
      week1.md
  3. +2
    -2
      week2.html
  4. +16
    -13
      week2.md
  5. +1
    -1
      week3.html
  6. +5
    -3
      week3.md
  7. +1
    -1
      week6.md

+ 3
- 3
week1.html
File diff suppressed because it is too large
View File


+ 25
- 24
week1.md View File

@@ -24,8 +24,7 @@
- 个人定制
- 推荐系统
- 研究大脑

当然,还有更多其他的应用场景,总之,机器学习的出现让很多不可能成为了可能。
- ……

## 1.2 什么是机器学习(What is Machine Learning)
1. 机器学习定义
@@ -33,15 +32,15 @@

- Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.

这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟,编程使得计算机通过不断的对弈,不断地计算布局的好坏来“学习”,从而积累经验,这样,这个计算机程序成为了一个厉害的棋手。
这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟。他编写了一个程序,但没有显式地编程每一步该怎么走,而是让计算机自己和自己对弈,并不断地计算布局的好坏,来判断什么情况下获胜的概率高,从而积累经验,好似学习,最后,这个计算机程序成为了一个比他自己还厉害的棋手。

- Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some **task T** and some **performance measure P**, if its performance on T, as measured by P, improves with **experience E**.

Tom Mitchell 的定义更现代,也有点拗口,视频中介绍了一个例子,即垃圾邮件分类。对于垃圾邮件分类,文中的三个字母分别代表:
Tom Mitchell 的定义更为现代和正式。在过滤垃圾邮件这个例子中,电子邮件系统会根据用户对电子邮件的标记(是/不是垃圾邮件)不断学习,从而提升过滤垃圾邮件的准确率,定义中的三个字母分别代表:

- T(task): 对垃圾邮件分类这个任务。
- P(Performance): 垃圾邮件分类的准确程度
- E(Experience): 用户对于邮件进行是否为垃圾邮件的分类(即帮助机器体验、学习)
- T(Task): 过滤垃圾邮件任务。
- P(Performance): 电子邮件系统过滤垃圾邮件的准确率
- E(Experience): 用户对电子邮件的标记

2. 机器学习算法

@@ -50,18 +49,18 @@
1. 监督学习
2. 无监督学习

两者的区别为**是否需要人工参与数据标注**。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~
两者的区别为**是否需要人工参与数据结果的标注**。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~

还有一些算法也属于机器学习领域,诸如:

- 半监督学习: 介于监督学习于无监督学习之间
- 推荐算法: 没错,就是那些个买完之后还推荐同一款商品的某购物平台
- 推荐算法: 没错,就是那些个买完某商品后还推荐同款的某购物网站所用的算法
- 强化学习: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。
- 迁移学习


## 1.3 监督学习(Supervised Learning)
监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入和对应的结果,建模拟合,最后让计算机预测未知数据的结果。
监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入**和对应的结果**即训练集,建模拟合,最后让计算机预测未知数据的结果。

监督学习一般有两种:

@@ -88,7 +87,7 @@

## 1.4 无监督学习(Unsupervised Learning)

相对于监督学习,训练集不会有人为标注的结果(无反馈),我们不会给出结果或无法得知训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。
相对于监督学习,训练集不会有人为标注的结果(无反馈),我们**不会给出**结果或**无法得知**训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。

无监督学习一般分为两种:
1. 聚类(Clustering)
@@ -121,8 +120,8 @@
另外,在做**原型搭建**的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。

> 注:Octave 与 MATLAB 语法相近,由于 MATLAB 为商业软件,课程中使用开源且免费的 Octave。
机器学习领域发展迅速,也可使用 Tensorflow 等开源机器学习框架学习,这些框架十分友好,易于编写及应用机器学习算法
>
> 机器学习领域发展迅速,现在也可使用 Tensorflow 等开源机器学习框架编写机器学习代码,这些框架十分友好,易于编写及应用。

# 2 单变量线性回归(Linear Regression with One Variable)

@@ -151,7 +150,7 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。

> $x$: 特征/输入变量。

上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。
上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。

单变量,即只有一个特征(如例子中房屋的面积这个特征)。

@@ -175,7 +174,7 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。

$$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y_{i} \right)^2=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(h_\theta(x_{i})-y_{i}\right)^2$$

> 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 $\frac{1}{2}$ 。
> 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 $\frac{1}{2}$ 。

讨论到这里,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。

@@ -248,29 +247,31 @@ $\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; &{{\th

![](image/20180106_101659.png)

这里非常重要的一个点是,在计算时**要批量更新 $\theta$ 值**,否则结果上会有所出入,原因不做细究。
注意,在计算时要**批量更新 $\theta$ 值**,即如上图中的左图所示,否则结果上会有所出入,原因不做细究。

## 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}$ 即可。

![](image/20180106_184926.png)

把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则根据梯度下降公式 ,${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ 即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。
把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $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$ 值开始就在极小值点处时,梯度下降算法将什么也不做($\theta_1 := \theta_1 - \alpha*0$)。
初始 $\theta$ 值(初始点)是任意的,若初始点恰好就在极小值点处,梯度下降算法将什么也不做($\theta_1 := \theta_1 - \alpha*0$)。

> 不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。

另外,对于学习速率 $\alpha$ ,需要选取一个合适的值才能使得梯度下降算法运行良好。

- 学习速率过小:

对于学习速率 $\alpha$,需要选取一个合适的值才能使得梯度下降算法运行良好。

- 学习速率过小图示:

![](image/20180106_190944.png)

收敛的太慢,需要更多次的迭代。

- 学习速率过大:
- 学习速率过大图示

![](image/20180106_191023.png)

@@ -316,9 +317,9 @@ $\frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\



上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。
上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用**所有**的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。

由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J$ 被称为凸二次函数,而线性回归函数求解最小值问题属于**凸函数优化问题**。
由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J$ 被称为凸二次函数,而线性回归函数求解最小值问题属于**凸函数优化问题**。

![](image/24e9420f16fdd758ccb7097788f879e7.png)



+ 2
- 2
week2.html
File diff suppressed because it is too large
View File


+ 16
- 13
week2.md View File

@@ -50,11 +50,14 @@ $\begin{aligned} & \text{repeat until convergence:} \; \lbrace \newline \; & \th

当然,同单变量梯度下降一样,计算时需要**同时更新**所有参数。

同时更新参数的向量化(Vectorization)实现: $\theta = \theta - \alpha \frac{1}{m}(X^T(X\theta-y))$
$h_\theta\left(x\right)= \theta^T x$,则得到同时更新参数的向量化(Vectorization)实现:
$$
\theta = \theta - \alpha \frac{1}{m}(X^T(X\theta-y))
$$

## 4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling)

在应用梯度下降算法实践时,由于各特征值的范围不一,可能会导致损失函数收敛过慢
在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响损失函数收敛速度

以房价预测问题为例,这里选取房屋面积大小和房间数量这两个特征。

@@ -68,7 +71,7 @@ $\begin{aligned} & \text{repeat until convergence:} \; \lbrace \newline \; & \th

除了以上图人工选择并除以一个参数的方式,**均值归一化(Mean normalization)**方法更为便捷,可采用它来对所有特征值统一缩放:

$x_i=\frac{x_i-average(x)}{maximum(x)-minimum(x)}, 使得 $ $x_i \in (-1,1)$$
$x_i=\frac{x_i-average(x)}{maximum(x)-minimum(x)}, 使得 $ $x_i \in (-1,1)$

对于特征的范围,并不一定需要使得 $-1 \leqslant x \leqslant 1$,类似于 $1\leqslant x \leqslant 3$ 等也是可取的,而诸如 $-100 \leqslant x \leqslant 100 $,$-0.00001 \leqslant x \leqslant 0.00001$,就显得过大/过小了。

@@ -120,7 +123,7 @@ $\begin{aligned} & \text{repeat until convergence:} \; \lbrace \newline \; & \th

正规方程法,即令 $\frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0$ ,通过解析函数的方式直接计算得出参数向量的值 $\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y$ ,Octave 中为 `theta = inv(X'*X)*X'*y`。

> ${X}^{-1}$: 矩阵 $X$ 的逆,在 Octave 中,`inv` 函数计算矩阵的逆,类似的还有 `pinv` 函数。
> ${X}^{-1}$: 矩阵 $X$ 的逆,在 Octave 中,`inv` 函数用于计算矩阵的逆,类似的还有 `pinv` 函数。

下表列出了正规方程法与梯度下降算法的对比

@@ -134,34 +137,34 @@ $\begin{aligned} & \text{repeat until convergence:} \; \lbrace \newline \; & \th
[^1]: 一般来说,当 $n$ 超过 10000 时,对于正规方程而言,特征量较大。
[^2]: 梯度下降算法的普适性好,而对于特定的线性回归模型,正规方程是很好的替代品。

**$\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y$ 的推导过程**:
**正规方程法的推导过程**:

$\begin{aligned} & J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}}\newline \; & =\frac{1}{2m}||X\theta-y||^2 \newline \; & =\frac{1}{2m}(X\theta-y)^T(X\theta-y) &\newline \end{aligned}$
$\begin{aligned} & J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}}\newline \; & =\frac{1}{2m}||X\theta-y||^2 \newline \; & =\frac{1}{2m}(X\theta-y)^T(X\theta-y) &\newline \end{aligned}$


展开上式可得

$J(\theta )= \frac{1}{2m}\left( {{\theta }^{T}}{{X}^{T}}X\theta -{{\theta}^{T}}{{X}^{T}}y-{{y}^{T}}X\theta + {{y}^{T}}y \right)$
$J(\theta )= \frac{1}{2m}\left( {{\theta }^{T}}{{X}^{T}}X\theta -{{\theta}^{T}}{{X}^{T}}y-{{y}^{T}}X\theta + {{y}^{T}}y \right)$

注意到 ${{\theta}^{T}}{{X}^{T}}y$ 与 ${{y}^{T}}X\theta$ 都为标量,实际上是等价的,则

$J(\theta) = \frac{1}{2m}[X^TX\theta-2\theta^TX^Ty+y^Ty]$
$J(\theta) = \frac{1}{2m}[X^TX\theta-2\theta^TX^Ty+y^Ty]$



接下来对$J(\theta )$ 求偏导,根据矩阵的求导法则:

$\frac{dX^TAX}{dX}=(A+A^\mathrm{T})X$
$\frac{dX^TAX}{dX}=(A+A^\mathrm{T})X$

$\frac{dX^TA}{dX}={A}$
$\frac{dX^TA}{dX}={A}$



所以有:

$\frac{\partial J\left( \theta \right)}{\partial \theta }=\frac{1}{2m}\left(2{{X}^{T}}X\theta -2{{X}^{T}}y \right)$
$\frac{\partial J\left( \theta \right)}{\partial \theta }=\frac{1}{2m}\left(2{{X}^{T}}X\theta -2{{X}^{T}}y \right)$

​ $={{X}^{T}}X\theta -{{X}^{T}}y$
$={{X}^{T}}X\theta -{{X}^{T}}y$

令$\frac{\partial J\left( \theta \right)}{\partial \theta }=0$, 则有
$$
@@ -193,7 +196,7 @@ $$

这种情况下,如果还想使用正规方程法,在Octave中,可以选用 `pinv` 函数,`pinv` 区别于 `inv`,`pinv` 函数被称为伪逆函数,在矩阵不可逆的时候,使用这个函数仍可正确地计算出 $\theta$ 的值。

# 5 Octave Matlab Tutorial
# 5 Octave/Matlab Tutorial

复习时可直接倍速回顾视频,笔记整理暂留。



+ 1
- 1
week3.html
File diff suppressed because it is too large
View File


+ 5
- 3
week3.md View File

@@ -42,13 +42,13 @@ h_\theta \left( x \right)=g\left(\theta^{T}X \right)
$$
对比线性回归函数 $h_\theta \left( x \right)=\theta^{T}X$,$g$ 表示逻辑函数([logistic function][1]),复合起来,则为线性回归函数。

一个常用的逻辑函数是 S 形函数,叫做 **[sigmoid 函数][2]**(如下图),其公式为 $g\left( z \right)=\frac{1}{1+{{e}^{-z}}}$。
一个常用的逻辑函数是 S 形函数,叫做 [sigmoid 函数][2](如下图),其公式为 $g\left( z \right)=\frac{1}{1+{{e}^{-z}}}$。

![sigmoid function](image/2413fbec8ff9fa1f19aaf78265b8a33b_Logistic_function.png)

应用 sigmoid 函数,则逻辑回归模型:$$h_{\theta}(x)=g(\theta^Tx) =\frac{1}{1+e^{-\theta^Tx}}$$

$h_\theta \left( x \right)$ 的作用是,根据输入 $x$,参数 $\theta$ 计算得出”输出 $y=1$“的可能性(estimated probability),概率学中表示为:
逻辑回归模型中,$h_\theta \left( x \right)$ 的作用是,根据输入 $x$ 以及参数 $\theta$,计算得出”输出 $y=1$“的可能性(estimated probability),概率学中表示为:

$\begin{align*}& h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \newline & P(y = 0 | x;\theta) + P(y = 1 | x ; \theta) = 1\end{align*}$

@@ -59,7 +59,9 @@ $\begin{align*}& h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \ne
[1]: https://en.wikipedia.org/wiki/Logistic_function
[2]: https://en.wikipedia.org/wiki/Sigmoid_function

## 6.3 Decision Boundary
## 6.3 决策边界(Decision Boundary)



## 6.4 Cost Function



+ 1
- 1
week6.md View File

@@ -8,7 +8,7 @@

## 10.3 Model Selection and Train/Validation/Test Sets

##10.4 Diagnosing Bias vs. Variance
## 10.4 Diagnosing Bias vs. Variance

## 10.5 Regularization and Bias/Variance



Loading…
Cancel
Save