线性回归_逻辑回归_广义线性模型_斯坦福CS229_学习笔记

前言

之前学习过视频版本的吴恩达老师CS229的机器学习课程,但是觉得并不能理解很好。现在结合讲义,对于之前的内容再次进行梳理,仍然记录下自己的思考。图片来源于网络或者讲义。话不多说,进入正题吧。


Part I Regression and Linear Regression

线性回归

课程内容首先从监督学习开始。在监督学习里,你应该有待训练的特征的集合(训练集)以及标签作为输入,你想得到的这些特征与标签的关系,即h(x) =  y,这里的h也称为假设,判断h(x)与y近似程度的方法就是定义成本函数(cost function),在成本函数的指导下(最小化成本函数),帮助推断映射关系h(x)。监督学习主要应用于两个方面:预测(regression)和分类(classification)。谈到监督学习的预测,那自然而然的第一课便是线性回归。顾名思义,便是以线性函数映射的方式来解决预测问题。从这个最为基本的方法出发,可以便于我们理解监督学习的流程。

线性回归形式如下所示,注意这里设x0 = 1,从而构造常数项:

                                                                           h_{\theta }(x)=\theta _{0} + \theta _{1}x_{1}+ \theta _{2}x_{2}

 由此得到其一般形式:

                                                                h(x)=\sum_{i=0}^{n}\theta _{i}x_{i}=\theta ^{\top }x

接下来定义成本函数,即误差的平方和,前面的0.5是为了求导之后可以抵消常数2:

                                                               J(\theta )=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})^{2}                                 (1)

为什么这样定义呢?从概率的意义出发进行解释,设假设的线性回归和真实情况存在一个随机误差\epsilon^{(i)}\sim N(0,\sigma ^{2}),则

                                                               y^{(i)} = \theta ^{\top }x+\epsilon ^{(i)}

            那么可得到下列公式,注意这里\theta是参数,而不是作为给定的值参与条件概率。

构建极大似然方程,得出

从这里就可以发现,要使概率最大化,即是要最小化(y^{(i)}-\theta ^{\top }x^{(i)})^{2}。这就验证了利用误差平方和最小化来衡量假设与真实情况差异的一个自然的合理性。但是也要明白也存在着其他合理的评判的方法,这只是其中的一种。

也就是说,上述的成本函数定义,是通过分析其最大似然方程得出的一个自然的结论。

梯度下降

那么接下来所要做的便是求解\theta _{i},使得成本函数最小。成本函数越小,说明假设中的参数使假设越接近于真实情况,则该参数的取值越合理。这里刚接触的时候一看,不就是一个多元函数求极小值的问题吗?那对于每个参数\theta _{i}求偏导,令其为0,就可以得到结果了,这也是下面要说的正规方程的思路。

但是现在换个角度,从计算机的角度出发,或许一种初始化、迭代进行逼近真值的思路更为适合求解问题。这种思路便是初始化参数\theta,在每一次迭代中更新\theta的值,迭代直到满足收敛条件。迭代的更新方式也就是常用的梯度下降的方式。参见下图,图片来源于网络。

就上述成本函数而言,理想情况下,要寻找的\theta集合使\frac{\partial J}{\partial \theta }为0。那么先初始化\theta _{i}的值,在每次迭代中求解\frac{\partial J}{\partial \theta }的值,并用此来更新\theta,这样做的话每次迭代都使\frac{\partial J}{\partial \theta }更加接近于0,一直迭代直到满足收敛条件。

首先要明白为什么要选取梯度的方式进行更新。我的理解是,某点的梯度代表着一个函数在该点变化速率最快的方向,选取梯度作为更新的方向也就是选取更新速度最快的方向。理想情况下我们要寻找的点即为梯度为0的点,对于梯度下降而言,不管在某点的梯度的方向是正还是负,只要每次迭代向着梯度相反的方向进行更新(梯度为正,说明函数在该点的变化趋势增加,那么在更新时向其反方向更新,即减去该梯度,就更接近梯度为0的点,梯度为负的情况亦然),在上述成本函数的形式下(因为有且只有一个极小值)那么一定会找到该极小值点,即梯度为0的点。

理解了上一步,不难得到以下迭代流程,这里的\alpha也就是学习率,顾名思义,调整学习率即可以调整学习的快慢:

更新方式:

看看这个偏导数是什么样子 :

迭代:

 由此,即可以求出\theta的值,求出映射关系了。

让我们回头再看看J(\theta )的定义式,发现每一次的迭代我们都把整个样本集遍历了一遍(m个样本集),有时候样本集很大,这样的话计算就会很慢。由此便会引出随机梯度下降(SGD),mini-batch梯度下降,batch梯度下降(选择全部样本)三种方式。实施起来也很简单,差别在于每次迭代的样本选取的个数(分别为:随机选择1个,mini-batch个,选择全部样本)。

