从 GMM 到 EM 算法
首先需要声明的是,GMM是Gaussian Mixture Model,混合高斯模型,是一个模型。EM算法,Expection Maximization期望最大是一套计算框架(framework),一系列的计算流程(迭代式的)。一般地,我们可以使用EM算法来求解GMM问题,即 put GMM into EM framework。
EM迭代流程为:
\theta^{(g+1)}=\underbrace{\arg\max_\theta}_{\textrm{M-Step}}\underbrace{\int_z\log p(X,z|\theta)p(z|X,\theta^{(g)})dz}_{\textrm{E-Step}}
X={x1,x2,…,xN}X=\{x_1, x_2,\dots,x_N\}
其 joint density 或者叫 log joint density:
\log P(X)=\sum_{i=1}^N\log\sum_{\ell=1}^k\alpha_k\mathcal{N}(x_i|\mu_\ell,\sigma_\ell)
混合高斯模型(GMM)参数集 Θ={μ1,…,μk,Σ1,…,Σk,α1,…,αk−1}\Theta=\{\mu_1, \dots,\mu_k,\Sigma_1,\dots,\Sigma_k,\alpha_1,\dots,\alpha_{k-1} \}
P(x_i|\Theta)=\sum_{\ell=1}^k\alpha_\ell\mathcal{N}(x_i|\mu_\ell,\Sigma_\ell)
\Theta_{MLE}=\arg\max_\Theta\sum_{i=1}^N\log\sum_{\ell=1}^k\alpha_\ell\mathcal{N}(x_i|\mu_\ell,\Sigma_\ell)
其中 L(Θ|X)=∑i=1Nlog∑ℓ=1kαℓN(xi|μℓ,Σℓ)\mathcal{L}(\Theta|X)=\sum\limits_{i=1}^N\log\sum\limits_{\ell=1}^k\alpha_{\ell}\mathcal{N}(x_i|\mu_{\ell},\Sigma_{\ell}),混合的情形下,不再像单高斯(single mode Gaussian)的情况,不存在一个显示的解析解,一种常规的替代方案是使用迭代的方式去寻找(像MCMC算法那样,收敛到稳态?:-D),而这一方式正是著名的EM算法。
所谓迭代的方式即是提供如下的一种递归关系:
\Theta^{(g+1)}=f(\Theta^{(g)})
EM算法给出的 f(⋅)f(\cdot) 是:
\Theta^{(g+1)}=\arg\max_{\Theta}\int_zP(X,z|\Theta)P(z|X,\Theta^{(g)})dz
该递推关系还应至少满足,logP(X|Θ(g+1))>logP(X|Θ(g))\log P(X|\Theta^{(g+1)})>\log P(X|\Theta^{(g)})(Log Likelihood)
其中引变量 ziz_i(zi={1,…,k}z_i=\{1,\dots,k\}) 标识样本 xix_i 所属的高斯号(哪一个高斯),这样就将GMM的fitting问题转换为了single mode Gauss的fitting问题了(将每个高斯对应的数据摘出来)。引变量的存在使得问题得以简化。对所添加的隐藏变量的要求是不能改变边缘分布(marginal distribution):
p(x_i)=\int_{z_i}\underbrace{p(x_i|z_i)}_{\mathcal{N}(x_i|\mu_{z_i},\Sigma_{z_i})}\underbrace{p(z_i)}_{\alpha_{z_i}}dz_i
又因为 ziz_i是离散型随机变量,取值为 zi={1,…,k}z_i=\{1,\dots,k\},又可将积分符号改造为求和符号。也即:
p(x_i)=\sum_{z_i=1}^kp(x_i|z_i)p(z_i)=\sum_{z_i=1}^k \alpha_{z_i}\mathcal{N}(x_i|\mu_{z_i},\Sigma_{z_i})
此时关于 xix_i的边缘分布,刚好就是 L(Θ|X)=∑i=1Nlog∑ℓ=1kαℓN(xi|μℓ,Σℓ)\mathcal{L}(\Theta|X)=\sum\limits_{i=1}^N\log\underbrace{\sum\limits_{\ell=1}^k\alpha_\ell\mathcal{N}(x_i|\mu_{\ell},\Sigma_{\ell})}
也即添加引变量之后并未改变数据的边缘分布。
\log p(X|\Theta)=\log p(X,z|\Theta)-\log p(z|X,\Theta)\\ \Downarrow(大名鼎鼎的EM期望最大算法)\\ E_{p(z|X,\Theta^{(g)})}[\log p(X|\Theta)]=E_{p(z|X,\Theta^{(g)})}[\log p(X,z|\Theta)]-E_{p(z|X,\Theta^{(g)})}[\log p(z|X,\Theta)]\\ \Downarrow\\ \log p(X|\Theta)=\underbrace{\int_z \log p(X,z|\Theta)p(z|X,\Theta^{(g)})dz}_{Q(\Theta,\Theta^{(g)})}-\underbrace{\int_z\log p(z|X,\Theta)p(z|X,\Theta)dz}_{H(\Theta,\Theta^{(g)})}\\ \Downarrow\\ \log p(X|\Theta)=Q(\Theta, \Theta^{(g)})-H(\Theta, \Theta^{(g)})\\
put GMM into EM framework
EM framework:
\Theta^{(g+1)}=\arg\max_\Theta\int_z\log p(X,Z|\Theta)p(Z|X,\Theta^{(g)})dz
- 如何定义 p(X,Z|Θ)p(X,Z|\Theta)(ziz_i 是对高斯的指定):
p(X,Z|\Theta)=\prod_{i=1}^Np(x_i,z_i|\Theta)=\prod_{i=1}^N\underbrace{p(x_i|z_i,\Theta)}_{\mathcal{N}(\mu_{z_i},\Sigma_{z_i})}\underbrace{p(z_i|\Theta)}_{\alpha_{z_i}}=\prod_{i=1}^N\alpha_{z_i}\mathcal{N}(\mu_{z_i},\Sigma_{z_i})
还记得 p(X|Θ)p(X|\Theta) 的形式吗?
p(X|\Theta)=\sum_{\ell=1}^k\alpha_\ell\mathcal{N}(X|\mu_\ell,\sigma_\ell)=\prod_{i=1}^N\sum_{\ell=1}^k\alpha_\ell\mathcal{N}(x_i|\mu_\ell,\sigma_\ell)
可见 p(X,Z|Θ)p(X,Z|\Theta) 是 p(X|Θ)p(X|\Theta) 关于高斯的指定。
- 再来看 p(Z|X,Θ)p(Z|X,\Theta) 的定义
因为 (xi,zi)(x_i,z_i)彼此独立:
p(Z|X,\Theta)=\prod_{i=1}^Np(z_i|x_i,\Theta)=\prod_{i=1}^N\frac{p(z_i)p(x_i|z_i)}{\sum_{z_i}p(z_i)p(x_i|z_i)}=\prod\frac{\alpha_{z_i}\mathcal{N}(x_i|\mu_{z_i},\Sigma_{z_i})}{\sum \alpha_{z_i}\mathcal{N}(x_i|\mu_{z_i},\Sigma_{z_i})}
代入到EM的框架下:
E-Step:
=\sum_{i=1}^N\sum_ {z_i=1}^k\left ( \log \alpha_{\ell}+\log \mathcal{N}(x_i|\mu_{\ell},\Sigma_{\ell})\right )p(\ell|x_i,\Theta^{(g)})\\ =\sum_{i=1}^N\sum_ {\ell=1}^k\left ( \log \alpha_{\ell}+\log \mathcal{N}(x_i|\mu_{\ell},\Sigma_{\ell})\right )p(\ell|x_i,\Theta^{(g)})
M-Step:
\Rightarrow \alpha_\ell=\frac1N\sum_{i=1}^Np(\ell|x_i,\Theta^{(g)})
补充
GMM问题求解的困难在于,L(Θ|X)=∑Ni=1log∑kℓ=1αℓN(xi|μℓ,Σℓ)\mathcal{L}(\Theta|X)=\sum_{i=1}^N\log\sum_{\ell=1}^k\alpha_\ell\mathcal{N}(x_i|\mu_\ell,\Sigma_\ell),对和式求对数。(numpy提供了np.logaddexp(),:-D)
>>> import numpy as np
>>> np.logaddexp(np.log(1), np.log(1))
0.69314718055994529# np.logaddexp(x, y) = log(e^x+e^y)
>>> np.log(1+1)
0.69314718055994529# np.logaddexp(log(x), log(y)) = log(x+y)
从 GMM 到 EM 算法相关推荐
- 从生成模型到GDA再到GMM和EM算法
在学习生成模型之前,先学习了解下密度估计和高斯混合模型.为什么呢?因为后面的VAE\GANs模型都需要把训练样本,也就是输入的图像样本看作是一个复杂的.多维的分布. 1. 知乎上关于图像频率的解释 作 ...
- GMM的EM算法实现
在 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证 ...
- 语音识别入门第三节:GMM以及EM算法(实战篇)
练习基础代码(包括音频文件.音频文件读取代码.预加重代码.分帧加窗代码.快速傅里叶变换代码)可从Github中获取,链接如下:https://github.com/nwpuaslp/ASR_Cours ...
- 3.GMM模型-EM算法
项目模板和描述:链接地址 本次实验所用的数据为0-9(其中0的标签为Z(Zero))和o这11个字符的英文录音,每个录音的原始录音文件和39维的MFCC特征都已经提供, 实验中,每个字符用一个GMM来 ...
- 高斯混合模型(GMM)及其EM算法的理解
一个例子 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同 ...
- 使用EM算法估计GMM参数的原理及matlab实现
相关数学概念 协方差矩阵 多维高斯分布 其中k=n,即x的维度. GMM的原理 GMM,高斯混合模型,是一种聚类算法. 1.GMM概念: -将k个高斯模型混合在一起,每个点出现的概率是几个高斯混合的结 ...
- 高斯混合分布EM算法
未完待续 In Depth: Gaussian Mixture Models GMM与EM算法的Python实现
- GMM高斯混合模型学习笔记(EM算法求解)
提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...
- 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现
三硬币EM算法 import numpy as np import mathclass Three_coin:def __init__(self,pai=0.0,p=0.0,q=0.0):self.p ...
最新文章
- Java异常处理及异常机制介绍
- 3.12 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
- Android中关于cpu/cpuset/schedtune的应用
- 2018-3-28Linux系统管理(16)计算机网络基础
- 最新版Byte Buddy完全支持Java 11
- mysql 配置root密码_Mysql安装与配置调优及修改root密码的方法
- NeHe OpenGL教程 01 创建OpenGL窗口
- c语言几个字符串排序,请教多个字符串排序(不用数组)
- 苹果ID激活锁查询工具v1.2
- Linux-whereis find locat which半解
- 小i机器人登陆美股,乘ChatGPT的东风能走多远?
- Medusa(美杜莎)和Hydra(九头蛇)快速入门手册:02
- 喜欢游戏学计算机,我喜欢电脑游戏小学作文
- 朱嘉明:数字经济和非同质时代——NFT
- 第一个Ajax程序给我的下马威——xmlHttp的status=0?
- mysql 1044 4200_关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误
- 操作系统常用缩写总结
- VIM源生linux代码编辑器使用
- L2-030 冰岛人 (25分)
- redis安装与测试