代码改变世界

Machine Learning第二课

2012-10-28 16:14  Aga.J  阅读(905)  评论(0编辑  收藏  举报

本节课的主题

1Linear Regression

2Gradient Descent

3Normal Equation

 

 

l  Linear Regression

 

这节课用一个房价预测的例子来完整的过一遍有监督机器学习中预测模型的数学基础和数学理论支持。

首先先约定公式中的Notation

m 训练集合中的样本个数
x 输入变量或特征
y 输出变量或目标结果
(x,y) 表示一个样本
(clip_image002) 表示第i个样本

  然后我们来看房价预测的例子,假设我们已知房子的大小以及其对应的价格,那么我们可以在二维空间上做出下面的图示。

clip_image004

  问题是给出某个size预测对应的price,对于这个问题,根据上节课学到的知识,我们知道这是一个有监督学习问题,因为每个样本中都有明确的输入和输出,同时它又是一个回归问题,我们需要预测出一个实数,一个price值。确定了问题的一些特征后,我们接下来一个重要的工作便是考虑用什么数学模型或者hypothesis来表示这个问题。

而这个问题,我们如何来表示h?我们发现图中的点似乎都逼近于一条直线(当然更像是一个二次函数),然后我们尝试用最简单的数学模型:线性模型来表示这个h,所以

clip_image006

  如果我们发现还有其他输入如房间个数,那么线性方程则变为clip_image008,我们可以假设clip_image010=1,所以

clip_image012

  那么我们的问题就转化为,根据已有的(x,y)对,代入上式,选择适当的参数clip_image014来使得最终的线性方程有最佳的预测效果

选择或者说是学习参数clip_image016实际上是机器学习中Cost Function的设计过程。在这里,我们可以使用最小二乘法作为cost function(当然可以选用其他的cost function),假设该函数为J(.),那么针对上面例子,cost function

clip_image002[3]

  将每个样本输入x通过h得到的结果与实际结果y做差值的平方,最终我们需要得到的是使得J(.)在所有样本集上误差最小的参数clip_image016,即

clip_image002[5]

  实际上,根据我们的高中的数学知识,我们就可以知道,在上述函数J这个二次函数中(clip_image022,肯定存在最小值,并且就是该方程的极小值。(上一张Angrew Ng的课件图就明白了,注意到这里我们让clip_image024,如果不为一,那么最终的图形是在三维空间里的碗型)

clip_image026clip_image028

  好了,实际上我们不会得到这么完美的图形,因为实际数据不可能完美的与选用的数学模型完全重合或匹配,数据会有偏离或者偏差。

  然后我们考虑如果继续引入新的feature,即新的x如刚才说到的clip_image030,那么也就会带来新的clip_image032的,那如何来求一个多变量的函数的最小值?嗯,没错,就是你大学里所学到的偏导数。Gradient descent(梯度下降)本质上就是求偏导的过程。

 

 

l  Gradient Descent

 

  梯度下降是一个一阶最优化的算法,这个算法是一个不断迭代的过程,每次迭代时都会选择负梯度最大的方向进行下降,使得待优化的目标函数可以快速达到优化收敛最优值,最简单是形式是:

clip_image034

  假设关于clip_image036(只有一个参数的情况下)的代价函数是clip_image038,初始化clip_image036=clip_image040,并且该函数在clip_image042是可微分的,那么函数clip_image038clip_image040点沿着梯度相反方向clip_image044的下降速度最快(这里clip_image046用来控制下降速度的影响)。然后到达新的点即clip_image048,继续迭代执行上述步骤,直到clip_image050收敛到期望的极值(当有多个参数,即存在clip_image052时,每个迭代过程是simultaneous的,不是利用clip_image054的结果来更新clip_image056,而是同时进行更新)。上面的过程可以简单的用下面这幅图来说明梯度下降的过程:

clip_image058clip_image060

  这里假设clip_image038定义在平面上,并且函数图像是一个碗形。蓝色的曲线是等高线(水平集),即函数clip_image038为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数clip_image038值最小的点。

  但是很明显Gradient Descent有一个问题就是初始点的选取,不同的起始下降点会导致不同的最优化下降结果,因为很多时候问题不存在或者没有条件得到一个全局的最优值,而且GD本质上用了贪婪思想,每次迭代都取目前认知的最大梯度方向进行下降,最终我们也只能用局部最优值来近似我们期望的全局最优,所以这也是梯度下降的缺点:容易陷入局部最优和初值敏感。下图为两个不同起始点的下降结果,可以看到第一个点的下降结果比较好。

clip_image062clip_image064

  在这里我们还注意到这里的优化函数在梯度函数clip_image066前还有另一个变量,这个变量就是learning rate,从公式上我们不难推理它实际上是用来控制下降的速度的,也就是说这个梯度下降的结果需要乘上这个rate后才是最终的下降结果,不同的下降速度其实就会影响到下一个点的选择问题(如上图),如果下降速度快了,那么下降的步长也就大了,那么其中一些可能引导到更小值的起始点就被抛弃了,如果下降速度慢了,首先计算开销增大整个迭代过程会变得很慢,同时噪声的影响就被放大,这个learning rate的选择也是机器学习中一个比较需要经验性和依赖数据的选择过程,最终如何判定收敛也是如此。

  而与此同时随着梯度函数的收敛,下降步长即便乘上了learning rate也会逐渐变小,所以我们不需要在算法迭代过程中调整learning rate来找到局部最优值,遇到相反梯度时梯度下降会调整回来(这个可以理解为clip_image066得到负值,按照参数更新公式会转化为正值)。

 

l  Stochostic Gradient Descent

SGD是我在毕业论文里面用到的一种优化方法,要理解SGD首先要知道传统的Gradient Descent是怎样的一个迭代过程。实际上很简单,在每次GD的迭代过程,他都会使用全部训练样本来更新参数,即

clip_image068

  图中梯度结果中的1m的叠加,便是表示m个样本的结果叠加,所以在Gradient Descent中每次迭代都会用上所有样本。

  但是,在实际应用中,样本数可能是上千万,这会严重影响算法的运行时间,所以有了Stochostic Gradient Desecent,简单来说,SGD的思想就是每次update只会受一个随机样本的影响,最后是综合所有样本来得到结果。

  Repreat

 

{

 

  For j = 1 to m

 

{

 

  clip_image070

}

 

}

 

 

 

 

l  其他

n  Machine Learning流程

Machine learning的流程大致如下:

clip_image072

 

在得到训练集后,我们需要先确定图中的h,即从sizeprice的映射函数或者映射模型。

 

n  经验值

在介绍到Gradient Descent时,我提到有两个值需要我们来设定,一个是learning rate即下降速度,一个是收敛值,这些值的设定实际上依赖于个人的经验以及对问题的理解和对数据的了解,所以还是归结到最后还是经验问题,什么样的问题什么样的数据什么样的值。

 

n  推导

从确定拟合函数即模型,到转化问题为参数寻优,到确定cost function,到最后选择优化函数,可以在上面举的房价例子上把整个过程推导出来,也即:

1)房价样本输入有房间大小,输出有房价值

2)确定监督学习,并以线性方程来拟合结果,训练模型预测新输入的回归值

3)线性方程的自变量和因变量都可以从样本获得,剩下的就是参数,所以接下来就是要选择最合适的参数来使得我们的模型拟合数据分布。

4)如何选择合适的参数?实际上是一个cost function的定义过程,我们可以选择各种方式来使得参数作为自变量,并且最终模型预测结果和实际结果的值最小,通常选择最小二乘法。

5)最小二乘法的最优解问题,同样有多种求最优解的办法,选择梯度下降,实际上就是求偏导得极值的问题,应用一些偏导的知识就可以把整个过程推导出来,得到最终的参数更新公式。