分享

我们来聊一聊机器学习的核心:参数估计以及贝叶斯模型

 CharlseShan 2016-05-10





首先,机器学习的核心思想是从过去的经验中自动地学习出规则,从而去对新的事件做预测。样本量的增多有助于构建机器学习模型,这是不变的道理。 所以在领域里的应用中,我们首先要做的是想办法搜集更多的样本。当然,我在这里主要讲监督学习,  因为这是整个行业里应用最广泛的技术。



机器学习的应用有很多,这大概是目前比较流行的一些应用例子。包括图像识别,语音识别等,大家可以仔细看一下,我就不一一解释了。其中图像识别和语音识别,自然语言处理的发展变得非常快,大部分功劳是由于深度学习的崛起。

如果说深度学习的发展造就了当今AI热潮也不为过。 后续如果有机会再跟大家仔细分享一下深度学习技术。


这是大家熟悉的AlphaGo与李世石的对战,机器最终胜利。这个很振奋人心,但与此同时,也有不少媒体用这件事情做一些炒作。 机器的胜利真的意味着AI发展到了一定牛的程度? 我觉得在这一类问题上AI战胜人类是必然的,因为围棋这种游戏的空间是确定的,没有什么随机性。机器最难处理的问题就是具有较大随机性的问题。 


其实,我更期待的是Alphago和星际2的较量。 :)  大家可以期待一下,在这里我就不赌谁赢谁输了。





今天的目的很明确,就是要给大家讲两个方面: ML,MAP,贝叶斯估计之间的区别和 怎么才能做到大规模贝叶斯模型的学习。


这个幻灯页涵盖了整个机器学习的过程。首先,为了学习,我们需要定义我们的假设, 大家可以理解为对模型的假设,比如我们假设我们用的模型为线性模型或者非线性模型。
其次,我们需要定义我们的目标函数,也就是定义怎么去衡量学出来的模型的好坏。这部分往往用一个loss function来定义。比如在这里,我们可以选用square loss

接下来就是,怎么对这个目标函数做优化,并能学习出最优的模型,。这部分我们可以称之为optimization其实就是一种优化算法,这种算法可以来对目标函数进行优化,并能得到最优化的解。 所以,机器学习大概分成两个方面:  机器学习 = 模型   优化。

优化方法有很多种比如梯度下降,牛顿法,蒙特卡洛等等。不同的模型可选择不同的优化方法。比如逻辑回归,我们常用随机梯度下降法来解决,神经网络用反向推导来解决,贝叶斯模型则用MCMC这类方法来解决。

还有一个方面就是模型的复杂性。 复杂的模型对数据的fit程度一般会高于简单的模型,但即便这样,学出来的模型对测试集的效果可能还不如简单的模型,而且明显低于训练集上的效果。这种我们成为过拟合(overfiting)现象正则化(regularization)可以用来解决过拟合 MAP估计,这种方式其实在某种意义上就是相当于正则化,贝叶斯当然也会避免过拟合现象。后面会讲到。

当有了模型,也有了算法,我们就可以找到最优解,接下来我们就需要判断这种解是否真的是我们需要的? 这部分就需要一些技术比如交叉验证( cross validation)

到此为止,就是整个机器学习的框架,学习机器学习,必须要对整个流程明确,所以这个slide是有必要去深入理解的。


接下来重点讲一下 ML,MAP和贝叶斯估计之间的关联和区别,是今天的重点。

我们用D来表示样本集,用\theta来表示模型所有的参数, x*就是一个新的样本(当模型学习完之后,我们需要在新的样本上做预测)。

1. ML
(最大似然估计), 就是给定一个模型的参数,然后试着去最大化p(D|\theta), 这就是在参数给定的情况下,看到样本集的概率。 在这里我们假设模型的参数是给定的,然后目标就是要找到这种最优的参数\theta使得p(D|\theta)最大化。

我们平时碰到的逻辑回归问题都是基于最大似然估计得出来的。

2. 
但是ML估计有一个大的问题,就是不会把我们的先验知识考虑进去。相反,MAP这种估计会把 prior belief融入到模型里。 MAPML非常类似,只不过我们去最大化p(\theta|D),概率里的模型参数和D的顺序改变了。但这种小小的改变带来的是完全不一样的模型的表达方式。 

总之,MLMAP估计都属于同一个范畴,我们成为(frequentist) 最后的目的都是一样的: 找到“特定”的最优解。当我们找到最优解之后,我们就可以利用这个最优解做预测。所以预测部分都是一样的。

接下来就是贝叶斯估计,这个跟MLMAP估计有较大不同。在这里,我们的预测是考虑到了所有可能的参数\theta也就是说,所有的参数空间。 ML,MAP估计是要找到某特定的最优解。但相反,贝叶斯估计考虑的是所有的参数,也就是参数的分布。所以,在这里可以看到,当我们对新的样本做预测的时候,我们其实计算的是p(y^|x,D)这里不包含任何的参数,因为在贝叶斯估计里,我们需要考虑所有可能的参数,所以这部分可以被integrated out。

下面,对每一个算法做更详细的介绍。




重新回到ML估计,如刚才提到那样,我们需要去最大化p(D|\theta),这部分优化我们通常可以把导数设置为0的方式去得到。然而,ML估计不会把先验知识考虑进去,而且很容易造成过拟合现象

举个例子,比如对癌症的诊断,一个医生一天可能接到100名患者,但最终被诊断出癌症的患者为5个人,在ML估计下我们得到的癌症的概率为0.05。这显然是不太切合实际的,因为我们根据已有的经验,我们知道这种概率会低很多。然而ML估计并没有把这种知识融入到模型里。



MAP就是用来解决这个问题。它会把我们已知的信息融入到模型训练里。利用贝叶斯规则 p(\theta|D)可以写成如上的形式。

所以最大化 p(\theta|D)等同于最大化 p(D|\theta)p(\theta)。在这里p(\theta)其实就是我们的先验知识。

加上log对我们学习不会产生影响的,因为log就是strictly increasingfunction所以最后,MAP的目标函数就变成了 ML估计加上一个我们的先验。



所以,MLMAP的唯一的区别在于p(\theta)这个term上。我们可以把它理解成先验、也可以理解成损失函数。

其实它起到了正则化的作用。 比如我们在线性模型里,如果我们设定p(\theta)为高斯分布,它等同于加了一个 L2 norm, 如果我们假定p(\theta)为拉普拉斯分布,它就等同于我们在模型里加了L1 norm这部分的学习很重要,希望大家可以做一些课下的功课,我面试也会常常问这类的问题。


最后,就是贝叶斯估计了,如上面所述,为了对一个新的样本做预测,我们以积分的方式去integrate out所有可能的参数(整个参数空间)。

 

再次强调一下: MLMAP只会给出特定的最优解, 然而贝叶斯模型会给出对参数的一个分布,比如对模型的参数\theta, 假定参数空间里有\theta1,\theta2, \theta3,...\thetaN,贝叶斯模型学出来的就是这些参数的重要性(也就是分布),当我们对新的样本做预测的时候,就会让所有的模型一起去预测,但每个模型会有自己的权重(权重就是学出来的分布)

这是贝叶斯模型的核心思想,也有一点random forest(随机森林)的类似思想。
也可以这么理解:把不同的模型都考虑进来,当预测的时候每个模型都会有重要性的权重,
贝叶斯预测里我们讨论的是无穷多这种模型一起来做预测。

讨论完这些,我们就好定义什么是frequentist bayesian 了,接下来看下一个slide



就是一个总结,整个统计学的两大派。当然这两代派都有各自的理论。

要记住的一点就是: frequentist里,我们都是假设模型的参数就是固定的。但在贝叶斯领域里,我们不做这样的假设,而是去学习参数的分布。

用一个简答的例子来再总结一下(因为这部分是重点)。 比如你是班里的班长,你有个问题想知道答案,你可以问班里所有的同学,并且假设班里的每一位同学是整个参数空间里的一个模型参数。 一种方案是,问一个学习最好的同学。 另一种方案是,问所有的同学,然后把答案综合起来,但综合的时候,会按照每个同学的成绩好坏来做个权重。 第一种方案的思想类似于ML,MAP,第二种方案类似于贝叶斯模型。

有个领域叫nonparametricBayesian简单科普一下: 比如用k-means算法,我们需要去假定K的值,但我们并不知道哪个K是最好的,所以我们要不断地尝试一系列的K的值。 nonparametric方法就是我们想让模型从数据里自动的去学习K的值。当然,这种算法的复杂度会很高,所以在实际应用里用的比较少。


