EM算法理解
来源:[知乎:Evan](https://www.zhihu.com/question/27976634/answer/252238739)
1. EM算法产生的原因
EM算法是为了解决《最大似然估计》中更复杂的情形而存在的。 这里“极大似然估计中更复杂的情形”是什么情形呢? 我们知道极大似然估计是求解实现结果的最佳参数\(\theta\),但极大似然估计需要面临的概率分布只有一个或者知道结果是通过哪个概率分布实现的,只不过你不知道这个概率分布的参数。而如果概率分布有多个呢或者你不知道结果是通过哪个概率分布实现的?更别说去确定“这些概率分布”的最佳参数了,我们连最终结果是根据哪个概率分布得出来的都不知道,这就是EM算法要面临的情况了。
2. EM算法
最大似然估计和EM算法都是根据实现结果求解概率分布的最佳参数\(\theta\),但最大似然估计中知道每个结果对应哪个概率分布(我知道哪个概率分布实现了这个结果),而EM算法面临的问题是:我不知道哪个概率分布实现了该结果。怎么在不知道其概率分布的情况下还能求解其问题?
EM算法的求解思想
在说明EM算法的求解思想前,我们先总结下上面的内容。
一般的用\(Y\)表示观测到的随机变量的数据,\(Z\)表示隐随机变量的数据(因为我们观测不到结果是从哪个概率分布中得出的,所以将这个叫做隐变量)。于是\(Y\)和\(Z\)连在一起被称为完全数据,仅\(Y\)一个被称为不完全数据。
这时有没有发现EM算法面临的问题主要就是:有个隐变量数据\(Z\)。而如果\(Z\)已知的话,那问题就可用极大似然估计求解了。 于是乎,怎么把\(Z\)变成已知的?
3. 日常生活的例子
结果:大厨把锅里的菜平均分配到两个碟子里
难题:如果只有一个碟子乘菜那就什么都不用说了,但问题是有2个碟子,而因为根本无法估计一个碟子里应该乘多少菜,所以无法一次性把菜完全平均分配。
解法:大厨先把锅里的菜一股脑倒进两个碟子里,然后看看哪个碟子里的菜多,就把这个碟子中的菜往另一个碟子中匀匀,之后重复多次匀匀的过程,直到两个碟子中菜的量大致一样。 上面的例子中,平均分配这个结果是“观测数据”,为实现平均分配而给每个盘子分配多少菜是“待求参数\(\theta\)”,分配菜的手感就是“概率分布”。于是若只有一个盘子,那概率分布就确定了(“把锅里的菜全部倒到一个盘子”这样的手感是个人都有吧),而因为有两个盘子,所以“给一个盘子到多少菜才好”的手感就有些模糊不定,不过我们可以采用上面的解法来实现最终目标。
理解EM算法最好的方式我觉得就是结合这些类比去理解,然后那些数学公式是怎么来的,这样就可以事半功倍了!请看下面:
EM算法的思想就是:
- 给\(\theta\)自主规定个初值(既然我不知道想实现“两个碟子平均分配锅里的菜”的话每个碟子需要有多少菜,那我就先估计个值);
- 根据给定观测数据和当前的参数\(\theta\),求未观测数据\(Z\)的条件概率分布的期望(在上一步中,已经根据手感将菜倒进了两个碟子,然后这一步根据“两个碟子里都有菜”和“当前两个碟子都有多少菜”来判断自己倒菜的手感);
- 上一步中\(Z\)已经求出来了,于是根据极大似然估计求最优的\(\theta^*\)(手感已经有了,那就根据手感判断下盘子里应该有多少菜,然后把菜匀匀);
- 因为第二步和第三步的结果可能不是最优的,所以重复第二步和第三步,直到收敛(重复多次匀匀的过程,直到两个碟子中菜的量大致一样)。
而上面的第二步被称作E步(求期望),第三步被称作M步(求极大化),于是EM算法就在不停的EM、EM、EM….,所以被叫做EM算法!
EM算法案例
来源:EM算法:一个简单的例子
假设语料库为:
I laugh 我 笑 laugh loudly 大声地 笑
分析
初始状态,词汇互译概率
英语词汇表: {I,laugh,loudly}
中文词汇表: {我,笑,大声地}
初始状态:没有任何关于词汇间如何翻译的信息(也就是说,看不懂中文,更看不懂英文)
P(我|I)=1/3 P(笑|I)=1/3 P(大声地|I)=1/3
P(我|laugh)=1/3 P(笑|laugh)=1/3 P(大声地|laugh)=1/3
P(我|loudly)=1/3 P(笑|loudly)=1/3 P(大声地|loudly)=1/3
根据语料库,进行第一次计算
I laugh 我 笑 laugh loudly 大声地 笑
有2种对齐方式:顺序(I对应我,laugh对应笑),反序(I对应笑,laugh对应我)
P(顺序,我 笑|I laugh)=P(我|I) P(笑|laugh)=1/3×1/3=1/9
P(反序,我 笑|I laugh)=P(笑|I) P(我|laugh)=1/3×1/3=1/9
归一化有:
P(顺序,我 笑|I laugh)=1/2
P(反序,我 笑|I laugh)=1/2
同理,对于第二个句子对
P(顺序, 大声地 笑 | laugh loudly )=1/2
P(反序, 大声地 笑 | laugh loudly )=1/2
貌似到此为止,我们什么都没干,因为对于 I laugh 我 笑
来说,计算机认为顺序,反序对齐都一样,但作为我们人来说,由于对这两门语言有背景知识,可以一下就说,这明显是顺序对齐嘛。同样,对于第二个句子对,也可以马上回答肯定是反序对齐。
重新计算词汇对译概率
P(我|I)=1/2 P(笑|I)=1/2 P(大声地|I)=0
这个概率的得出步骤:考虑 (我 I)这一对,他出现在 (I laugh 我 笑 的)的顺序对齐中,而其概率为1/2(其实称为权重更确切)(笑|I)出现在(I laugh 我 笑 的)的反序对齐中,而其概率为1/2,而(大声地|I)没有出现。
所以,将上述步骤所得概率归一化后,
P(我|I)=1/2 P(笑|I)=1/2 P(大声地|I)=0
P(我|laugh)=1/4 P(笑|laugh)=1/2 P(大声地|laugh)=1/4
P(我|loudly)=0 P(笑|loudly)=1/2 P(大声地|loudly)=1/2
渐渐的,似乎这概率意思着laugh可以被翻译为笑。。。
重新计算各句对顺序反序概率
P(顺序,我 笑|I laugh)=P(我|I) P(笑|laugh)=1/2×1/2=1/4
P(反序,我 笑|I laugh)=P(笑|I) P(我|laugh)=1/2×1/4=1/8
P(顺序, 大声地 笑 | laugh loudly )=P(大声地|loudly) P(笑|laugh)= 1/4×1/2
P(反序, 大声地 笑 | laugh loudly )=P(大声地|laugh) P(笑|loudly)=1/2×1/2
归一后,
P(顺序,我 笑|I laugh)=2/3
P(反序,我 笑|I laugh)=1/3
P(顺序, 大声地 笑 | laugh loudly )=1/3
P(反序, 大声地 笑 | laugh loudly )=2/3
再次重新计算词汇对译概率
P(我|I)=2/3 P(笑|I)=1/3 P(大声地|I)=0
P(我|laugh)=2/3×1/3=2/9 P(笑|laugh)= 2/3×1/3+ 1/3×2/3=4/9 P(大声地|laugh)= 2/3×1/3=2/9
P(我|loudly)=0 P(笑|loudly)=1/3 P(大声地|loudly)=2/3
这个概率的得出步骤:考虑 (我 I)这一对,他出现在 (I laugh 我 笑 的)的顺序对齐中,而其概率为2/3(其实称为权重更确切)(笑|I)出现在(I laugh 我 笑 的)的反序对齐中,而其概率为1/3,而(大声地|I)没有出现。
所以,将上述步骤所得概率归一化后,
P(我|I)=2/3 P(笑|I)=1/3 P(大声地|I)=0
P(我|laugh)=1/4 P(笑|laugh)= 2/4 P(大声地|laugh)= 1/4
P(我|loudly)=0 P(笑|loudly)=1/3 P(大声地|loudly)=2/3
重新计算各句对顺序反序概率
P(顺序,我 笑|I laugh)=P(我|I) P(笑|laugh)=2/3×2/4=1/3
P(反序,我 笑|I laugh)=P(笑|I) P(我|laugh)=1/3×1/4=1/12
P(顺序, 大声地 笑 | laugh loudly )=1/4×1/3=1/12
P(反序, 大声地 笑 | laugh loudly )=2/3×2/4=4/12
归一后,
P(顺序,我 笑|I laugh)=4/5
P(反序,我 笑|I laugh)=1/5
P(顺序, 大声地 笑 | laugh loudly )=1/5
P(反序, 大声地 笑 | laugh loudly )=4/5
渐渐的,似乎这概率意思着laugh可以被翻译为笑。。。
也就是说,现在计算机相信,第一个句子对更倾向于顺序对齐,第二个句子对更倾向于反序对齐,这与我们的直觉相符合。
将此过程反复迭代
最终收敛到什么状态