通俗易懂的EM
最大期望算法(Expectation-maximization algorithm,又译期望最大化算法):
在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。(EM算法只需要有一些训练数据,定义一个最大化函数,剩下的就交给计算机了。经过若干次迭代,我们需要的模型就训练好了)
在统计计算中,最大期望(EM)算法:
是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。最大期望算法经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
理论:
简版:猜(E-step),反思(M-step),重复;
啰嗦版:
你知道一些东西(观察的到的数据), 你不知道一些东西(观察不到的),你很好奇,想知道点那些不了解的东西。怎么办呢,你就根据一些假设(parameter)先猜(E-step),把那些不知道的东西都猜出来,假装你全都知道了; 然后有了这些猜出来的数据,你反思一下,更新一下你的假设(parameter), 让你观察到的数据更加可能(Maximize likelihood; M-stemp); 然后再猜,在反思,最后,你就得到了一个可以解释整个数据的假设了。
1. 注意,你猜的时候,要尽可能的猜遍所有情况,然后求期望(Expected);就是你不能仅仅猜一个个例,而是要猜出来整个宇宙;
2. 为什么要猜,因为反思的时候,知道全部的东西比较好。(就是P(X,Z)要比P(X)好优化一些。Z是hidden states)
3. 最后你得到什么了?你得到了一个可以解释数据的假设,可能有好多假设都能解释数据,可能别的假设更好。不过没关系,有总比没有强,知足吧。(你陷入到local minimum了)
实践:
背景:公司有很多领导=[A总,刘总,C总],同时有很多漂亮的女职员=[小甲,小章,小乙]。(请勿对号入座)你迫切的怀疑这些老总跟这些女职员有问题。为了科学的验证你的猜想,你进行了细致的观察。于是,
观察数据:
1)A总,小甲,小乙一起出门了;
2)刘总,小甲,小章一起出门了;
3)刘总,小章,小乙一起出门了;
4)C总,小乙一起出门了;
收集到了数据,你开始了神秘的EM计算:
初始化,你觉得三个老总一样帅,一样有钱,三个美女一样漂亮,每个人都可能跟每个人有关系。所以,每个老总跟每个女职员“有问题”的概率都是1/3;
这样,(E step)
1) A总跟小甲出去过了 1/2 * 1/3 = 1/6 次,跟小乙也出去了1/6次;(所谓的fractional count)
2)刘总跟小甲,小章也都出去了1/6次
3)刘总跟小乙,小章又出去了1/6次
4)C总跟小乙出去了1/3次
总计,A总跟小甲出去了1/6次,跟小乙也出去了1/6次 ; 刘总跟小甲,小乙出去了1/6次,跟小章出去了1/3次;C总跟小乙出去了1/3次;
你开始跟新你的八卦了(M step),
A总跟小甲,小乙有问题的概率都是1/6 / (1/6 + 1/6) = 1/2;
刘总跟小甲,小乙有问题的概率是1/6 / (1/6+1/6+1/6+1/6) = 1/4; 跟小章有问题的概率是(1/6+1/6)/(1/6 * 4) = 1/2;
C总跟小乙有问题的概率是 1。
然后,你又开始根据最新的概率计算了;(E-step)
1)A总跟小甲出去了 1/2 * 1/2 = 1/4 次,跟小乙也出去 1/4 次;
2)刘总跟小甲出去了1/2 * 1/4 = 1/12 次, 跟小章出去了 1/2 * 1/2 = 1/4 次;
3)刘总跟小乙出去了1/2 * 1/4 = 1/12 次, 跟小章又出去了 1/2 * 1/2 = 1/4 次;
4)C总跟小乙出去了1次;
重新反思你的八卦(M-step):
A总跟小甲,小乙有问题的概率都是1/4/ (1/4 + 1/4) = 1/2;
B总跟小甲,小乙是 1/12 / (1/12 + 1/4 + 1/4 + 1/12) = 1/8 ; 跟小章是 3/4 ;
C总跟小乙的概率是1。
你继续计算,反思,总之,最后,你得到了真相!(马总表示我早就知道真相了)
你知道了这些老总的真相,可以开始学习机器翻译了。