Jensen不等式

Jensen不等式给出了积分的凸函数值必定大于凸函数(convex)的积分值的定理。在凸函数曲线上的任意两点间连接一条线段,那么线段会位于曲线之上,这就是将Jensen不等式应用到两个点的情况,如图(1)所示\((t\in[0,1])\)。我们从概率论的角度来描述Jensen不等式:假设\(f(x)\)为关于随机变量\(x\)的凸函数\(f'(x)\geq 0\),则有\(f\left(E(x)\right)\leq E\left(f(x)\right)\)。反之,如果\(f(x)\)为关于\(x\)的凹函数(concave),则有\(f\left(E(x)\right)\geq E\left(f(x)\right)\)。

对于严格的凸函数\(\left(f''(x)>0\right)\),想取得相等关系\(f\left(E(x)\right)=E\left(f(x)\right)\),则有\(x=E(x)\),那么\(x\)必须为常数。

期望最大化

期望最大化(Expectation Maximization,EM)算法常用于求解概率模型的极大似然问题,其典型的应用场景包括:1)观察到的数据不完全;2)似然函数无法直接计算但可以用隐变量(latent variables)来表示。对于第一种应用场景,我们可以将缺失的数据视为隐变量,然后用已有的观测数据将其推导出来,最后也就回到了第二种应用场景。假设在概率模型中,\(x^{(i)}\)和\(z^{(i)}\)分别为观测值和隐变量(\(i=1,2,\cdots,m\)),两者的联合概率为\(p(x,z;\theta)\),其中\(\theta\)为模型参数。我们的目标是在仅知道\(x^{(i)}\)的前提下,求最佳的模型参数\(\theta\)以最大化似然函数 \begin{equation} \mathcal{L}(\theta)=\sum_{i=1}^m\log\left(x^{(i)};\theta\right)=\sum_{i=1}^m\log\sum_{j=1}^Kp\left(x^{(i)},z^{(i)}=j;\theta\right) \end{equation} 这里简单假设\(z^{(i)}\)为离散值\(\{1,2,\cdots,K\}\),在\(z^{(i)}\)为连续值或离散值和连续值的组合时情况也是类似的。 在仅知道\(x^{(i)}\)的情况下用极大似然法估计参数很困难。如果\(z^{(i)}\)只可能取少数几个离散值,我们还可以根据\(z^{(i)}\)分情况优化似然函数,最终求得最合理的模型参数;但若\(z^{(i)}\)的取值情况很复杂时,前面的方法很显然是行不通的。既然直接求解似然函数的最大值很难,只能退而求其次,求似然函数下界的最大值,得到一个相对较好的模型参数,这就是EM算法的精髓所在。这里我们引入隐变量\(z^{(i)}\)的概率分布\(Q_i(z^{(i)})\),则对数似然函数表述为如下形式: \begin{equation} \begin{array}{rl} \mathcal{L}(\theta)&=\sum_{i=1}^m\log\sum_{z^{(i)}=1}^KQ_i\left(z^{(i)}\right)\frac{p\left(x^{(i)},z^{(i)};\theta\right)}{Q_i\left(z^{(i)}\right)}\\ &=\sum_{i=1}^m\log E_{z^{(i)}\sim Q_i}\left[\frac{p\left(x^{(i)},z^{(i)};\theta\right)}{Q_i\left(z^{(i)}\right)}\right] \end{array} \end{equation} \(Q_i(z^{(i)})\)为隐变量\(z^{(i)}\)的概率分布,必须满足约束条件: \begin{equation} Q_i(z^{(i)})\geq 0,\sum_{z^{(i)}=1}^KQ_i(z^{(i)})=1 \end{equation} 对数函数\(\log x\)在区间\((0,+\infty)\)上为严格的凹函数,根据Jensen不等式可得到似然函数的下界: \begin{equation} \begin{array}{rl} \mathcal{L}(\theta)&=\sum_{i=1}^m\log E_{z^{(i)}\sim Q_i}\left[\frac{p\left(x^{(i)},z^{(i)};\theta\right)}{Q_i\left(z^{(i)}\right)}\right]\\ &\geq \sum_{i=1}^mE_{z^{(i)}\sim Q_i}\left[\log \frac{p\left(x^{(i)},z^{(i)};\theta\right)}{Q_i\left(z^{(i)}\right)}\right]=L(\theta) \end{array} \end{equation}

从EM算法的描述可知,EM算法的每次迭代分为两步:E-step和M-step,如图(2)所示。

E-step使似然函数下界\(L(\theta)\)在\(\theta^{(t)}\)处紧贴着似然函数\(\mathcal{L}(\theta)\),我们需要调整\(Q_i(z^{(i)})\)以满足: \begin{equation} \frac{p\left(x^{(i)},z^{(i)};\theta\right)}{Q_i\left(z^{(i)}\right)}=C \end{equation} 结合\(Q_i(z^{(i)})\)的约束条件,很容易得到如下关系式: \begin{equation} Q_i(z^{(i)})=\frac{p\left(x^{(i)},z^{(i)};\theta\right)}{\sum_{z^{(i)}=1}^K p\left(x^{(i)},z^{(i)};\theta\right)}=\frac{p\left(x^{(i)},z^{(i)};\theta\right)}{p\left(x^{(i)};\theta\right)}=p\left(z^{(i)}|x^{(i)};\theta\right) \end{equation} M-step则求使\(L(\theta^{(t)})\)取得极大值的参数\(\theta^{(t+1)}\)作为下一次迭代的初始点。

如果将\(L(\theta)\)定义为关于\(Q_i(z^{(i)})\)和\(\theta\)的函数\(J(Q,\theta)\),则EM算法的优化策略和坐标上升(coordinate ascent)是一致的。在E-step中,沿着\(Q\)定义的方向最大化\(J(Q,\theta)\);在M-step中,沿着\(\theta\)定义的方向最大化\(J(Q,\theta)\),这也可以解释EM算法在迭代过程中会使目标函数收敛到局部最优解。

高斯混合模型

