详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

本文详细解释了最大似然估计(MLE)和最大后验概率估计(MAP)的概念,通过实例阐述它们在统计学中的应用。最大似然估计用于在已知数据的情况下估计模型参数,而最大后验概率估计则考虑了参数的先验概率。文章介绍了贝叶斯公式,并讨论了两者之间的区别以及在实际应用中的考量因素。

最大似然估计(Maximum likelihood estimation, 简称MLE)和最大后验概率估计(Maximum a posteriori estimation, 简称MAP)是很常用的两种参数估计方法,如果不理解这两种方法的思路,很容易弄混它们。下文将详细说明MLE和MAP的思路与区别。

但别急,我们先从概率和统计的区别讲起。

概率和统计是一个东西吗?

概率(probabilty)和统计(statistics)看似两个相近的概念,其实研究的问题刚好相反。

概率研究的问题是,已知一个模型和参数,怎么去预测这个模型产生的结果的特性(例如均值,方差,协方差等等)。 举个例子,我想研究怎么养猪(模型是猪),我选好了想养的品种、喂养方式、猪棚的设计等等(选择参数),我想知道我养出来的猪大概能有多肥,肉质怎么样(预测结果)。

统计研究的问题则相反。统计是,有一堆数据,要利用这堆数据去预测模型和参数。仍以猪为例。现在我买到了一堆肉,通过观察和判断,我确定这是猪肉(这就确定了模型。在实际研究中,也是通过观察数据推测模型是/像高斯分布的、指数分布的、拉普拉斯分布的等等),然后,可以进一步研究,判定这猪的品种、这是圈养猪还是跑山猪还是网易猪,等等(推测模型参数)。

一句话总结:概率是已知模型和参数,推数据。统计是已知数据,推模型和参数。

显然,本文解释的MLE和MAP都是统计领域的问题。它们都是用来推测参数的方法。为什么会存在着两种不同方法呢? 这需要理解贝叶斯思想。我们来看看贝叶斯公式。

贝叶斯公式到底在说什么?

设A,B是两个事件,且 P ( A ) > 0 P(A)>0 P(A)>0,称
P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\frac{P(AB)}{P(A)} P(BA)=P(A)P(AB)
为在事件A发生的条件下事件B发生的条件概率。

学习机器学习和模式识别的人一定都听过贝叶斯公式(Bayes’ Theorem):

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B )      【 式 2 】 P(A|B)=\frac{P(B|A)P(A)}{P(B)}\space\space\space\space【式2】 P(AB)=P(B)P(BA)P(A)    2

贝叶斯公式看起来很简单,无非是倒了倒条件概率和联合概率的公式。

把B展开,可以写成:

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ∣ A ) P ( A ) + P ( B ∣ ∼ A ) P ( ∼ A )      【 式 2 】 P(A|B)=\frac{P(B|A)P(A)}{P(B|A)P(A)+P(B|∼A)P(∼A)} \space\space\space\space【式2】 P(AB)=P(BA)P(A)+P(BA)P(A)P(BA)P(A)    2

想想这个情况。一辆汽车(或者电瓶车)的警报响了,你通常是什么反应?有小偷?撞车了? 不。。 你通常什么反应都没有。因为汽车警报响一响实在是太正常了!每天都要发生好多次。本来,汽车警报设置的功能是,出现了异常情况,需要人关注。然而,由于虚警实在是太多,人们渐渐不相信警报的功能了。

贝叶斯公式就是在描述,你有多大把握能相信一件证据?(how much you can trust the evidence)

我们假设响警报的目的就是想说汽车被砸了。把 A A A计作“汽车被砸了”, B B B计作“警报响了”,带进贝叶斯公式里看。我们想求等式左边发生 A ∣ B A|B AB的概率,这是在说警报响了,汽车也确实被砸了。汽车被砸引起(trigger)警报响,即 B ∣ A B|A BA。但是,也有可能是汽车被小孩子皮球踢了一下、被行人碰了一下等其他原因(统统计作 ∼ A ∼A A),其他原因引起汽车警报响了,即 B ∣ ∼ A B|∼A BA。那么,现在突然听见警报响了,这时汽车已经被砸了的概率是多少呢(这即是说,警报响这个证据有了,多大把握能相信它确实是在报警说汽车被砸了)?想一想,应当这样来计算。用警报响起、汽车也被砸了这事件的数量,除以响警报事件的数量(这即【式1】)。进一步展开,即警报响起、汽车也被砸了的事件的数量,除以警报响起、汽车被砸了的事件数量加上警报响起、汽车没被砸的事件数量(这即【式2】)。

