最大似然估计

最大似然估计

假设当下我们有一枚硬币,我们想知道这枚硬币抛出去之后正面朝上的概率是多少,于是我们抛了10次硬币做了一个实验。发现其中正面朝上的次数是5次,反面朝上的次数也是5次。所以我们认为硬币每次正面朝上的概率是50%。

从表面看,这个结论非常正确,理所应当。

但我们仔细分析就会发现这是有问题的,问题在于我们做出来的实验结果和实验参数之间不是强耦合的。

也就是说,如果硬币被人做过手脚,他正面朝上的概率是60%,我们抛掷10次,也有可能得到5次正面5次反面的概率。

同理,如果正面朝上的概率是70%,我们也有一定的概率可以得到5次正面5次反面的结果。现在我们得到了这样的结果,怎么能说明就一定是50%朝上的概率导致的呢?

那我们应该怎么办?继续做实验吗?

显然不管我们做多少实验都不能从根本上解决这个问题,既然参数影响的是出现结果的概率,我们还是应该回到这个角度,从概率上下手。

我们知道,抛硬币是一个二项分布的事件,我们假设抛硬币正面朝上的概率是p,那么反面朝上的概率就是1-p。于是我们可以带入二项分布的公式,算出10次抛掷之后,5次是正面的结果在当前p参数下出现的概率是多少。

于是,我们可以得到这样一条曲线:
最大似然估计
也就是正面朝上的概率是0.5的时候,10次抛掷出现5次正面的概率最大(即当p=0.5时,正面出现5次的概率p5(1p)5p^5*(1-p)^5最大)。我们把正面朝上的概率看成是实验当中的参数,我们把似然看成是概率。那么最大似然估计,其实就是指的是使得当前实验结果出现概率最大的参数。

也就是说我们通过实验结果和概率,找出最有可能导致这个结果的原因或者说参数,这个就叫做最大似然估计。

原理理解了,解法也就顺水推舟了。

首先,我们需要用函数将实验结果出现的概率表示出来。这个函数的学名叫做似然函数(likelihood function)

有了函数之后,我们需要对函数进行化简,比如有一些多次进行的实验,需要对似然函数求对数,将累乘计算转化成累加运算等。

最后,我们对化简完的似然函数进行求导,令导数为0,找出极值点处参数的值,就是我们最大似然估计方法找到的最佳参数。

引入隐变量

以上只是最大似然估计的基础用法,如果我们把问题稍微变化一下,引入多一个变量,会发生什么情况呢?

我们来看一个经典的例子,同样是抛硬币,但是我们将题目的条件稍微修改一下,那么整个问题就会完全不同。

这个例子来源自EM算法的经典论文:《Do, C. B., & Batzoglou, S. (2008). What is the expectation maximization algorithm?. Nature biotechnology, 26(8), 897.》

在这个例子当中,我们有A和B两枚硬币,其中A硬币正面朝上的概率是0.5,B硬币正面朝上的概率是0.4,我们随机从两枚硬币当中选取一枚进行实验。

每次实验我们一共进行5次,记录下正反面的个数。经过5轮实验之后,我们得到的结果如下:
最大似然估计
由于我们知道每一轮当中选择了什么硬币进行实验,所以整个过程依然非常顺利。如果我们去掉硬币的信息,假设我们并不知道每一轮当中选择了什么硬币进行实验,我们又该怎么求A和B向上的概率呢?
最大似然估计
在新的实验当中,我们不知道硬币选择的情况,也就是说实验当中隐藏了一个我们无法得知的变量。

这种变量称为隐变量,隐变量的存在干扰了参数和实验结果的直接联系。

比如在这个问题当中,我们想要知道每种硬币正面朝上的概率,我们要计算这个概率首先要知道每一轮用了哪一种硬币。如果我们想要推算每一次实验用了哪一种硬币又需要先知道硬币正面朝上的概率。也就是说这两个变量互相纠缠、互相依赖,我们已知的信息太少,无法直接解开。就好像先有鸡还是先有蛋的问题,陷入死循环。

EM算法正是为了解决这个问题而生的。