EM算法
今天整理一下EM算法,当年在学校学这个的时候真是一脸懵逼啊,还好考的不难:)
EM(Expectation-Maximization)算法,从名字中就可以知道他是有两部分构成的求期望和求极大似然,论文原文放在这里需要的自取。算法通过迭代的方式进行E步和M步,从而更新模型参数,直到收敛。
预备知识
- 已知分布求期望以及如何求极大似然估计的内容这里就不展开了,可以看我之前整理的文章。
- 凸函数,引用百度百科
凸函数是一个定义在某个向量空间的凸子集C上的实值函数f,而且对于凸子集C中任意两个向量\(x_1\)、\(x_2\)有\(f((x_1 + x_2) / 2) <= (f(x_1) + f(x_2)) / 2\) 成立。
- Jensen inequality
假设函数f(x)是凸函数,那么\(E[f(x)] >= f(E[x])\),相反如果f(x)是凹函数,不等式反向。
问题描述
假设有A、B两类数据掺杂在一起,分别服从两个分布,我们现在希望知道每个样本的分布。简单的思考一下步骤应该是:
- 分别初始化A、B正态分布的参数
- 计算每个样本是属于A、B哪一类
- 利用分好的类,重新估计A、B两类的分布参数
- 重复2-3步骤,也就是E-step和M-step,直到收敛
具体计算流程
首先,所有样本集合d={x1, x2, …, xn}, 所有可能的分布集合h={z1, z2, …, zn},定义一个关于参数 \(\theta\) 的函数 \(l(\theta) = log p(d;\theta) = log \sum_h p(d,h,\theta)\),令\(q(h)\) 为隐分布h的函数,那么 \(l(\theta) = log[\sum_h q(h) \frac{p(d,h,\theta}{q(h)}]\),利用Jensen不等式可以得到 \(l(\theta) >= \sum q(h) log \frac{p(d,h,\theta)}{(h)} = J(q,\theta)\)
那么E-step就是在求最有可能的分布 \(q^t = argmax_q J(q;\theta^t)\);
而M-step就是在求参数的极大似然估计 \(\theta^{t+1} = argmax_{\theta} J(q^t;\theta)\)
然后重复上面两个step,直到收敛。
最后我们就可以得到所有可能的分布以及对应的参数。