可能有点绕,请稍稍想一想。

再思考【式2】。想让 P ( A ∣ B ) = 1 P(A|B)=1 P(AB)=1,即警报响了,汽车一定被砸了,该怎么做呢?让 P ( B ∣ ∼ A ) P ( ∼ A ) = 0 P(B|∼A)P(∼A)=0 P(BA)P(A)=0即可。很容易想清楚,假若让 P ( ∼ A ) = 0 P(∼A)=0 P(A)=0,即杜绝了汽车被球踢、被行人碰到等等其他所有情况,那自然,警报响了,只剩下一种可能——汽车被砸了。这即是提高了响警报这个证据的说服力。

从这个角度总结贝叶斯公式:做判断的时候,要考虑所有的因素。 老板骂你,不一定是你把什么工作搞砸了,可能只是他今天出门前和太太吵了一架。

再思考【式2】。观察【式2】右边的分子, P ( B ∣ A ) P(B|A) P(BA)为汽车被砸后响警报的概率。姑且仍为这是1吧。但是,若 P ( A ) P(A) P(A)很小,即汽车被砸的概率本身就很小,则 P ( B ∣ A ) P ( A ) P(B|A)P(A) P(BA)P(A)仍然很小,即【式2】右边分子仍然很小, P ( A ∣ B ) P(A|B) P(AB) 还是大不起来。 这里, P ( A ) P(A) P(A)即是常说的先验概率,如果 A A A的先验概率很小,就算 P ( B ∣ A ) P(B|A) P(BA)较大,可能 A A A的后验概率 P ( A ∣ B ) P(A|B) P(AB)还是不会大(假设 P ( B ∣ ∼ A ) P ( ∼ A ) P(B|∼A)P(∼A) P(BA)P(A)不变的情况下)。

从这个角度思考贝叶斯公式:一个本来就难以发生的事情,就算出现某个证据和他强烈相关,也要谨慎。证据很可能来自别的虽然不是很相关,但发生概率较高的事情。 发现刚才写的代码编译报错,可是我今天状态特别好,这语言我也很熟悉,犯错的概率很低。因此觉得是编译器出错了。 ————别,还是先再检查下自己的代码吧。

在这里,我们常见的贝叶斯公式的形式是这样的:

P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) P ( X ) P(\theta|X)=\frac{P(X|\theta)P(\theta)}{P(X)} P(θX)=P(X)P(Xθ)P(θ)

即:
p o s t e r i o r = l i k e h o o d ∗ p r i o r e v i d e n c e posterior=\frac{likehood*prior}{evidence} posterior=evidencelikehoodprior

其中,posterior:通过样本 X X X得到参数的概率;
likehood:通过参数得到样本 X X X的概率;
prior:参数的先验概率,一般是根据人的先验知识来得出的。比如人们倾向于认为抛硬币实验会符合先验分布:beta分布。当我们选择beta分布的参数时,代表人们认为抛硬币得到正反面的概率都是0.5;
evidence: P ( X ) = ∫ P ( X ∣ θ ) P ( θ ) d θ P(X)=\int{P(X|\theta)P(\theta)d\theta} P(X)=P(Xθ)P(θ)dθ
样本 X X X发生的概率,是各种条件下发生的概率的积分

好了好了,说了这么多,下面言归正传,说一说MLE。

——————不行,还得先说似然函数(likelihood function)

似然函数

似然(likelihood)这个词其实和概率(probability)是差不多的意思,Colins字典这么解释:The likelihood of something happening is how likely it is to happen. 你把likelihood换成probability,这解释也读得通。但是在统计里面,似然函数和概率函数却是两个不同的概念(其实也很相近就是了)。

对于这个函数:

P ( x ∣ θ ) P(x|θ) P(xθ)

输入有两个: x x x表示某一个具体的数据; θ θ θ表示模型的参数。

如果 θ θ θ是已知确定的, x x x是变量,这个函数叫做概率函数(probability function),它描述对于不同的样本点 x x x,其出现概率是多少。

如果 x x x是已知确定的, θ θ θ是变量,这个函数叫做似然函数(likelihood function), 它描述对于不同的模型参数,出现x这个样本点的概率是多少。

