本篇参考了白板推导系列以及其他关于EM算法的书籍,尽力做到通俗易懂,第一次学习机器学习算法的时候容易混乱,尤其是在学习完理论之后,具体实践和代码实现都还是很模糊。在查阅了多方资料,和各种大神的博客之后,终于算是弄懂了,在此集百家之长,站在巨人的肩膀上,总结和推导下EM的从始到终,如果不足之处还望多多指正。
在学习一个知识的时候,我认为最关键的是要知道我们为什么学它,它有什么用,这样才能在学习过程中有目的有针对地吸取知识点,同时在掌握之后能运用到实际当中。
回归正题,要知道EM 首先我们得从最大似然开始讲起。
在数理统计中,似然函数是关于一种统计模型中参数的函数,表示模型中参数的似然率(“似然”与“概率”意思相近,都是指某种事件发生的概率)。现在我们知道似然函数的概念了,不就是带参数的函数嘛,那么极大似然就相当于最大化这个可能性意思。
现在举个例子,你和一位猎人去打猎(参数就是你和猎人 θ \theta θ={猎人,你}),一只野兔飞过,只听一声枪响,野兔应声倒下(兔子:我招谁惹谁了),问你,这一枪是猎人打中的还是你打中的。显然你觉得更可能是猎人,因为猎人的命中概率要更高。这就是我们是已知结果反推条件的方式.而似然函数就是以条件概率推测的结果,一般我们设计好一个带参数的模型 P ( x ∣ θ ) P(x|\theta) P(x∣θ),就可以知道其结果P(x=兔子是否会死亡)的概率,而实际上我们不知道参数 θ \theta θ应该是多少,这时候我们就要从后验概率入手,在已知x的情况下(因为样本x是我们可以得到的),来估计我们的 θ \theta θ,我们实际上得到的是 P ( θ ∣ X ) P(\theta|X) P(θ∣X),通过它能对 θ \theta θ有个估计,为了使这个估计可靠,我们必须取得最大可能的那个(就是我们前面例子提到的,在知道兔子死了的情况下,参数是猎人的可能性最大,所以猎人是最佳的参数估计)
。通过贝叶斯公式我们有 P ( θ ∣ X ) = P ( X ∣ θ ) P ( θ ) P ( X ) P(\theta|X)=\frac{P(X|\theta)P(\theta)}{P(X)} P(θ∣X)=P(X)P(X∣θ)P(θ),P(X)是可以观察到的,我们只需要取怎样的 θ ^ \hat{\theta} θ^能使得 P ( X ∣ θ ) 最 大 P(X|\theta)最大 P(X∣θ)最大(逼近现实),也就能得到最可靠的 P ( θ ∣ X ) P(\theta|X) P(θ∣X),现在在已知X的情况下,要你估计参数的值,即通过最大似然函数 L ( P ( X ∣ θ ) ) \mathbb{L}(P(X|\theta)) L(P(X∣θ)),来估计最可能的参数 θ \theta θ。有的地方将 P ( X ∣ θ ) P(X|\theta) P(X∣θ)也写成 P ( x ; θ ) P(x;\theta) P(x;θ)。如果涉及到贝叶斯公式的话,用前者的表达更好。
现在是不是有点晕了? 那我们再举个例子,比如你全校的学生,有男的有女的有中性的,男生女生的身高分别服从两个参数 θ 1 , θ 2 \theta_{1},\theta_{2} θ1,θ2未知的正太分布,你要估计出这个两个参数分别是多少。首先我们不可能全校所有学生的身高去量一下,我们要采用抽样建模的方法,先从男生女生中各抽100人做为样本, X = { x 1 , x 2 , . . , x N } X=\{x_1,x_2,..,x_N\} X={x1,x2,..,xN},其中 x i x_i xi表示抽到的第 i i i个人的身高,N=100,表示抽取个数。
那么男生抽取的这100个样本的联合分布(各自概率乘积),用下列式子表示: L ( θ ) = L ( x 1 , x 2 , . . , x n ) = ∏ i = 1 n p ( x i ; θ ) L(\theta)=L(x_1,x_2,..,x_n)=\prod^{n}_{i=1}p(x_i;\theta) L(θ)=L(x1,x2,..,xn)=i=1∏np(xi;θ)
那么,以上联合概率就是我们抽取的结果,是我们的已知事实,首先我们的模型必须要满足这个已知事实,其次,我们要最大化这个事实,为什么?因为我抽100人就抽到他们,说明这100个人被我抽到的概率是比较大的,从一定程度上就能反应真实样本的分布。当然了,抽样的数量越多就会越接近真正的分布。
当我们选取不同的 θ \theta θ,这个似然函数 L ( θ ) L(\theta) L(θ)就不一样,我们最大化它,就是要找到一个最合适的 θ ^ \hat{\theta} θ^,使得似然函数最大,这个 θ ^ \hat{\theta} θ^就是“最可能”的值,就是 θ \theta θ的最大估计量,记为:
θ ^ = a r g θ m a x l ( θ ) \hat{\theta}= \mathop{arg}\limits _{\theta }\ max\ l(\theta) θ^=θarg max l(θ)
为了方便计算,通常我们对释然函数取对数:
l n L ( θ ) = ∑ i = 1 n l n p ( x i ; θ ) ln\,L(\theta)=\sum^n_{i=1}ln\,p(x_i;\theta) lnL(θ)=i=1∑nlnp(xi;θ)
之后就是我们本科学的微积分知识,对这个函数的参数求导取得极值,如果参数是多元的就求多个偏导,让导数等于0,解这个方程即可。
对女生我们也是用同样的方法就可以求得参数。
现在我们让这个例子,稍微复杂一丢丢,假如这100个男生和100个女生混在了一起,这200个人当中,你不知道每一个样本是男是女。这种情况下你该如何估计你的参数呢?我们只有知道了男生女生的正太分布参数,才能知道这个人是男生还是女生。反过来我们只有知道了每个人是男生还是女生,才能准确估计出他们整体分布的参数。我去!这不是蛋生鸡,鸡生蛋的无限循环吗?这时候我们大名鼎鼎的EM算法就派上用场了!我们把这个样本是男生还是女生,看成是潜在的隐变量 L a t e n t V a r i a b l e Latent\ Variable Latent Variable,这个潜在变量会影响我们的评估,EM算法就是为了解决这种隐变量存在的情况下的“极大似然估计”。(潜在变量可以想象成偷偷隐藏在背后,影响模型估计的一种变量。嗯~ 搜嘎!原来我模型估计的不准,是你小子在背地里偷偷搞鬼,看我不用EM来消灭你!)
EM算法的推导主要有两种角度,本质是一样的,这里我们先从条件概率的角度出发进行推导。
首先上文我们已经说了,最大似然函数其实是最大后验概率,我们的目标就是最大化 l o g P ( x ∣ θ ) logP(x|\theta) logP(x∣θ)来估计我们的参数。为了引入隐变量,我们先做如下恒等变形: l o g P ( x ∣ θ ) = l o g P ( x , z ∣ θ ) − l o g P ( z ∣ θ , x ) logP(x|\theta)=logP(x,z|\theta)-logP(z|\theta,x) logP(x∣θ)=logP(x,z∣θ)−logP(z∣θ,x)
接下来我们用点技巧,在做个恒等变换,引入一个概率函数q(z)。 l o g P ( x ∣ θ ) = l o g P ( x , z ∣ θ ) q ( z ) − l o g P ( z ∣ θ , x ) q ( z ) logP(x|\theta)=log\frac{P(x,z|\theta)}{q(z)}-log\frac{P(z|\theta,x)}{q(z)} logP(x∣θ)=logq(z)P(x,z∣θ)−logq(z)P(z∣θ,x)
现在对等式两边对q(z)积分,即两边求q(z)的期望,左边与q(z)无关,期望就是自己本身。
∫ z q ( z ) l o g P ( X ∣ θ ) d z = ∫ z q ( z ) l o g P ( x , z ∣ θ ) q ( z ) d z − ∫ z l o g P ( z ∣ θ , X ) q ( z ) d z \int_z q(z)logP(X|\theta)dz=\int _zq(z)log\frac{P(x,z|\theta)}{q(z)}dz-\int _zlog\frac{P(z|\theta,X)}{q(z)}dz ∫zq(z)logP(X∣θ)dz=∫zq(z)logq(z)P(x,z∣θ)dz−∫zlogq(z)P(z∣θ,X)dz
l o g P ( x ∣ θ ) = ∫ z q ( z ) l o g P ( x , z ∣ θ ) q ( z ) d z E L B O + ( − ∫ z q ( z ) l o g P ( z ∣ θ , x ) q ( z ) d z ) K L ( q ( z ) ∣ ∣ P ( z ∣ θ , x ) ) logP(x|\theta)=\mathop{\int _zq(z)log\frac{P(x,z|\theta)}{q(z)}dz}\limits _{E\ L\ B\ O}+\mathop{(-\int _zq(z)log\frac{P(z|\theta,x)}{q(z)}dz)}\limits_{KL(q(z)||P(z|\theta,x))} logP(x∣θ)=E L B O∫zq(z)logq(z)P(x,z∣θ)dz+KL(q(z)∣∣P(z∣θ,x))(−∫zq(z)logq(z)P(z∣θ,x)dz)
上式的右边的左半部分,我们通常叫做ELBO e v i d e n c e l o w e r b o u n d evidence\ lower\ bound evidence lower bound,右半部分是KL散度,它是用来衡量两个分布的距离。例如KL(q(z)||p(z))就用来衡量q(z)与p(z)这两个分布的距离,KL散度是永远大于0的,当q(z)与p(z)分布相等时,KL为0.
由此可知,ELBO是它的一个下界,我们有下列不等式:
l o g P ( x ∣ θ ) ≥ E L B O logP(x|\theta)\ge ELBO logP(x∣θ)≥ELBO
那么什么时候取等号成立呢?很明显,当KL为0的时候,即 q ( z ) = p ( z ∣ θ t , x ) q(z)=p(z|\theta^{t},x) q(z)=p(z∣θt,x)时,等号成立,这里的 θ \theta θ是上一时刻的参数估计,初始时刻,我们先随机设定参数值,之后进行迭代来纠正参数(EM算法是E-step,M-step反复迭代的过程)。
现在我们把 q ( z ) = p ( z ∣ θ t − 1 , x ) q(z)=p(z|\theta^{t-1},x) q(z)=p(z∣θt−1,x)带入ELBO中,得到:
l o g P ( x ∣ θ ) = E L B O = ∫ z p ( z ∣ θ t , x ) l o g P ( x , z ∣ θ ) p ( z ∣ θ t , x ) d z logP(x|\theta)=ELBO=\int _zp(z|\theta^{t},x)log\frac{P(x,z|\theta)}{p(z|\theta^{t},x)}dz logP(x∣θ)=ELBO=∫zp(z∣θt,x)logp(z∣θt,x)P(x,z∣θ)dz
我们的目标就变成了最大化ELBO:
θ ^ = a r g m a x θ l o g P ( x ∣ θ ) \hat{\theta}=arg \ \mathop{max}\limits_{\theta}logP(x|\theta) θ^=arg θmaxlogP(x∣θ)
θ ^ = a r g m a x θ E L B O \hat{\theta}=arg \ \mathop{max}\limits_{\theta}ELBO θ^=arg θmaxELBO
θ t + 1 = a r g m a x θ ∫ z p ( z ∣ θ t , x ) l o g P ( x , z ∣ θ ) p ( z ∣ θ t , x ) d z {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log\frac{P(x,z|\theta)}{p(z|\theta^{t},x)}dz θt+1=arg θmax∫zp(z∣θt,x)logp(z∣θt,x)P(x,z∣θ)dz
进一步,我们将上式log拆开,变成:
θ t + 1 = a r g m a x θ ∫ z p ( z ∣ θ t , x ) [ l o g P ( x , z ∣ θ ) − l o g p ( z ∣ θ t , x ) ] d z {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)[log P(x,z|\theta) -log p(z|\theta^{t},x)]dz θt+1=arg θmax∫zp(z∣θt,x)[logP(x,z∣θ)−logp(z∣θt,x)]dz
可以看到 l o g p ( z ∣ θ t , x ) log p(z|\theta^{t},x) logp(z∣θt,x)与 θ \theta θ无关,可以去除,所以最终的表达式为:
θ t + 1 = a r g m a x θ ∫ z p ( z ∣ θ t , x ) l o g P ( x , z ∣ θ ) d z {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log P(x,z|\theta)dz θt+1=arg θmax∫zp(z∣θt,x)logP(x,z∣θ)dz
以上EM推导算是完成了。现在我们来从头梳理下,EM算法的具体步骤。
我先从公式上描述一遍,在用文字描述一遍,加深理解。
①:初始化:设定初始值 θ \theta θ
②:E-step: 计算 ∫ z p ( z ∣ θ t , x ) l o g P ( x , z ∣ θ ) d z \int _zp(z|\theta^{t},x)log P(x,z|\theta)dz ∫zp(z∣θt,x)logP(x,z∣θ)dz 即期望 E z ∣ θ t , x ( P ( x , z ∣ θ ) ) E_{z|\theta^{t},x}(P(x,z|\theta)) Ez∣θt,x(P(x,z∣θ))(带有参数)
③:M-step:最大期望, θ t + 1 = a r g m a x θ E z ∣ θ t , x ( P ( x , z ∣ θ ) ) = a r g m a x θ ∫ z p ( z ∣ θ t , x ) l o g P ( x , z ∣ θ ) d z {\theta}^{t+1}=arg \mathop{max}\limits_{\theta}E_{z|\theta^{t},x}(P(x,z|\theta))=arg \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log P(x,z|\theta)dz θt+1=argθmaxEz∣θt,x(P(x,z∣θ))=argθmax∫zp(z∣θt,x)logP(x,z∣θ)dz
④:重复②,③,将③中得到的 θ t + 1 \theta^{t+1} θt+1带入②中。
文字描述:
①:给定初始值 θ \theta θ(比如上面例子中,100个男生女生混合,我假定x1x2…x30是男生,x31…x100是女生)
②:根据观测的数据,和之前假定的参数 θ \theta θ,来求观测数据z的条件概率分布的期望(在你的上述假设中,计算这种参数情况下的期望)。
③:通过调整 θ \theta θ,最大化期望。(得到新的 θ \theta θ作为新的参数估计继续迭代)
④:重复② ③,直到收敛。
现在我们再来举个简单的例子,来描述EM的计算过程。
假如有A B两枚硬币,你需要计算A 和B 正面朝上的概率是分别是多少。实验总共扔了五轮硬币,每轮扔5次。但是每一轮你不知道扔的是A硬币还是B硬币,显然每轮扔的是A还是B就是潜在变量z,你要评估的参数就是A B 分别正面朝上的概率。以下是实验的统计结果:T表示正,H表示反
Unknown TTHTH 3正-2反
Unknown HHTTH 2正-3反
Unknown THHHH 1正-4反
Unknown THHTT 3正-2反
Unknown HTTHH 2正-3反
回想下EM算法,
第一步,初始化
我们先随机设定参数值,不妨我们设定
A硬币正面朝上的概率PA=0.2,同理PB=0.7
第二步,计算期望。
我们先看看第一轮 3正-2反
如果是A硬币,期望是:0.2*0.2*0.2*0.8*0.8=0.00512
如果是B硬币,期望是:0.7*0.7*0.7*0.3*0.3=0.03087
以此类推,计算每轮的概率
第三步,最大化期望
以第一轮为例,B的期望大于A的期望 0.03087>0.00512,所以第一轮最有可能是B硬币。
以此类推,我们就得到了最大似然的法则:
第一轮:最可能B硬币 3正-2反
第二轮:最可能A硬币 2正-3反
第三轮:最可能A硬币 1正-4反
第四轮:最可能B硬币 3正-2反
第五轮:最可能A硬币 2正-3反
通过这个最大化的期望,我们重新跟新下我们的参数,此时PA=(2+1+2)/(5+5+5)=0.33,PB=(3+3)/(5+5)=0.6
第四步,重复2 、3,
有了新的参数估计,我们在带入第二部,反复,直到收敛。