密度估计(Density Estimation)中的高斯混合模型(Gaussian Mixture Model,GMM)是EM算法的一个典型应用,下面就以GMM为例展示EM的强大威力。高斯混合模型可以表示成\(K\)个高斯分布的线性加权: \begin{equation} P(x)=\sum_{k=1}^K\phi_k\mathcal{N}(x|\mu_k,\Sigma_k) \end{equation} 其中\(w_k\)为第\(k\)个高斯分布的权值。我们要估算出模型中的所有参数\(\phi_k,\mu_k,\Sigma_k\)。 假设现有观测数据集合\(\mathcal{S}=\{x^{(i)}|x^{(i)}\in\mathbb{R}^n,i=1,\cdots,m\}\),每个样本\(x^{(i)}\)都有一个对应的隐变量\(z^{(i)}\in\{1,\cdots,K\}\)表示\(x^{(i)}\)属于哪一个高斯分布,\(z^{(i)}\)服从参数为\(\phi_1,\cdots,\phi_K\)的多项分布\(P(z^{(i)}=k)=\phi_k\),参数满足以下约束条件: \begin{equation} \sum_{k=1}^K\phi_k=1,\quad \phi_k\geq 0,k=1,\cdots,K \end{equation} \(x^{(i)}\)和\(z^{(i)}\)之间的联合分布\(P(x^{(i)},z^{(i)})=P(x^{(i)}|z^{(i)})P(z^{(i)})\)。在已知\(z^{(i)}=k\)的前提下我们知道\(x^{(i)}\)的概率分布,即\(x^{(i)}|z^{(i)}\sim \mathcal{N}(\mu_k,\Sigma_k)\): \begin{equation} P(x^{(i)}|z^{(i)}=k)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma_k|^{\frac{1}{2}}}\exp\left(-\frac{1}{2}(x^{(i)}-\mu_k)^T\Sigma_k^{-1}(x^{(i)}-\mu_k)\right) \end{equation} 很可惜\(z^{(i)}\)是未知的隐变量,可能是任意一个高斯分布,因此\(P(x^{(i)})=\sum_{z^{(i)}=1}^K P(x^{(i})|z^{(i)})P(z^{(i)})\)。似然函数形式如下: \begin{equation} \ell({\phi,\mu,\Sigma})=\prod_{i=1}^mP(x^{(i)};\phi,\mu,\Sigma)=\prod_{i=1}^m\left(\sum_{z^{(i)}=1}^K P(x^{(i}|z^{(i)})P(z^{(i)})\right) \end{equation} 将上式转化为形式上更简单的对数似然函数并加上约束条件构成拉格郎日函数: \begin{equation} \mathcal{L}({\phi,\mu,\Sigma})=\sum_{i=1}^m\log\left(\sum_{z^{(i)}=1}^K P(x^{(i}|z^{(i)})P(z^{(i)})\right)+\lambda(\sum_{k=1}^K\phi_k-1) \end{equation} 仔细观察这个拉格郎日函数,我们发现对数函数的输入为多个高斯函数的加权,这就导致了利用普通的求偏导方法是无法获得一个解析解的。根据前面的EM算法,我们先执行E-step,利用贝叶斯定律猜测每个样本服从每个高斯分布的概率: \begin{equation} Q_k^{(i)}=P(z^{(i)}=k|x^{(i)})=\frac{P(x^{(i)}|z^{(i)}=k)P(z^{(i)}=k)}{\sum_{k=1}^KP(x^{(i)}|z^{(i)}=k)P(z^{(i)}=k)} \end{equation} 然后求得与上述拉格郎日函数等价的下界函数\(L(\phi,\mu,\Sigma)\): \begin{equation} \begin{array}{rl} L(\phi,\mu,\Sigma)&=\sum_{i=1}^m\sum_{k=1}^KQ_k^{(i)}\log P(x^{(i)},z^{(i)}=k)+\lambda(\sum_{k=1}^K\phi_k-1)\\ &=\sum_{i=1}^m\sum_{k=1}^KQ_k^{(i)}\left(\log P(x^{(i)}|z^{(i)}=k)+\log P(z^{(i)}=k)\right)\\ &\quad+\lambda(\sum_{k=1}^K\phi_k-1) \end{array} \end{equation} 注意到该下界函数中的对数函数已经直接作用到每个高斯分布上了。现在我们可以对参数求偏导来计算使下界函数最大的更好的参数。 \begin{equation} \frac{\partial L}{\partial\mu_k}=0\Rightarrow\mu_k=\frac{\sum_{i=1}^mQ_k^{(i)}x^{(i)}}{\sum_{i=1}^mQ_k^{(i)}} \end{equation} \begin{equation} \frac{\partial L}{\partial\Sigma_k}=0\Rightarrow\Sigma_k=\frac{\sum_{i=1}^mQ_k^{(i)}(x^{(i)}-\mu_k)(x^{(i)}-\mu_k)^T}{\sum_{i=1}^mQ_k^{(i)}} \end{equation} \begin{equation} \frac{\partial L}{\partial\phi_k}=0\Rightarrow\sum_{i=1}^m\frac{Q_k^{(i)}}{\phi_k}+\lambda=0 \end{equation} 结合约束条件\(\sum_{k=1}^K\phi_k=1\),得到\(\lambda=-m\),因此\(\phi_k=\sum_{i=1}^mQ_k^{(i)}/m\)。 根据上述推到,我们给出GMM模型的算法:  EM算法收敛速度要比K-means慢,而且每次迭代的计算量也很大。较好的初始值可以加快收敛速度,因此通常可以用K-means完成粗略的聚类,然后用每个类簇的均值、方差和类簇占总样本的比例来初始化GMM的参数。似然函数可能存在多个局部最优解,且EM算法肯定可以搜索到似然函数的局部最大值,但不能保证可以求得全局的最大值。

根据上述的GMM算法,我写了一个Python版本的GMM代码。我随机生成了3组高斯分布的数据,并在图(3)中用三种不同颜色的统计直方图表示;然后用生成的数据用EM算法训练GMM模型,训练过程中的对数似然函数的变化曲线如图(4)所示;最后用训练好的GMM模型反过来预测训练数据的概率密度函数值,如图(3)中的红色曲线所示。

Expectation Maximization and GMM的更多相关文章

  1. EM算法(Expectation Maximization)

    1 极大似然估计     假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成绩的分 ...

  2. EM算法(Expectation Maximization Algorithm)初探

    1. 通过一个简单的例子直观上理解EM的核心思想 0x1: 问题背景 假设现在有两枚硬币Coin_a和Coin_b,随机抛掷后正面朝上/反面朝上的概率分别是 Coin_a:P1:-P1 Coin_b: ...

  3. EM算法(Expectation Maximization Algorithm)

    EM算法(Expectation Maximization Algorithm) 1. 前言   这是本人写的第一篇博客(2013年4月5日发在cnblogs上,现在迁移过来),是学习李航老师的< ...

  4. 漫谈 Clustering (番外篇): Expectation Maximization

    Expectation Maximization (EM) 是一种以迭代的方式来解决一类特殊最大似然 (Maximum Likelihood) 问题的方法,这类问题通常是无法直接求得最优解,但是如果引 ...

  5. 最大期望算法 Expectation Maximization概念

    在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Lat ...

  6. [转]EM算法(Expectation Maximization Algorithm)详解

    https://blog.csdn.net/zhihua_oba/article/details/73776553 EM算法(Expectation Maximization Algorithm)详解 ...

  7. EM(Expectation Maximization)算法

    EM(Expectation Maximization)算法  参考资料: [1]. 从最大似然到EM算法浅解 [2]. 简单的EM算法例子 [3]. EM算法)The EM Algorithm(详尽 ...

  8. 简单理解EM算法Expectation Maximization

    1.EM算法概念 EM 算法,全称 Expectation Maximization Algorithm.期望最大算法是一种迭代算法,用于含有隐变量(Hidden Variable)的概率参数模型的最 ...

  9. EM(Expectation Maximization )

    概括 看李航老师的<统计学习方法>知道,EM是一个对于有隐含随机变量的概率模型的参数的估计方法,它是一种无监督的算法. 只是有些重要的点并没有给出, 比如没有三硬币例子中直接给出的 u(z ...

随机推荐

  1. javascript AES加密 C#AES解密实现

    首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...

  2. Ubuntu中使用pyUSB读取鼠标或键盘的数据程序

    参考 :http://www.orangecoat.com/how-to/read-and-decode-data-from-your-mouse-using-this-pyusb-hack 要注意的 ...

  3. android判断当前网络状态及跳转到设置界面

    今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.Wirele ...

  4. Java每日一则-002

    Java中包的层级关系 java中的包在逻辑上是没有套嵌的,也就是说: java.lang 和 java.lang.awt 是两个平行的包,地位相等,互不相关.只不过一个名字叫java.lang另一个 ...

  5. Maven管理多模块项目

    首先,我们要明确的多模块项目的含义,它是指一个应用中包含多个module.一般来说,一个应用单独部署成服务,只是打包的时候,maven会把各个module组合在一起.各模块一般单独打成jar放到lib ...

  6. mapreduce的调度算法和job调优

    调度算法: mapreduce当有很多的作业在执行的时候,是按照什么顺序去执行的? 调度算法顺序需要关注: 1.提高作业的吞吐量. 2.要考虑优先级. 三种调度器:如果作业跑不完,并且机器资源利用率比 ...

  7. 第二百五十天 how can I 坚持

    html排版,好烦心. 我以为我会哭,但是我没有.---<领悟> 确实是搞不懂自己,到底想要什么?弟弟最近也不知道咋的了,感觉有点不对劲呢. 最近雾霾好严重,希望我们的后代不会知道雾霾是什 ...

  8. 终于弄好了 homework-09

    近一周的时间,顶着编译大作业严重搁置的压力,天天搞,终于把网页动态展示的搞出来了!恩,还挺好看~ 因为是最后一次作业了,也是因为天生的完美主义强迫症,做到自己满意才放心停下来.不过,这个过程,看着同学 ...

  9. C++11 能好怎?

    0. 摘要 近期读了一些关于C++11标准的材料. 本篇博客将从新标准的优点.与旧版本的区别和使用方法三个角度,大致介绍我对C++11的认识. C++11标准,原名C++0x, 是03版旧标准的更新. ...

  10. 排序算法之快速排序(java实现)

    package com.javaTest300; public class Test039 { public static void main(String[] args) {// 快速排序 int ...