理解最大期望算法EM的三层境界(1)

Expectation Maximization(EM)

不要强求不可知,要从已知推未知

在刚开始学习时,我觉得EM算法真的难,反反复复就是看不懂。我一开始找到的学习资料上来就是一大堆算法公式推导。我也是傻乎乎的就对着公式硬怼,最后落得个一知半解的结局。

要了解一个未知的事务,最好从熟悉的角度切入。利用已知条件逐步探索未知,就好像玩mine craft,下矿的时候火把总是从矿坑入口渐渐点亮整个矿坑的吧。一开始就强啃算法推导犹如不插火把深入矿坑内部。没等你深入内部就被怪打死了,当然你装备好(智商高)倒是不一定。

所以我总结了一下我对EM算法理解的三重境界,由浅入深,先感性地了解EM算法在做什么,之后根据需要再逐步深入。这是性价比最高,也是更加容易的入门方式,实际上应该所有算法的理解都可以归为这三重境界:

在这里插入图片描述

第一层:从实例了解算法流程

这一部分中,要是能回答出下面几个问题,就可以算做达到了理解EM算法的第一层境界,复习的时候不必重读文章,只需要回答这几个问题即可。接下来的讲解也是围绕着下面这几个问题展开。

  • Q1 : EM算法是在求什么东西?
  • Q2 : 为什么要用EM算法?
  • Q3 : EM算法怎么用?
    • Q3.1 什么是隐变量?
    • Q3.2 怎么计算隐变量?什么是E-step?
    • Q3.3 计算出隐变量后如何用它来更新参数?什么是M-step?
    • Q3.4 EM算法的整体流程。

这一部分我全程参考了这篇文章(What is the expectation maximization algorithm?),不过我把里面的图重新用中文绘制了,降低了理解门槛,然后又更加细化地讲解了例子。英文好的同学可以直接阅读原文,不过直接看原文理解起来可能会不是那么顺畅。所以本文是一点点拨开它的面纱,读过本文后对在读原文就水到渠成了。

Q1 : EM算法是在求什么东西?

现有2枚硬币A,B。我想知道A,B硬币抛出正面的概率。怎么算?一种方法是:对AB硬币各做一次实验,每次实验抛10次硬币观察结果。

在这里插入图片描述

硬币A:正9反1,估计硬币A抛出正面的概率是0.9。

硬币B:正5反5,估计硬币B抛出正面的概率是0.5。

回到问题Q1EM算法要求的东西其实就是这个概率。这个概率用符号表示为: θ ^ A = 0.9 \hat{\theta}_A=0.9 θ^A=0.9 θ ^ B = 0.5 \hat{\theta}_B=0.5 θ^B=0.5

θ ^ A = 0.9 \hat{\theta}_A=0.9 θ^A=0.9就表示硬币A抛出正面的概率为0.9。( θ ^ \hat{\theta} θ^上面带个小尖帽子表示这是估计出来的值)。

现在先把问题往前在推进一点,我为了尽量使结果更精确又多做了几次实验。结果统计如下。

在这里插入图片描述

算出的结果为:

θ ^ A = 24 24 + 6 = 0.8 θ ^ B = 9 9 + 11 = 0.45 \begin{aligned} \hat{\theta}_A&=\frac{24}{24+6}=0.8 \\ \hat{\theta}_B&=\frac{9}{9+11}=0.45 \\ \end{aligned} θ^Aθ^B=24+624=0.8=9+119=0.45

这里的概率是通过极大似然法(MLE)估计出来的。所以本质上说,最大期望算法(EM)求的东西和MLE是一样的。比如假设高中男生的身高服从正态分布。可以通过MLE算出该正态分布的均值方差,EM算法也可以算。那可能刚入门的你会比较迷惑,那我都能直接用MLE求出这两个概率了,EM算法还有什么用?这个问题我们马上就解答。

Q2 : 为什么要用EM算法?

这个问题的答案是,EM算法是用来解决更难的,只用MLE根本无从下手的问题。

这个变难的问题如下:

在这里插入图片描述

现在你实验做完了,但是写实验报告的时候忘记记录每次实验是用哪个硬币抛的了。但你老师不管,老师还是让你今天必须给他求出 θ ^ A , θ ^ B \hat{\theta}_A,\hat{\theta}_B θ^A,θ^B

这时候就轮到EM算法登场了,EM算法专门解决这类做实验不认真,信息记录不全的问题。