但是我觉得在这里也存在着一些思考。首当其冲的便是为什么可以这样做。首先要明白我们之前都做了什么。我们有了一些数据和标签,我们想得到这些数据和标签关系,即想要建立y = h(x)这个映射。但是不知道真实关系是什么,所以打算建立一个线性关系去”拟合”这个关系。这里的关键是用了”拟合”这个词。拟合的程度采用最小平方误差的方式去判断。拟合的基础在于我们采取的样本。若样本不同,显然根据样本得到最优解(这里的最优并不是指真实情况的最优)是不一样(这也是为什么强调样本数量越多越好的原因,因为样本数据量越多,我们逼近于真实情况的可能性也就越高),但是实际上通过不同样本得到的最优解同样对于我们逼近真实情况的最优解是具备指导意义的,我的理解是这些最优解虽然不是真实情况的最优,但是都某种程度上逼近于真实情况的最优,他们都指导计算的过程逼近于最优解。

利用梯度下降的方式进行解的逼近这种思想在计算数学里面应该是很常用的。另一种求解的方式便是直接求解公式(1)的偏导数并令其为0,从而进行\theta的求解。这便是正规方程(The normal equations)的思路。具体的公式推导感觉不必深究,参照讲义直接给出结果。

加权线性回归

在线性回归的基础上,可以进行一些改进。

 这样就得到了局部加权线性回归(locally weighted linear regression),其中权重可这样确定:

注意这里的x表示的是,输入假设中待预测的点。也就是对于每一个待预测的点,都要重新确定权重。这显然是很费时的。 

小结

对于非数学和统计专业的人,没必要过分花时间深究于公式的推导。针对应用而言,机器学习是一种能够用来解决问题的强大的手段。更重要的在于了解其怎么用以及为什么要这么用。

上述是一个监督学习中解决预测问题的一个基本算法--线性回归,相对于其他算法还较为简单,但是看似简洁却包含魅力,我却仍然花费不少的时间进行梳理,因为我认为其对于理解学习的流程很有帮助。

还是从应用的角度的出发,来梳理这个流程。首先有了一组数据集,希望能够从这组数据集中得到一些规律,当有新的数据来时,能够借助这个规律帮助我们进行决策,这就是问题的实际意义。我们不知道这个规律是什么,但是可以通过先验知识来进行大致的判断,然后提出一个假设(线性回归等等),为了判断这个假设是否合理,设置了一个优化函数(最小二乘),你还可以在优化函数上做一些手段来使其更加合理(参数加权),接下来求解优化函数(梯度下降、正规方程),得到参数从而得出我们的假设,以此假设来近似代替规律从而解决问题。只有理解了算法在做什么以及为什么要这么做,才能够得之而用。

寥寥数语不足以概括其中的很多细节,例如如何判断假设和规律(真实情况)是否接近、如何设置优化函数得到推断假设、如何求解优化函数等等,其实从线性回归就可以看出,流程中的每一步都蕴含着数学的意义。此中细节只有建立在数学的基础上才具备合理性与说服力。


 Part II Classification and Logistic Regression

逻辑回归

前面提及了监督学习的预测问题,现在来看看分类问题。

以二元分类为例,假设现在解决一个处理垃圾邮件分类的问题,是垃圾邮件则标签为1(positive),否则为0(negative)。现在利用逻辑回归来解决这个问题,同样构建假设:

                                                                                     h_{\theta }(x)=g(\theta ^{\top }x)=\frac{1}{1+e^{-\theta ^{\top }x}}

其中                                                                                 g(z) = \frac{1}{1+e^{-x}} 

记住g(z)的导数在接下来会有用。

                                                                                      g{}'(z)=g(z)*(1-g(z))

g(z)也称为sigmoid函数。函数形状如下所示,z=0时,g(z)=0.5g(z)\in (0,1)

其实就这问题而言,任何取值范围在0,1内的函数仿佛都能够作为g(z),更深层次的原因,在接下来的广义线性模型里面会涉及到。这里先接着算法往下面走。

梯度上升与牛顿法

同样,从概率的角度出发,假设

上式也可以写作 

以此构建最大似然方程 

注意在这里,与之前线性回归不同,我们使l(\theta )最大化,因此采用梯度上升进行,因此更新的方式为 

这与之前提到线性回归不同。这里直接给出利用随机梯度上升进行更新方式

是不是觉得很线性回归更新形式类似,但是注意这里的h_{\theta }(x)是一个非线性函数sigmoid。不管怎么说,看上去应该有更深层次的原因,否则二者形式不可能如此相似。利用梯度上升法求解参数,便可以利用逻辑回归进行分类了。

除了梯度上升,还有一种求解方式。同样的,不管是寻求极大值的点,还是极小值的点,都是在寻求\theta的值,从而使偏导数为0的点。在当参数的数量不多时(因为需要涉及到n*n矩阵的操作),牛顿法也可以作为求解的一种选择,因为牛顿法收敛得更快,其实我记得要使牛顿法收敛是有许多限制条件的,尤其是初值的选择上。在这里,相当于求解l{}'(\theta )=0的解,因此直接给出套用牛顿法进行迭代的公式:

这里是梯度上升的情况,想想梯度下降的情况,牛顿法的参数更新方式将是什么样呢? 

小结