接下来问题就来了: 既然贝叶斯模型这么牛,为什么在实际应用里并不普遍? 我觉得最大的原因是在于它的计算复杂度上。

如上所述 我们需要去计算后验概率 p(\theta|D) 但一般情况下,后验概率的计算是不现实的。 看slide话就知道,这里涉及到很复杂的积分,这个积分是在大部分情况下是不可能精确计算到的。所以需要一些近似计算方法。

所以整个贝叶斯领域的核心技术就是要近似地计算 p(\theta|D)。说白了,这里的核心问题就是要近似这个复杂的积分(integral), 那接下来我讲一种技术来去做近似。
这里介绍蒙特卡洛算法,这个也是今天的重点。其实很简单,比如我想计算一个公司所有员工的平均身高,这个时候最简答粗暴的方法就是让行政去一个一个去测量,然后取平均值。但想计算所有中国人的平均身高,怎么做?


这个就不难么简单了,一个一个去测量,显然是不太现实的。一种解决方法就是蒙特卡洛方法,也就是采样。 我们可以随机地采访一些人,然后用他们的身高来去估计全国人民的平均身高。当然,我们采访的人越多,准确率会越高。这是蒙特卡洛的核心思想,就是这么简单。当我们采访完所有人的时候,这个就是exact solution(精确值)了。 所以蒙特卡洛方法随着样本数量的增加,我们的估计也会变得越来越准确,这点很重要。



再举一个例子,比如计算一个圆的面积,而且假设我们不知道PI这个时候也可以用采样的方法来做,我们可以在一个正方形空间里随机的做采样,比如落在红色区域里的点的个数为 n1, 落在白色区域的个数为n2, 这个时候我们就知道红色部分的面积就是 n1/(n1 n2)了。 


那接下来的问题是,怎么近似连续性函数,就是我们刚才提到的积分的计算?

思想都一样,假设我们要计算 f(x)的期望值, 同时我们也有p(x)分布,这个时候我们就可以不断的从p(x)这个分布里做一些采样,比如 x1,x2,...xn, 然后用这些采样的值去算f(x),  所以最后得到的结果就是 (f(x1) f(x2),, f(xn))/ n当然,采样的样本越多,估计也会越准确。 所以对贝叶斯模型, 我们需要计算后验概率分布p(\theta|D),其实就是从这个概率分布中采样。




上面例子中提到的采样都是独立的。也就是每个样本跟其他的样本都是独立的,不影响彼此之间的采样。然而,在现实问题上,有些时候我们想加快有效样本的采样速度。这个问题讨论的就是怎么去优化采样过程,也是机器学习里一个比较大的话题。 

重申一下,用上面提到的采样方式我们可以去近似地估计复杂的积分,也可以估计圆的面积,也可以估计全国人口的平均身高。但这个采样方式是独立的,有些时候,我们希望用更少的样本去更准确的近似某一个目标,所以就出现了sampling这种领域的研究,就是在研究以什么样的方式优化整个采样过程,使得过程更加高效。

这个slide里介绍了MCMC采样方法,全称为Markov chain Monte Carlo方法。在这种采样方式下,每个样本之间都存在着一些联系(并不是独立),从而去优化采样过程。这个slide列了一些常见的方法,如果之前对topic model比较熟悉,那应该也了解gibbs sampling这种方法,这也是非常经典的方法。


这种采样的方式可以解决贝叶斯模型的推理,那为什么贝叶斯模型还是没能普遍用在应用上呢? 

因为这部分技术还不能处理大的数据量。为了得到每一个样本,我们需要iterate整个训练集 如果训练集不大还好,但样本量很大的时候,这就显然不可能了。 

这是为什么采样的方式还未能普遍应用在大数据环境下的原因。 所以现在贝叶斯领域关心的主要问题是:怎么去优化采样方式,让它能在大数据环境下有效学习贝叶斯模型。

遇到这个问题可能大家也会想到一些解决的方法。 如果对逻辑回归模型熟悉,大家应该都了解梯度下降法。


简单回顾一下,我们是怎么去解决逻辑回归模型的,这是LR的模型介绍,很简单,其实就是想让大家重温一下。

解逻辑回归我们常用梯度下降法,具体的梯度下降法,我相信大家应该不会陌生,就是这样的。




就是不断的迭代,每个迭代都需要去更新模型的参数,直到converge. 这是经典的梯度下降法,任何书本上都会看得到。 在这里每一次的更新,我们都用到了整个数据集合。

