吴恩达机器学习
本文是在学习吴恩达老师机器学习课程的基础上结合老师的ppt文献然后加上自身理解编写出来的,有些地方可能有遗漏或错误,欢迎大家批评指正。希望我们一起学习,一起进步!
第一个星期
1.欢迎和介绍
1.1机器学习的定义和类型
一个计算机程序被称为从经验E中学习关于某类任务T和性能度量P的经验,如果它在T中的任务(用P度量)的性能随着经验E而提高。其中(把它看做闯关游戏):
- E是多次任务副本的经验
- T是过任务副本本身
- P是玩家过任务副本评级
一般来讲,机器学习分为无监督学习和监督学习,虽然现在也有所谓的半监督学习,但都是在这基础上实现的。
1.2监督学习
我感觉所谓监督学习就是在输入和输出之间找一个合适的映射关系,因为监督学习有明确的正确的输入对应的输出。
监督学习又可以分为回归问题和分类问题
- 回归问题大都是基于连续数值的预测
比如房价的预测,给出不同房子的面积和价格数据,通过机器学习回归拟合,发现面积和价格之间的大致关系。 - 分类问题大都是基于二值或多值的离散类别预测
比如肿瘤类别的预测,给出肿瘤大小和肿瘤类别数据,通过机器学习分类,发现大小和类别之间的大致关系。
1.3无监督学习
我感觉所谓无监督学习就是一个种族划分找相同的过程,不需要数据经验,把有相同特征或特质的种群划分到一起。
无监督学习又可以分为聚类和非聚类问题
- 聚类比如收集1000000个不同的基因,然后找到一种方法,将这些基因自动分组到不同变量(如寿命、地域、社会角色等)相似或相关的组中。
- 非聚类又称“鸡尾酒会算法”,允许你在混乱的环境中找到体系。(例如,在鸡尾酒会上,从一系列声音中辨认出个人的声音和音乐)。
2.模型和代价函数
2.1模型的表示
- 数据集
用 x ( i ) x^{(i)} x(i)表示第i个输入,用 y i y^{i} yi表示第i个输出,那么 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))就成为一个训练数据对象,我们将会有一组这样的训练集用来训练 h : X − > Y h:X->Y h:X−>Y的映射关系。 - 模型
一般我们都用 y = h ( x ) y=h(x) y=h(x)来表示
2.2代价函数
一般而言,我们定义代价函数如下:
J ( θ 0 , θ 1 , ⋅ ⋅ ⋅ , θ n ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(θ_{0},θ_{1},···,θ_{n})= \frac{1}{2m}\sum_{i=1}^{m}(\widehat{y}_{i}-y_{i})^{2}=\frac{1}{2m}\sum_{i=1}^{m}(h_{θ}(x_{i})-y_{i})^{2} J(θ0,θ1,⋅⋅⋅,θn)=2m1∑i=1m(y i−yi)2=2m1∑i=1m(hθ(xi)−yi)2
式子本身的意义就是计算预测值和真实值之间的差距。我们现在的目的就是让
J
(
θ
0
,
θ
1
)
J(θ_{0},θ_{1})
J(θ0,θ1)变得更小。
下面来实战一下,先上图:
这张图片是
θ
0
=
0
,
θ
1
=
1
θ_{0}=0,θ_{1}=1
θ0=0,θ1=1时的情况(
h
θ
(
x
)
=
θ
1
x
+
θ
0
=
x
h_{θ}(x)=θ_{1}x+θ_{0}=x
hθ(x)=θ1x+θ0=x),我们可以看出我们假设的直线恰好穿过了数据集的三个点,此时计算
J
(
θ
1
=
1
)
=
1
2
∗
3
∗
(
0
+
0
+
0
)
=
0
J(θ_{1}=1)=\frac{1}{2*3}*(0+0+0)=0
J(θ1=1)=2∗31∗(0+0+0)=0,也就是说,预测和真实一致,没有误差。
然后再来一张图:
同样的,这里
θ
0
=
0
,
θ
1
=
0.5
,
h
θ
(
x
)
=
0.5
x
θ_{0}=0,θ_{1}=0.5,h_{θ}(x)=0.5x
θ0=0,θ1=0.5,hθ(x)=0.5x,这时,直线落在了散点的下方,也就有了预测值和真实值的误差。代价为
J
(
θ
1
=
0.5
)
=
1
2
∗
3
∗
(
(
0.5
−
1
)
2
+
(
1
−
2
)
2
+
(
1.5
−
3
)
2
)
=
7
12
≈
0.58
J(θ_{1}=0.5)=\frac{1}{2*3}*((0.5-1)^{2}+(1-2)^{2}+(1.5-3)^{2})=\frac{7}{12}≈0.58
J(θ1=0.5)=2∗31∗((0.5−1)2+(1−2)2+(1.5−3)2)=127≈0.58
这样,我们可以通过改变
θ
1
θ_{1}
θ1多找几组
J
(
θ
1
)
J(θ_{1})
J(θ1)的值,绘制出如下的
θ
1
θ_{1}
θ1关于
J
(
θ
1
)
J(θ_{1})
J(θ1)的图像。
通过这里这张图,我们可以明确我们的目标了,就是让 θ 1 θ_{1} θ1值向1进发,代价才会最小化。
2.3代价函数的可视化
代价函数的值是随 θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1的值的变化而变化的,而 θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1又控制着回归线的位置和形状,也就是说,代价函数和回归线之间依靠 θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1而相互连接。一般而言,在只有 θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1两个参数时, J ( θ 0 , θ 1 ) J(θ_{0},θ_{1}) J(θ0,θ1)是一个类似等高图一样的图像。
我们给出一些散点,作为代价可视化来使用,当
θ
0
=
800
,
θ
1
=
−
0.15
θ_{0}=800,θ_{1}=-0.15
θ0=800,θ1=−0.15时,
h
θ
(
x
)
=
−
0.15
x
+
800
h_{θ}(x)=-0.15x+800
hθ(x)=−0.15x+800,对应图像和代价函数标值图如下:
当
θ
0
=
360
,
θ
1
=
0
θ_{0}=360,θ_{1}=0
θ0=360,θ1=0时,
h
θ
(
x
)
=
360
h_{θ}(x)=360
hθ(x)=360,对应图像和代价函数标值图如下:
当
θ
0
=
250
,
θ
1
=
0.12
θ_{0}=250,θ_{1}=0.12
θ0=250,θ1=0.12时,
h
θ
(
x
)
=
0.12
x
+
250
h_{θ}(x)=0.12x+250
hθ(x)=0.12x+250,对应图像和代价函数标值图如下:
通过这三张图片,我们可以看出,当拟合效果越好时,对应代价函数图像的值越靠近等高线中心。
3.参数学习
3.1梯度下降
- 为什么梯度下降?
梯度下降就是为了去寻找代价函数 J ( θ ) J(θ) J(θ)的最小值,从而达到最优拟合效果。 - 梯度下降的方法。
这里梯度下降的方法主要用偏微分的方法,假设我们的代价函数是 J ( θ 0 , θ 1 ) J(θ_{0},θ_{1}) J(θ0,θ1),我们只需要一直重复 θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) θ_{j}:=θ_{j}-α\frac{∂}{ ∂θ_{j}}J(θ_{0},θ_{1}) θj:=θj−α∂θj∂J(θ0,θ1)这个式子,直到代价函数 J ( θ 0 , θ 1 ) J(θ_{0},θ_{1}) J(θ0,θ1)满意为止。( α 是 步 长 , 也 被 称 为 学 习 率 α是步长,也被称为学习率 α是步长,也被称为学习率) - 梯度下降需要注意的一点。
值得注意的是:在进行梯度下降时,要严格按照以下顺序:
就是说, θ 0 , θ 1 θ_{0},θ_{1} θ0,θ1要同时更新,它们在更新时所用的值都是上一轮的未更新的值。
3.2梯度下降的直观解释
接下来,我们来看看梯度下降具体是如何工作的,我们先假设只有一个参数
θ
1
θ_{1}
θ1,当我们的
θ
1
θ_{1}
θ1处于不同的起始点时,它的下降方向可能是不一样的,如下面两张图:
可以看出,当偏导数为正值时,
θ
1
θ_{1}
θ1是减小的,也就是向左移动。当偏导数为负值时,
θ
1
θ_{1}
θ1时增大的,也就是向右移动。
另外一个问题就是步长(学习率)
α
α
α的取值问题,当
α
α
α取值过大或过小时都会影响梯度下降的正常工作。如下图:
可以看出,当
α
α
α过大,在寻找最优的过程中会出现震荡现象。当
α
α
α过小,又会导致消耗大量的计算,时间过长。
另外,梯度下降还有一个特性,就是当接近最小值时,偏微分一般会越来越小,趋近于0,这会导致迭代速率的下降,所以,在梯度下降的过程中,我们一般没有必要减小
α
α
α。
3.3在线性回归中进行梯度下降
note:convex function == bowl shaped function
在线性回归中,在汇集到最优结果之前,我们会一直重复这个过程(还是注意,它们是同步更新的):
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_{\theta}(x_{i})-y_{i})
θ0:=θ0−αm1i=1∑m(hθ(xi)−yi)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
(
h
θ
(
x
i
)
−
y
i
)
x
i
)
\theta_1:=\theta_1-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}\left((h_{\theta}(x_{i})-y_{i})x_{i}\right)
θ1:=θ1−αm1i=1∑m((hθ(xi)−yi)xi)
在公式中,
m
m
m是训练集的数据量,
x
i
,
y
i
x_{i},y_{i}
xi,yi是给定的训练集的具体值,它们是已知的。
具体的偏微分部分推导过程如下:
- (
θ
1
,
.
.
.
,
θ
j
\theta_{1},...,\theta_{j}
θ1,...,θj部分)
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = 2 ⋅ 1 2 ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) x j \frac{∂}{∂\theta_{j}}J(\theta)=\frac{∂}{∂\theta_{j}}\frac{1}{2}(h_{\theta}(x)-y)^{2}\newline\quad\qquad\;\;=2·\frac{1}{2}(h_{\theta}(x)-y)·\frac{∂}{∂\theta_{j}}(h_{\theta}(x)-y)\newline\quad\qquad\;\;=(h_{\theta}(x)-y)·\frac{∂}{∂\theta_{j}}(\sum\limits_{i=0}^{n}\theta_{i}x_{i}-y)\newline\quad\qquad\;\;=(h_{\theta}(x)-y)x_{j} ∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj - (
θ
0
\theta_{0}
θ0部分)
∂ ∂ θ 0 J ( θ ) = ∂ ∂ θ 0 1 2 ( h θ ( x ) − y ) 2 = 2 ⋅ 1 2 ( h θ ( x ) − y ) ⋅ ∂ ∂ θ 0 ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ 0 ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) ⋅ ( 1 − 0 ) = h θ ( x ) − y \frac{∂}{∂\theta_{0}}J(\theta)=\frac{∂}{∂\theta_{0}}\frac{1}{2}(h_{\theta}(x)-y)^{2}\newline\quad\qquad\;\;=2·\frac{1}{2}(h_{\theta}(x)-y)·\frac{∂}{∂\theta_{0}}(h_{\theta}(x)-y)\newline\quad\qquad\;\;=(h_{\theta}(x)-y)·\frac{∂}{∂\theta_{0}}(\sum\limits_{i=0}^{n}\theta_{i}x_{i}-y)\newline\quad\qquad\;\;=(h_{\theta}(x)-y)·(1-0)\newline\quad\qquad\;\;=h_{\theta}(x)-y ∂θ0∂J(θ)=∂θ0∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θ0∂(hθ(x)−y)=(hθ(x)−y)⋅∂θ0∂(i=0∑nθixi−y)=(hθ(x)−y)⋅(1−0)=hθ(x)−y
这里,我们运用的是批梯度下降法,每一步的迭代都要用训练集中的每一组例子。
我们知道,在线性回归中只有全局最优,不存在所谓的局部最优,而且,代价函数所展示出的是一个convex(碗形,凸面的)的形状。我们可以用一张图来展示代价函数的优化行踪。
3.4线性代数复习
这是大学课堂知识,我就不做笔记了。忘记的同学可以看看MOOC。