逻辑回归虽然称为回归,但是解决的是一个二分类问题。当训练好分类器时,可以设定大于0.5为正分类,小于0.5为负分类,以此作为分类的判断条件。关于逻辑回归的数学原理,可参照2011_[John Mount]_The equivalence of logistic regression and maximum entropy models。


Part III 广义线性模型(Generalized Linear Models)

指数分布族(The exponential family)

这一部分作为前面两部分的点睛之笔,值得令人琢磨。

前面介绍的线性回归,由于随机高斯噪声的影响,y服从于高斯分布;而用于分类的逻辑回归里,y服从于伯努利分布。这二者冥冥之中仿佛有某种共性。没错,其实二者都属于指数分布族。

这里引入一个概念,指数分布族(The exponential family)。形如以下定义的都可划入指数分布族的一员:

参照原文,给出每个参数的解释:

(1)η is called the natural parameter (also called the canonical parameter) of the distribution

(2)T(y) is the sufficient statistic (for the distributions we consider, it will often be the case that T(y) = y)

(3)a(η) is the log partition function

具体各个参数是什么意思,也必要去深究。只要明白,当选定T,a,b这三个函数时,就可以确定参数为\eta的概率分布。让我们分别一探究竟。

对于参数为\phi伯努利分布(y取0或1),进行如下改写:

对照指数分布族的形式 ,不难得到:

                                            \eta =log(\frac{\phi }{1-\phi })              即              \phi =\frac{1}{1+e^{-\eta }}

这不正就是逻辑回归里面用到的sigmoid函数吗?对比可再看看其他参数。这里列出其他参数。

 同样对于高斯分布N(\mu ,\sigma ^{2}),我们也可进行改写。因为由前面线性回归可知,\sigma对回归并没有影响。因此为了简单运算,这里假设\sigma^{2}=1,从而进行以下改写:

同样对比,可得到各个参数如下所示:

                                                                                              (2)

二者果然存在着共性。线性回归中对应着的高斯分布和逻辑回归中对应着的伯努利分布都属于着指数分布族,而这将是构建广义线性模型(GLM)的基础。

构建广义线性模型(Construct Generalized Linear Models)

在实际解决问题的过程中,根据先验知识,可能会知道y大概属于什么分布,例如高斯、伯努利、泊松等等,如果其属于指数分布族,我们可以利用该分布构建广义线性模型来解决问题。为了构建广义线性模型,需要基于三点假设:

(1)(y | x; θ) ∼ ExponentialFamily(η)。y服从于参数为\eta的指数分布族。

(2)h(x) = E[y|x]。这里猜测可能是为了保证一致无偏性吧。

(3)\eta =\theta ^{\top }x\eta与输入参数满足线性关系。这条假设也可以看做是"design choice"。毕竟是构建一个广义线性模型,总得有线性吧。

基于这三条假设,根据y服从哪一个分布,就可以构建GLM了,看以下三个例子。

(1)y|x;\theta \sim N(\mu ,\sigma ^{2}),进行如下推算:

第一行由假设(2)得出;第二行由y\sim N(\mu ,\sigma ^{2})得出;第三行由(2)式中,\mu =\eta得出;第四行由假设(3)得出。

由此得到线性回归。

(2)同理,当y服从于伯努利分布时,y|x;\theta \sim Bernoulli(\phi)

由此得到逻辑回归。

一开始疑惑为什么要采用逻辑回归这样看似别扭的方式进行二元分类,在此才深感存在皆合理。 

(3)由逻辑回归扩展一下,看看SoftMax回归是怎么推的。不同的是,在SoftMax回归中,不再是二元分类问题,而是多元分类问题,y可以属于k种不同的类别,因此y服从于多项分布,且拥有参数\phi _{1}\phi _{2}...\phi _{k},k个参数。但是这里注意,为了使每个参数独立(因为\sum_{i=1}^{k}\phi _{i}=1),因此,设\phi _{k}=1-\sum_{i=1}^{k-1}\phi _{i},但是为了写法方便,依然写作\phi _{k}。所以实际上只有k-1个参数。进行如下定义:

定义一个有用的记号函数:

                                                                                   (1\left \{ True \right \}=1,1\left \{ False\right \}=0)

则可以得到 

                                                                                 (T(y))_{i} = 1\left \{ y=i \right \}

因为对于(T(y))_{i}来说,只有第i个位置为1,其余都为0。进一步可以得到 

                                                E[(T(y))_{i}]=p(y=i)=0*\phi _{0}+...+1*\phi _{i}+...+\phi _{k}=\phi _{i}

将多项分布写作指数分布族形式 :

对于的参数如下所示:

 不难得出(具体参照原文):

 由此构建可GLM,得出:

这便是在神经网络中常用的SoftMax函数的数学意义了。

至于如何求解参数\theta,参照逻辑回归中的解法,构建极大似然方程,然后利用梯度上升或牛顿法便可以进行求解。 

小结

看完GLM这一部分,醍醐灌顶,发现过程中的每一步都那么的合理(可能是自己太菜了),感受到了机器学习的魅力,虽然其中深层次的数学原理都不了解,但是不管怎样,只有建立在数学基础之上的手段才令人信服。

猜你喜欢

转载自blog.csdn.net/OliverLee456/article/details/83538818