所以,人们就提出了一种新的算法,叫做随机梯度下降法,或者是batch gradient descent.


只有一个地方的改变,就是每一次不取所有的样本集合了,只需某一个部分,而这个某一个部分的样本集会远远小于整个样本集。

所以这种方式就可以应用在大数据上了,因为每一次的更新不在依赖于N 而是依赖于比N小很多的mm << N

如果一个算法依赖于N,绝对是不能用在大数据环境下的。


所以接下来的问题是,我们能不能把这种思想应用在之前提到的采样中(因为我们之前提过,在MCMC采样过程中都会用到所有的训练数据)。

幸运的是,在上面提到的langevin dynamicMCMC算法中的一种),和stochastic optimizaiton(比如随机梯度下降法)可以结合在一起用。

这样,我们就可以通过少量的训练集去做采样,这个时候采样的效率就不再依赖于N了,而是依赖于m, m是远远小于N

这就是整个的idea, 其实在逻辑上很简单,就是想让大家了解一下这个领域是怎么发展过来的。每一次的发展都是有背后的需求的。

 







这些我就不一一讲了,有兴趣可以看一下



这是今天的总结,重点就是 ML,MAP,贝叶斯思想以及 这些理论是怎么演变过来的。


问答Question

@解答RBM的问题: RBM也涉及到一个积分问题,所以也需要用采样的方式来做。但在RBM我们用到的采样方式略有不同,我们只采样几次(或一次),叫作contrastivedivergence


@
目前的应用: 现在我知道的具体的应用大部分在推荐上。比如我听说微软用了贝叶斯矩阵分解法(Bayesianmatrix factorization), 而且也用到(Bayesianlogit regression) 还有LDA这种模型,当然很多地方都在用。 这些都是贝叶斯模型的范畴,具体的解法都是基于采样或者变分(这个今天我没有提到)

@
针对非平衡数据:  这个不好说,我觉得针对非平衡数据还是需要依赖于像bootstrap这种方法。贝叶斯最大的优点应该还是在于样本比较少的情况下。

@Alphago  
应该算是frequentist把, 用到了deep reinforcement learning算法。 在深度学习里,Bayesian neural network也会有所地位的。

@MCMC 
有一个BURN IN PERIOD 的过程,请问我们是经过了这个过程使分布达到收敛后才进行采样嘛?
是的, 之后采样就可以。 之前的样本就可以丢弃了

问:还有大数据领域是不是还是frequentist普遍,因为大样本在大数定理的影响下,先验概率还是趋近于定值?

@frequenst普遍。 是的, 因为本身贝叶斯模型计算量很大,即使用先进的方法也是很耗计算的,但我还是比较看好这方面的应用。 Frequenstvs Bayesian的应用上,也可以参考 AMA的一些讨论

贝叶斯上好像没有什么特别好的书。 我建议看网上的一些tutorial, 有一个比较经典的入门资料应该是一个Brown universityErik Sudderth教授的博士论文。

请问机器学习方法,特别是bayesian的方法,现金融领域有哪些应用呢,谢谢。


我觉得这方面的应用会比较有前景。 因为金融领域样本量不多,贝叶斯模型会有一席之地。

langevin dynamic stochastic optimizaiton
,请问这个优化方式是否适用于分布式集群嘛?如目前spark上的LDA就是类似的实现嘛?


可以做成分布式的,针对LDA也可以做成分布式。 请看一下 Sungjin Ahn的一篇论文 distributed MCMC,这是我的一位合作者。

@
核函数如何选择  是说先验概率吗?  这些函数的选择基本上是考虑计算的复杂度。贝叶斯领域有个叫做conjugateprior, 这个性质可以让计算变得简单很多。

入门建议:我当时入门的时候就是看LDA模型的,然后看网上video lecture.net上的tutorial视频。


机器学习入门: 可以关注小象机器学习训练营, 我也会在这里讲一些
http://v./s/2fxp1a5k?eqrcode=1&from=singlemessage&isappinstalled=0

平时研究用GPU:  会用到, 我们曾经用一个庞大的集群做了一个实验,就是针对facebook整个网络,这部分work可以参考一下我最新一篇的文章,可以在我的主页上找到。

用户画像: 这块还是用基本的算法吧, 或者最简单的segmentation

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多