社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习中的MLE、MAP和贝叶斯估计

李文哲 • 5 年前 • 457 次点击  
阅读 6

机器学习中的MLE、MAP和贝叶斯估计

即使学过机器学习的人,对机器学习中的MLE(极大似然估计)、MAP(最大后验估计)以及贝叶斯估计(Bayesian)仍有可能一知半解。对于一个基础模型,通常都可以从这三个角度去建模,比如对于逻辑回归(Logistics Regression)来说:


MLE: Logistics Regression

MAP: Regularized Logistics Regression

Bayesian: Bayesian Logistic Regression


本文结合实际例子,以通俗易懂的方式去讲解这三者之间的本质区别,希望帮助读者扫清理解中的障碍。


先导知识点: 假设空间(Hypothesis Space)

什么叫假设空间呢?我们可以这样理解。机器学习包含很多种算法,比如线性回归、支持向量机、神经网络、决策树、GDBT等等。我们在建模的时候,第一步就是要选择一个特定的算法比如“支持向量机”。一旦选择了一个算法,就相当于我们选择了一个假设空间。在一个假设空间里,我们通常会有无数种不同的解(或者可以理解成模型),一个优化算法(比如梯度下降法)做的事情就是从中选择最好的一个解或者多个解/模型,当然优化过程要依赖于样本数据。举个例子,如果我们选择用支持向量机,那相当于我们可选的解/模型集中在上半部分(蓝色点)。

一个具体“toy”问题


“ 张三遇到了一个数学难题,想寻求别人帮助。通过一番思考之后发现自己的朋友在清华计算机系当老师。于是,他决定找清华计算机系学生帮忙。那张三用什么样的策略去寻求帮助呢?


在这里,“清华计算机系”是一个假设空间。在这个假设空间里,每一位学生可以看做是一个模型(的实例化)。

对于张三来说,他有三种不同的策略可以选择。


第一种策略 : MLE

第一种策略就是从系里选出过往成绩最好的学生,并让他去解答这个难题。比如我们可以选择过去三次考试中成绩最优秀的学生。

一般的学习流程分为“学习过程”和“预测过程”。第一种策略的方案可以用下面的图来表示。在这里,学习过程相当于从所有系的学生中挑选出成绩最好的学生。所以,这里的“学生过往成绩单”就是我们已知的训练数据 D, 选出成绩最好的学生(计算历史平均分数,并选出最高的),这个过程就是MLE。一旦我们找到了成绩最好的学生,就可以进入预测环节。在预测环节中,我们就可以让他回答张三手里的难题 x', 之后就可以得到他给出的解答 y'



第二种策略:MAP


跟第一种策略的不同点在于,第二种策略中我们听取了老师的建议,老师就是张三的朋友。这位老师给出了自己的观点:

“小明和小花的成绩中可能存在一些水分”。

当我们按照成绩的高低给学生排序,假设前两名依次为小明和小花,如果我们不考虑这位老师的评价,则我们肯定把小明作为目标对象。然而,既然老师已经对小明和小花做了一些负面的评价,那这个时候,我们很有可能最后选择的是班级里的第三名,而不是小明或者小花。


我们把第二种策略的过程也用一个图来描述。与上面的图相比,唯一的区别在于这里多出了老师的评价,我们称之为 Prior。 也就是说我们根据学生以往的成绩并结合老师评价,选择了一位我们认为最优秀的学生(可以看成是模型)。之后就可以让他去回答张老师的难题 x',并得到他的解答 y'。整个过程类似于MAP的估计以及预测。




到这里,有些读者可能会有一些疑惑:“

老师的评价(Prior)跟学生过往的成绩(Observation)是怎么结合在一起的?”

。 为了回答这个问题,我们不得不引出一个非常著名的定理,叫做贝叶斯定理,如下图所示。左边的项是MAP需要优化的部分,通过贝叶斯定理这个项可以分解成MLE(第一种策略)和Prior,也就是老师的评价。在这里,分母是常数项(Constant),所以不用考虑。


第三种策略 - Bayesian

最后,我们来介绍第三种策略。这种策略应该很多人也可以想象得到,其实就是让所有人都去参与回答张三的难题,但最后我们通过一些加权平均的方式获得最终的答案。比如有三个学生,而且我们对这三个学生情况没有任何了解。通过提问,第一个学生回答的答案是A,第二个学生回答的答案也是A,但第三个学生回答的是B。在这种情况下,我们基本可以把A作为标准答案。接着再考虑一个稍微复杂的情况,假设我们通过以往他们的表现得知第三个学生曾经多次获得过全国奥赛的金牌,那这个时候该怎么办? 很显然,在这种情况下,我们给予第三个学生的话语权肯定要高于其他两位学生


我们把上面的这种思路应用到张三的问题上,其实相当于我们让所有计算机系的学生参与回答这个问题,之后把他们的答案进行汇总并得出最终的答案。如果我们知道每一位学生的话语权(权重),这个汇总的过程是确定性(deterministic)。 但每一位学生的话语权(权重)怎么得到呢?这就是贝叶斯估计做的事情!