这有点像“一菜两吃”的意思。其实这样的形式我们以前也不是没遇到过。例如, f ( x , y ) = x y f(x,y)=x^y f(x,y)=xy, 即 x x x y y y次方。如果 x x x是已知确定的(例如 x = 2 x=2 x=2),这就是 f ( y ) = 2 y f(y)=2^y f(y)=2y, 这是指数函数。 如果 y y y是已知确定的(例如 y = 2 y=2 y=2),这就是 f ( x ) = x 2 f(x)=x^2 f(x)=x2,这是二次函数。同一个数学形式,从不同的变量角度观察,可以有不同的名字。

这么说应该清楚了吧? 如果还没讲清楚,别急,下文会有具体例子。

现在真要先讲讲MLE了。。

最大似然估计(MLE)

通俗理解

假设有一个造币厂生产某种硬币,现在我们拿到了一枚这种硬币,想试试这硬币是不是均匀的。即想知道抛这枚硬币,正反面出现的概率(记为 θ θ θ)各是多少?

这是一个统计问题,回想一下,解决统计问题需要什么? 数据!

于是我们拿这枚硬币抛了10次,得到的数据( x 0 x_0 x0)是:反正正正正反正正正反。我们想求的正面概率 θ θ θ是模型参数,而抛硬币模型我们可以假设是 二项分布。

那么,出现实验结果 x 0 x_0 x0(即反正正正正反正正正反)的似然函数是多少呢?

f ( x 0 , θ ) = ( 1 − θ ) × θ × θ × θ × θ × ( 1 − θ ) × θ × θ × θ × ( 1 − θ ) = θ 7 ( 1 − θ ) 3 = f ( θ ) f(x_0,θ)=(1−θ)×θ×θ×θ×θ×(1−θ)×θ×θ×θ×(1−θ)=θ^7(1−θ)^3=f(θ) f(x0,θ)=(1θ)×θ×θ×θ×θ×(1θ)×θ×θ×θ×(1θ)=θ7(1θ)3=f(θ)

注意,这是个只关于 θ θ θ的函数。而最大似然估计,顾名思义,就是要最大化这个函数。我们可以画出 f ( θ ) f(θ) f(θ)的图像:

可以看出,在 θ = 0.7 θ=0.7 θ=0.7时,似然函数取得最大值。

这样,我们已经完成了对 θ θ θ的最大似然估计。即,抛10次硬币,发现7次硬币正面向上,最大似然估计认为正面向上的概率是0.7。(ummm…这非常直观合理,对吧?)

最大似然估计,就是已知样本,求满足该样本分布,使得在该分布下出现该样本的概率最高。

且慢,一些人可能会说,硬币一般都是均匀的啊! 就算你做实验发现结果是“反正正正正反正正正反”,我也不信θ=0.7。

这里就包含了贝叶斯学派的思想了——要考虑先验概率。 为此,引入了最大后验概率估计。

详细推导

一般情况下,公式如下:
目标是寻求能最大化likehood的值。可以写出目标函数:
P ( X ∣ θ ) = ∏ x 1 x n P ( x i ∣ θ ) P(X|\theta)=\prod_{x_1}^{x_n}{P(x_i|\theta)} P(Xθ)=x1xnP(xiθ)
一般使用对数来进行简化处理:
P ( X ∣ θ ) = ∏ x 1 x n P ( x i ∣ θ ) = ∑ x 1 x n l o g P ( x i ∣ θ ) P(X|\theta)=\prod_{x_1}^{x_n}{P(x_i|\theta)}=\sum_{x_1}^{x_n}{logP(x_i|\theta)} P(Xθ)=x1xnP(xiθ)=x1xnlogP(xiθ)
要最大化 L L L,对 L L L求导数并令导数为0即可求解。

最大后验概率估计(MAP)

通俗理解

最大似然估计是求参数 θ θ θ, 使似然函数 P ( x 0 ∣ θ ) P(x_0|θ) P(x0θ)最大。最大后验概率估计则是想求 θ θ θ使 P ( x 0 ∣ θ ) P ( θ ) P(x_0|θ)P(θ) P(x0θ)P(θ)最大。求得的 θ θ θ不单单让似然函数大, θ θ θ自己出现的先验概率也得大。 (这有点像正则化里加惩罚项的思想,不过正则化里是利用加法,而MAP里是利用乘法)