Q3 : EM算法怎么用?

有条件要上,没有条件创造条件也要上!

这里的创造条件,指的是给MLE算法创造条件,因为最终 θ ^ A , θ ^ B \hat{\theta}_A,\hat{\theta}_B θ^A,θ^B还是得通过统计硬币AB抛出的正反面次数,然后把上面那张表格填满来计算。那该怎么创造条件呢?

现在的问题是:不知道每次实验是用哪个硬币抛的

这里需要引入一个新概念:隐变量

Q3.1 那什么是隐变量呢?

用隐变量表示没有记录的隐藏信息。比如本例中的隐变量就是:每次实验是用哪个硬币抛的,用 z z z作为隐变量的符号。 z z z表示每次实验选了哪个硬币。比如 P ( z = B ∣ 实 验 1 ) P(z=B|实验1) P(z=B1)就表示实验1选了硬币B来抛的概率。

之前实验信息是完整记录的,所以在问题Q2中的: P ( z = A ∣ 实 验 1 ) = 0 , P ( z = B ∣ 实 验 1 ) = 1 P(z=A|实验1)=0,P(z=B|实验1)=1 P(z=A1)=0P(z=B1)=1,而现在不能确定实验到底是哪个硬币抛的,这时候就用概率来表示。先不管是怎么得出来的,假设:

P ( z = A ∣ 实 验 1 ) = 0.45 P(z=A|实验1)=0.45 P(z=A1)=0.45,表示实验1有0.45的概率是用硬币A抛的

P ( z = B ∣ 实 验 1 ) = 0.55 P(z=B|实验1)=0.55 P(z=B1)=0.55,表示实验1有0.55的概率是用硬币B抛的。

实验1观察到的结果是:5正5反,表格统计就按照硬币的概率来加权。 0.45 × 5 ≈ 2.2 0.45 \times 5 \approx 2.2 0.45×52.2 0.55 × 5 ≈ 2.8 0.55 \times 5 \approx 2.8 0.55×52.8
有了这个概率,这时候就可以把表格填上了:
在这里插入图片描述
(这里保留1位小数是为了使得我的图完全对应于文章(What is the expectation maximization algorithm?))

Q3.2 如何计算隐变量?什么是E-step?
其实计算隐变量的过程就是所谓的E-step。

好那现在问题又来了:0.450.55是怎么算出来的?

答案是随机初始化一个 θ ^ A ( 0 ) , θ ^ B ( 0 ) \hat{\theta}^{(0)}_A,\hat{\theta}^{(0)}_B θ^A(0),θ^B(0)。即,假设我已经获得了硬币A和B正面朝上的概率。

EM算法是一个不断迭代的过程。

  • θ ^ A ( 0 ) \hat{\theta}^{(0)}_A θ^A(0)表示随机初始化硬币A抛出正面的概率。
  • θ ^ A ( 10 ) \hat{\theta}^{(10)}_A θ^A(10)表示EM算法第10次迭代时硬币A抛出正面的概率。

随着迭代的不断进行, θ ^ A ( i ) \hat{\theta}^{(i)}_A θ^A(i)会越来越接近真实值 θ A \theta_A θA

这里“随机”初始化为: θ ^ A ( 0 ) = 0.6 , θ ^ B ( 0 ) = 0.5 \hat{\theta}^{(0)}_A=0.6,\hat{\theta}^{(0)}_B=0.5 θ^A(0)=0.6,θ^B(0)=0.5,现在来计算 P ( z = A ∣ 实 验 1 ) , P ( z = B ∣ 实 验 1 ) P(z=A|实验1),P(z=B|实验1) P(z=A1),P(z=B1)。即实验1是用硬币A,B抛出来的概率分别是多少。

先算好算的: P ( 实 验 1 ∣ z = A ) P(实验1|z=A) P(1z=A):用硬币A的情况下,抛出实验1的结果的概率。以及 P ( 实 验 1 ∣ z = B ) P(实验1|z=B) P(1z=B)
P ( 实 验 1 ∣ z = A ) = 0. 6 5 ⋅ 0. 4 5 ≈ 0.00079626 P ( 实 验 1 ∣ z = B ) = 0. 5 5 ⋅ 0. 5 5 ≈ 0.00097656 \begin{aligned} P(实验1|z=A)&=0.6^5·0.4^5 \approx 0.00079626\\ P(实验1|z=B)&=0.5^5·0.5^5 \approx 0.00097656 \end{aligned} P(1z=A)P(1z=B)=0.650.450.00079626=0.550.550.00097656
假设每次做实验时选择硬币A,B的概率是相等的。即 P ( z = A ) = P ( z = B ) = 0.5 P(z=A)=P(z=B)=0.5 P(z=A)=P(z=B)=0.5,则根据全概率公式

