两枚硬币A和B,假定随机抛掷后正面朝上概率分别为例子2 - 图1例子2 - 图2。为了估计这两个硬币朝上的概率,咱们轮流抛硬币A和B,每一轮都连续抛5次,总共5轮:

    硬币 结果 统计
    A 正正反正反 3正-2反
    B 反反正正反 2正-3反
    A 正反反反反 1正-4反
    B 正反反正正 3正-2反
    A 反正正反反 2正-3反

    硬币A被抛了15次,在第一轮、第三轮、第五轮分别出现了3次正、1次正、2次正,所以很容易估计出例子2 - 图3,类似的,例子2 - 图4也很容易计算出来,如下:
    例子2 - 图5
    例子2 - 图6
    但是如果我们不知道抛的硬币是A还是B呢(即硬币种类是隐变量),然后再轮流抛五轮,得到如下结果:

    硬币 结果 统计
    Unknown 正正反正反 3正-2反
    Unknown 反反正正反 2正-3反
    Unknown 正反反反反 1正-4反
    Unknown 正反反正正 3正-2反
    Unknown 反正正反反 2正-3反

    现在我们的目标仍然是估计例子2 - 图7例子2 - 图8,此时需要怎么做呢?

    显然,此时我们多了一个硬币种类的隐变量,设为例子2 - 图9,可以把它认为是一个5维的向量例子2 - 图10,代表每次投掷时所使用的硬币,比如例子2 - 图11,就代表第一轮投掷时使用的硬币是A还是B。

    • 但是,这个变量例子2 - 图12不知道,就无法去估计例子2 - 图13例子2 - 图14,所以,我们必须先估计出例子2 - 图15,然后才能进一步估计例子2 - 图16例子2 - 图17
    • 可要估计例子2 - 图18,我们又得知道例子2 - 图19例子2 - 图20,这样我们才能估计例子2 - 图21,现在我们好像陷入了一个死循环中,如何解决这个问题呢?

    我们可以这样来做

    • 先随机初始化一个例子2 - 图22例子2 - 图23,用它来估计例子2 - 图24
    • 然后基于例子2 - 图25,去估计新的例子2 - 图26例子2 - 图27,如果新的例子2 - 图28例子2 - 图29与我们初始化的例子2 - 图30例子2 - 图31一样或者相差很小,这就说明我们最开始的估计是比较靠谱的。
    • 如果新估计出来的例子2 - 图32例子2 - 图33与我们初始化的值差别很大,就继续更新例子2 - 图34,然后再用例子2 - 图35继续更新例子2 - 图36例子2 - 图37,直至收敛。

    那我们就把刚才的推理部分实践一下。我们不妨这样,先随便给例子2 - 图38例子2 - 图39赋一个值,比如:
    硬币A正面朝上的概率例子2 - 图40
    硬币B正面朝上的概率例子2 - 图41
    然后,我们看看第一轮抛掷最可能是哪个硬币。
    如果是硬币A,得出3正2反的概率为例子2 - 图42
    如果是硬币B,得出3正2反的概率为例子2 - 图43
    然后依次求出其他4轮中的相应概率。做成表格如下(标粗表示其概率更大):

    轮数 若是硬币A 若是硬币B
    1 0.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反 0.03087,3正-2反
    2 0.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反 0.01323,2正-3反
    3 0.08192,即0.2 0.8 0.8 0.8 0.8,1正-4反 0.00567,1正-4反
    4 0.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反 0.03087,3正-2反
    5 0.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反 0.01323,2正-3反

    按照最大似然法则:

    • 第1轮中最有可能的是硬币B,也就意味着例子2 - 图44
    • 第2轮中最有可能的是硬币A,也就意味着例子2 - 图45
    • 第3轮中最有可能的是硬币A,也就意味着例子2 - 图46
    • 第4轮中最有可能的是硬币B,也就意味着例子2 - 图47
    • 第5轮中最有可能的是硬币A,也就意味着例子2 - 图48

    然后我们根据例子2 - 图49的结果,便可以估计新的例子2 - 图50例子2 - 图51了。
    例子2 - 图52
    例子2 - 图53

    现在我们对比一下,我们初始化的例子2 - 图54例子2 - 图55和新估计出的例子2 - 图56例子2 - 图57以及真实的例子2 - 图58例子2 - 图59

    初始化的$P_A$ 估计出的$P_A$ 真实的$P_A$ 初始化的$P_B$ 估计出的$P_B$ 真实的$P_B$
    0.2 0.33 0.4 0.7 0.6 0.5

    通过一次更新迭代,我们估计的例子2 - 图60例子2 - 图61相比于它们的初始值,向真实情况迈进了一步!就这样,不断迭代不断接近真实值,这就是EM算法的奇妙之处。