MAP其实是在最大化 P ( θ ∣ x 0 ) = P ( x 0 ∣ θ ) P ( θ ) P ( x 0 ) P(θ|x_0)=\frac{P(x_0|θ)P(θ)}{P(x_0)} P(θx0)=P(x0)P(x0θ)P(θ),不过因为 x 0 x_0 x0是确定的(即投出的“反正正正正反正正正反”), P ( x 0 ) P(x_0) P(x0)是一个已知值,所以去掉了分母 P ( x 0 ) P(x_0) P(x0)(假设“投10次硬币”是一次实验,实验做了1000次,“反正正正正反正正正反”出现了 n n n次,则 P ( x 0 ) = n / 1000 P(x_0)=n/1000 P(x0)=n/1000。总之,这是一个可以由数据集得到的值)。最大化 P ( θ ∣ x 0 ) P(θ|x_0) P(θx0)的意义也很明确, x 0 x_0 x0已经出现了,要求 θ θ θ取什么值使 P ( θ ∣ x 0 ) P(θ|x_0) P(θx0)最大。顺带一提, P ( θ ∣ x 0 ) P(θ|x_0) P(θx0)即后验概率,这就是“最大后验概率估计”名字的由来。

对于投硬币的例子来看,我们认为(”先验地知道“) θ θ θ取0.5的概率很大,取其他值的概率小一些。我们用一个高斯分布来具体描述我们掌握的这个先验知识,例如假设 P ( θ ) P(θ) P(θ)为均值0.5,方差0.1的高斯函数,如下图:

P ( x 0 ∣ θ ) P ( θ ) P(x_0|θ)P(θ) P(x0θ)P(θ)的函数图像为:

注意,此时函数取最大值时, θ θ θ取值已向左偏移,不再是0.7。实际上,在 θ = 0.558 θ=0.558 θ=0.558时函数取得了最大值。即,用最大后验概率估计,得到 θ = 0.558 θ=0.558 θ=0.558
最后,那要怎样才能说服一个贝叶斯派相信 θ = 0.7 θ=0.7 θ=0.7呢?你得多做点实验。。

如果做了1000次实验,其中700次都是正面向上,这时似然函数为:

如果仍然假设 P ( θ ) P(θ) P(θ)为均值0.5,方差0.1的高斯函数, P ( x 0 ∣ θ ) P ( θ ) P(x_0|θ)P(θ) P(x0θ)P(θ)的函数图像为:

θ = 0.696 θ=0.696 θ=0.696处, P ( x 0 ∣ θ ) P ( θ ) P(x_0|θ)P(θ) P(x0θ)P(θ)取得最大值。

这样,就算一个考虑了先验概率的贝叶斯派,也不得不承认得把 θ θ θ估计在0.7附近了。

PS. 要是遇上了顽固的贝叶斯派,认为 P ( θ = 0.5 ) = 1 P(θ=0.5)=1 P(θ=0.5)=1 ,那就没得玩了。。 无论怎么做实验,使用MAP估计出来都是 θ = 0.5 θ=0.5 θ=0.5。这也说明,一个合理的先验概率假设是很重要的。(通常,先验概率能从数据中直接分析得到)

详细推导

和极大似然估计不同的是,MAP寻求的是能使后验概率 P ( θ ∣ X ) P(\theta|X) P(θX)最大的 θ \theta θ值。
a r g m a x P ( θ ∣ X ) = a r g m a x P ( X ∣ θ ) P ( θ ) P ( X ) = a r g m a x P ( X ∣ θ ) P ( θ ) = a r g m a x ( ∏ x 1 x n P ( x i ∣ θ ) ) P ( θ ) argmaxP(\theta|X)=argmax\frac{P(X|\theta)P(\theta)}{P(X)}=argmax{P(X|\theta)P(\theta)}=argmax(\prod_{x_1}^{x_n}{P(x_i|\theta)})P(\theta) argmaxP(θX)=argmaxP(X)P(Xθ)P(θ)=argmaxP(Xθ)P(θ)=argmax(x1xnP(xiθ))P(θ)

之所以可以省略分母 P ( X ) P(X) P(X),是因为 P ( X ) P(X) P(X) θ \theta θ没有关系。

加上对数处理后,上面公式可以表达为:
a r g m a x ( ∑ x 1 x n l o g P ( x i ∣ θ ) + l o g P ( θ ) ) argmax(\sum_{x_1}^{x_n}{logP(x_i|\theta)}+logP(\theta)) argmax(x1xnlogP(xiθ)+logP(θ))