P ( z = A ∣ 实 验 1 ) = P ( 实 验 1 , z = A ) P ( 实 验 1 ) = P ( z = A ) ⋅ P ( 实 验 1 ∣ z = A ) P ( z = A ) ⋅ P ( 实 验 1 ∣ z = A ) + P ( z = B ) ⋅ P ( 实 验 1 ∣ z = B ) = P ( 实 验 1 ∣ z = A ) P ( 实 验 1 ∣ z = A ) + P ( 实 验 1 ∣ z = B ) ≈ 0.45 P ( z = B ∣ 实 验 1 ) ≈ 0.55 \begin{aligned} P(z=A|实验1)&=\frac{P(实验1,z=A)}{P(实验1)}\\ &=\frac{P(z=A)·P(实验1|z=A)}{P(z=A)·P(实验1|z=A)+P(z=B)·P(实验1|z=B)} \\ &=\frac{P(实验1|z=A)}{P(实验1|z=A)+P(实验1|z=B)} \\ &\approx0.45 \\ P(z=B|实验1)&\approx0.55 \end{aligned} P(z=A1)P(z=B1)=P(1)P(1,z=A)=P(z=A)P(1z=A)+P(z=B)P(1z=B)P(z=A)P(1z=A)=P(1z=A)+P(1z=B)P(1z=A)0.450.55

好吧,文字确实太抽象了,以上描述的是隐变量的计算方法。用以上的方法可以依次计算出实验2,3,4,5的隐变量结果。下面通过这张图来表示EM算法的过程:

在这里插入图片描述

Q3.3 计算出隐变量后如何用它来更新参数?什么是M-step?

计算出隐变量后用它来更新参数的过程就是M-step,计算出隐变量后,接下来的流程就和在Q2中的过程完全一致了,统计出硬币A:21.3正,8.6反,硬币B:11.7正,8.4反。计算得到:
θ ^ A ( 1 ) = 21.3 21.3 + 8.6 = 0.71 θ ^ B ( 1 ) = 11.7 11.7 + 8.4 = 0.58 \begin{aligned} \hat{\theta}^{(1)}_A&=\frac{21.3}{21.3+8.6}=0.71 \\ \hat{\theta}^{(1)}_B&=\frac{11.7}{11.7+8.4}=0.58 \\ \end{aligned} θ^A(1)θ^B(1)=21.3+8.621.3=0.71=11.7+8.411.7=0.58
迭代还没有收敛时,即 θ ^ A ( i ) , θ ^ B ( i ) \hat{\theta}^{(i)}_A, \hat{\theta}^{(i)}_B θ^A(i),θ^B(i)还在发生变化。则更新参数,进行下一次迭代。

可以看出,M-step其实就是用最大似然法(MLE)计算参数的过程

Q3.4 EM算法的整体流程

最后一个问题也是EM算法的流程总结,还是一图胜千言:

在这里插入图片描述

总结

如果看完本文能让大家基本了解下面几个问题,那我真的很开心。我也才学EM算法不久,可能存在理解不到位的情况,若有同学看到了文章写的不妥之处,能在评论提出来我实在感激不尽。

之后我将继续深入EM算法,把第二第三层境界也写出来。
在这里插入图片描述

本文标题的灵感来自于July大神写的支持向量机通俗导论(理解SVM的三层境界),这篇文章真的写得很好,想起过去初学SVM的时候真的感到头皮发麻,读了这篇文章终于使我第一次学懂了SVM。希望我也能多向前人学习,争取写出通俗易懂的优质文章,所以起了这个标题。

最后是问题回顾,方便复习。

问题回顾:

  • Q1 : EM算法是在求什么东西?
  • Q2 : 为什么要用EM算法?
  • Q3 : EM算法怎么用?
    • Q3.1 什么是隐变量?
    • Q3.2 怎么计算隐变量?什么是E-step?
    • Q3.3 计算出隐变量后如何用它来更新参数?什么是M-step?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值