我们用下面的一幅图来讲述贝叶斯估计和预测的整个过程。跟MAP类似,我们已知每一位学生过去三次考试考试成绩(D)以及老师的评价(Prior)。 但跟MAP不同的是,我们这里的目标不再是- “选出最优秀的学生”,而是通过观测数据(D)去获得每一位学生的发言权(权重),而且这些权重全部加起来要等于1, 相当于是一个valid分布(distribution)。


总结起来,在第三种策略之下,给定过去考试成绩(D)和老师的评价(Prior), 我们的目标是估计学生权重的分布,也称之为Posterior Distribution。 那这个分布具体怎么去估计呢? 这部分就是贝叶斯估计做的事情,有很多种方法可以做这件事情,比如MCMC, Variational Method等等,但这并不是本文章的重点,所以不在这里进一步解释,有兴趣的读者可以关注之后关于贝叶斯的专栏文章。从直观的角度思考,因为我们知道每一位学生过往的成绩,所以我们很容易了解到他们的能力水平进而估计出每一位学生的话语权(权重)。


一旦我们获得了这个分布(也就是每一位学生的权重),接下来就可以通过类似于加权平均的方式做预测了,那些权重高的学生话语权自然就越大。

以上是对MLE, MAP以及贝叶斯估计的基本讲解。下面我们试图去回答两个常见的问题。


Q: 随着我们观测到越来越多的数据,MAP估计逐步逼近MLE,这句话怎么理解?

我们接着使用之前MAP(第二种策略)的例子。在这里,我们对原来的问题稍作改变。在之前的例子里我们假设能够得到每一位学生过去三次考试中的成绩。但在这里,我们进一步假定可以获得每一位学生过去100次考试中的成绩。


那这样的修改会带来什么样的变化呢? 如果仔细想一想,其实也很容易想得到。我们设想一下这样的两种场景。假设我们知道某一位学生过去三次的考试成绩比较优异,但老师却告诉我们这位学生能力其实不怎么样,那这时候我们很可能就去相信老师了,毕竟仅仅通过三次考试的成绩很难对一个学生有全面的了解。但相反,假设我们了解到这位学生在过去100次考试中全部获得了班里第一名,但同时老师又告诉我们这位学生的能力其实不怎么样,那这时候我们会有什么样的反应? 两三次考试或许可以算做是运气,但连续100次都是第一名这件事情很难再跟运气画等号吧? 我们甚至可能会去怀疑老师的品德,是不是故意污蔑人家?


这就是说,当我们观测到的数据越来越多的时候,我们从数据中获取的信息的置信度是越高的,相反老师提供的反馈(Prior)的重要性就会逐渐降低。理想情况下,当我们拥有无穷多的数据样本时,MAP会逼近MLE估计,道理都是一样的。

Q: 为什么贝叶斯估计会比MLE, MAP难?

回顾一下,MLE 和MAP都是在寻找一个最优秀的学生。贝叶斯估计则是在估计每一位学生的权重。第一种情况下,为了寻找最优秀的学生,我们只需知道学生之间的“相对”优秀程度。这个怎么理解呢? 比如一个班里有三个学生A,B,C,我们知道学生A比B优秀,同时知道B比C优秀,那这时候就可以推断出学生A是最优秀的,我们并不需要明确知道A的成绩是多少,B的成绩是多少.....


但在贝叶斯估计模式下,我们必须要知道每一个学生的绝对权重,因为最后我们获得的答案是所有学生给出的答案的加权平均,而且所有学生的权重加起来要保证等于1(任何一个分布的积分和必须要等于1)。 假设我们知道每一位学生的能力值,a1, a2,.... an,这个能作为权重吗? 显然不能。为了获得权重,有一种最简单的方法就是先求和,然后再求权重。比如先计算 a1+...+an = S, 再用a1/S 作为权重。这貌似看起来也不难啊,只不过多做了一个加法操作?


我们很容易看出这个加法操作的时间复杂度是O(n),依赖于总体学生的数量。如果我们的假设空间只有几百名学生,这个是不成问题的。 但实际中,比如我们假设我们的模型用的是支持向量机,然后把假设空间里的每一个可行解比喻成学生,那这个假设空间里有多少个学生呢? 是无数个!!, 也就是说需要对无穷多个数做这种加法操作。 当然,这种加法操作会以积分(integeral)的方式存在,但问题是这种积分通常没有一个closed-form的解,你必须要去近似地估计才可以,这就是MCMC或者Variational方法做的事情,不在这里多做解释。


本文几点重要的Take-aways:


  • 每一个模型定义了一个假设空间,一般假设空间都包含无穷的可行解;

  • MLE不考虑先验(prior),MAP和贝叶斯估计则考虑先验(prior);

  • MLE、MAP是选择相对最好的一个模型(point estimation), 贝叶斯方法则是通过观测数据来估计后验分布(posterior distribution),并通过后验分布做群体决策,所以后者的目标并不是在去选择某一个最好的模型;

  • 当样本个数无穷多的时候,MAP理论上会逼近MLE;

  • 贝叶斯估计复杂度大,通常用MCMC等近似算法来近似;


最后贴一张总结的图:


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30381
 
457 次点击