θ \theta θ的先验分布 P ( θ ) P(\theta) P(θ),我们可以按照实际情况来选择,比如抛硬币实验,我们就可以选择上面说过的beta分布。

至于上面目标函数的求解,也和极大似然估计是一样的,对目标函数求导并令导数为0来求解。

最大似然估计和最大后验概率估计的区别

相信读完上文,MLE和MAP的区别应该是很清楚的了。MAP就是多个作为因子的先验概率 P ( θ ) P(θ) P(θ)。或者,也可以反过来,认为MLE是把先验概率 P ( θ ) P(θ) P(θ)认为等于1,即认为 θ θ θ是均匀分布。

我们可以看到,无论是最大似然估计还是最大后验概率估计,似然函数都发挥着重要作用。但这两种估计,反应了两种观点。最大似然估计是古典统计学派的观点,古典统计学派认为,参数 θ θ θ是固定的,可以通过观测到的数据直接求出来。而最大后验概率估计是贝叶斯学派的观点,贝叶斯学派认为,只有数据是可见的,参数 θ θ θ也是不固定的,而是满足一定概率分布 P ( θ ∣ x 0 ) P(θ|x_0) P(θx0) 的。

这两种模型,孰优孰劣,一直以来都是莫衷一是,未有定论。最大似然估计被人诟病之处是估计存在bias,在某些极端情况下,是违反经验与直觉的,例如样本很少的时候我们的观测结果很可能出现偏差。最大后验概率估计可以有效地减弱这种bias,但是最大后验概率需要引入先验概率分布 P ( θ ) P(θ) P(θ), 所以最大后验概率估计的效果,也取决于先验概率的设定,一个糟糕的先验概率将会导致一个糟糕的后验概率估计。

贝叶斯估计

贝叶斯估计和MAP挺像的,都是以最大化后验概率为目的。区别在于:

1)极大似然估计和MAP都是只返回了的预估值,就完事了
2)MAP在计算后验概率的时候,把分母 P ( X ) P(X) P(X)给忽略了,在进行贝叶斯估计的时候则不能忽略
3)贝叶斯估计要计算整个后验概率的概率分布

还是回到这两个公式:
P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) P ( X ) P(\theta|X)=\frac{P(X|\theta)P(\theta)}{P(X)} P(θX)=P(X)P(Xθ)P(θ)

P ( X ) = ∫ P ( X ∣ θ ) P ( θ ) d θ P(X)=\int{P(X|\theta)P(\theta)d\theta} P(X)=P(Xθ)P(θ)dθ

这里有一个技巧,对于一个特定的likehood,如果我们选择了一个先验概率分布,通过上面两个公式的计算,得出的后验概率和先验概率是同分布的,这时候我们说这个先验分布是共轭先验。

可以举几个例子:

likehood为高斯分布,prior为高斯分布,则posterior也为高斯分布

likehood为伯努利分布(二项式分布),prior为beta分布,则posterior也为beta分布

likehood为多项式分布,prior为Dirichlet分布(beta分布的一个扩展),则posterior也为Dirichlet分布

根据上面的描述,在实践中我们往往会选择共轭先验来简化。在把后验概率推导为和先验概率一样的分布形式的时候,分母 P ( X ) P(X) P(X)其实可以看做一个常数,往往充当了一个normalize,归一化的作用。

求解的时候,既然我们根据先验分布知道了后验是什么分布,那我们求出后验分布的期望值,即是需要估计的参数 θ \theta θ的值:

p = E ( θ ∣ X ) p=E(\theta|X) p=E(θX)

知道了后验是什么分布,那么求这个分布的期望值应该不是什么难事。

贝叶斯估计相对于最大后验估计的好处还在于,贝叶斯估计计算了整个后验概率的分布,从而也能求出其他一些比如分布的方差之类的值来供参考,比如计算出来方差太大的,我们可以认为分布不够好,从而把这个当做选择超参数的一个考虑因素。实际上,贝叶斯估计会比MAP把估计的结果往先验结果“拉”的程度还提高了一些,从而使估计结果更靠近先验结果。

参考

详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解
机器学习:最大似然估计与最大后验概率估计
极大似然估计,最大后验概率估计(MAP),贝叶斯估计


One more thing

更多关于人工智能、Python、C++、计算机等知识,欢迎访问我的个人博客进行交流, 点这里~~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值