问题的提出
--> Figure_1
假设我们有一堆如图(b)所示的数据集X,它们由3个独立的高斯分布生成,样本在空间中存在交叠,上帝知道它的本来面目(如图(a)所示),一个自然的问题是:能否根据数据集X,估计出生成它们的分布的参数呢?答案是肯定的,下面来分析如何求解模型参数。
混合高斯模型
我们假设X的生成分布为:
(1)
其中,表示混合系数,且关于k求和结果为1,表示均值为、协方差为的高斯分布。我们可以很容易地根据该假设写出数据集的对数似然函数:
(2)
然后,根据MLE的求解流程,求解模型参数的时候,发现ln or log符号内包含一堆东西,这样这些耦合在一起,求解起来往往比较费劲(需要说明的是,(2)事实上也是可以直接用来求解模型参数的))。我们来复盘一下这个问题,如果给我们的数据集是(a)所示的完全数据集{X,Z},每个样本x都存在如图F2(a)所示的指示变量z,此时数据集的形态如图F1(a)所示,那么我们可以把各个分布的数据拿来估计对应分布的参数,因此参数估计的难度瞬间减低。一个很自然的问题:如果我们在估计模型参数前知道各个样本对应的指示变量,那么问题不就可以简化许多?
引入隐变量Z
a). b). --> Figure_2
基于上述思想,我们很自然地想到引入中间变量来辅助我们求解模型参数。具体地:对于任意的样本,引入隐变量,其中(即one-hot编码,只有一个分量值为1,其它分量值为0),它表示样本是由分布生成。记模型参数为,我们假设隐变量的先验分布(prior)为:
(3)
需要指出这里隐变量的分布仅仅与模型参数有关,而与样本无关。
相应地,样本的似然函数为:
(4)
当我们得到后,由条件概率公式可得完备数据的似然函数:
至此,整个完备数据集{X,Z}似然函数为:
对相应的对数似然函数关于隐变量Z取期望可得:
(5)
行文至此,有一个非常自然的问题:为什么要对隐变量Z取期望?因为对于,我们往往无法给出其exactly的形式(one-hot编码格式),只能通过概率的形式来表述其分量。读者可以类比一下Mnist数据集的分类情形,对于一个特定的输入图片,它所对应groundtruth只有1个,但是我们模型做分类的时候,通过softmax给出一个score_list。
下面给出计算公式:
(6)
一个很自然的问题是:计算期望时为什么使用的是的后验分布P(Z|X,),而不是如(3)所示的它的先验分布呢?注意,计算期望时,由于隐变量已经‘看过’数据了,因此为了能够更加精准地刻画隐变量自身的分布,它需要根据已经看过的数据X、模型参数来修正原来的先验分布P(Z|)。(6)式物理意义跃然纸上,这里不在叙述,为了方便符号的统一,后续我们用来表示。
混合高斯分布的解
相对于(2),利用(5)来求解模型参数则变得非常简单。需要指出,在上述的叙述中有一个隐含条件我们一直没有着重强调:,在求解混合系数时需要加入”和为1“的约束条件。这里,我们给出(5)对应的Lagrange函数:
对上式关于各个变量求偏导、置零,即可解出对应的表达式。下面给出求解得到的结果:
,其中, (7)
(8)
(9)
基于以上的叙述,我们给出如下求解混合高斯模型参数的算法:
EM算法——基于bayes视角
一般地,对于完备数据集{X,Z},我们有:
(10)
其中表示表示指示变量(隐变量)的后验分布。对(10)变形可得:
(11)
在(11)中我们引入了指示变量的先验分布,对(11)等号两边同时乘以,并关于先验分布积分(或求和),可得:
(12)
注意,这里的一般被称为Q-function,KL(q||p)表示KL-散度,它用于度量两个分布之间的差异性,两个分布如果诧异越大,它的取值越大;反之,则越小,当且仅当p=q时,KL(q||p) = 0.
在实际应用中,我们遇到的数据一般是不完备的数据集{X},然后我们基于对数据分布的假设需要根据实际数据来求解:,但直接求解往往比较复杂,于是我们通过引入中间变量(隐变量)Z来简化求解问题。具体地,对于(12)有:
(13)
我们可以退而且其次,来优化的下界,这样通过优化下界函数来间接地优化原始问题。
a). b). c). -->Figure 3
具体的优化过程可以结合Figure3来叙述。首先,对于固定的,(12)可由Figure-3a阐述,此时红线表示,为了使下界函数达到最大,我们必须使得KL(q||p)达到最小,因此取;当我们取时,对于固定的,下界函数,如Figure3b所示;然后,在固定隐变量的分布的情形下关于模型参数优化下界函数,得到,似然函数在下的取值由Figure3c中红色实线表示,此时对于KL(q||p)而言,由于,故有KL(q||p) >= 0。因此,为了在新的参数下使得下界函数达到最大,我们需要将隐变量的分布由更新为。接着,再固定隐变量的分布,更新模型参数,……,直到达到算法终止条件。Figure4给出了似然函数在上述的交替迭代过程中的变化情况:
--> Figure 4
最后,我们给出EM算法的一般流程: