前言
GMM高斯混合模型是生成模型的有利代表之一,本文将作简单的原理推导和代码复现,主要是在代码复现,所以,推导将不会很严谨。
数学基础:【概率论与数理统计知识复习-哔哩哔哩】
原理推导
案例引入
所谓高斯混合模型,是英文“Guassian Mixture Model”的缩写,里面的Guassian代表的就是高斯分布。先来看一下什么是高斯混合模型,能解决什么问题?
假如,我们有下面的数据
在这种数据中,你是否会想过,这种数据是如何生成的?对于生成数据,我们很自然而言的一种方式就是假如我们知道了这些数据对应概率分布,那么理论上就可以从这个概率分布上面抽样出样本。
但是,我们有一个问题,这些数据,是否是独立同分布的呢?比如,在图中,看起来,如果仅仅用一个概率分布来表达这些数据好像不大妥当。他更像是两个不同的高斯分布。因此,我们是否可以认为这些数据是独立但并不同分布。
因此,我们可以假设,对于图中的两个概率分布,第一个概率分布均值和协方差 N ( μ 1 , ∑ 1 ) N(\mu_1,\sum_1) N(μ1,∑1),第二个 N ( μ 2 , ∑ 2 ) N(\mu_2,\sum_2) N(μ2,∑2)
那么,对于这些数据的生成,我们认为是这样产生的。首先,存在一个概率 p 1 , p 2 p_1,p_2 p1,p2,他们对应的事件是(1,2)。首先以 p 1 , p 2 p_1,p_2 p1,p2作为概率进行抽取,如果抽中1,那么我们就从第一个高斯分布中随机生成数据;如果抽中2,那么我们就从第二个高斯分布中随机生成数据。得到第一个数据后,又重新开始抽取,不断生成数据。最终就得到了我们如图中所示的数据。
而这,这就是高斯混合模型的原理来源。
但是,我们现在的目标啊,并不是生成数据。而是如果给定了像图中的数据,如何计算出对应的参数 μ , ∑ , p \mu,\sum,p μ,∑,p。
或者说,对于高斯混合模型,我们最经典的就是用于聚类。如何聚类?在图中,我们有两类数据,这些数据称为训练数据,如果来了一些新的数据,我们认为这些新的数据属于哪一类的可能性更大一些?是蓝色的一类?还是红色的一类?对于这类问题,我们可以通过训练数据训练出模型的参数。那么新来的数据就可以计算属于蓝色一类的概率,再计算属于红色一类的概率,只要比较哪一类的概率大就属于哪一类。
所以,问题就是,如何通过训练数据来求解出模型参数!
变量定义
对于这种给定数据求模型概率参数的问题,我们一般就是求出极大似然估计
在求解之前,先作以下定义
X
=
(
x
1
T
x
2
T
⋮
x
n
T
)
\begin{equation} \begin{aligned} X=\begin{pmatrix} x_1^T \\ x_2^T\\ \vdots \\x_n^T \end{pmatrix} \end{aligned} \end{equation}
X=
x1Tx2T⋮xnT
大写的X代表全部的观测数据,小写的x带下标代表第几个数据。当然了这里并没有继续展开,实际上里面的
x
i
x_i
xi又可以分为几个分量,比如
x
1
=
(
x
1
1
x
1
2
)
T
x_1=(x_1^1 \hspace{0.5cm}x_1^2)^T
x1=(x11x12)T,代表
x
1
x_1
x1分为两个维度,如图上的那样。x是随机变量。并且每个数据之间是相互独立的。
有了观测数据,我们还有一个问题,实际上,我们能拿到的数据只有观测数据,然而这些数据并不完整,为什么呢?我们前面说到过,我们生成数据的时候是先通过概率
p
1
,
p
2
p_1,p_2
p1,p2判定是属于事件1还是事件2,接着再选定对应的高斯分布进行抽样。那么理应我们的数据应当是
Z
=
(
z
1
T
z
2
T
⋮
z
n
T
)
;
(
Z
,
X
)
=
(
(
z
1
,
x
1
)
(
z
2
,
x
2
)
⋮
(
z
n
,
x
n
)
)
Z=\begin{pmatrix} z_1^T \\z_2^T \\ \vdots \\z_n^T \end{pmatrix}; (Z,X)=\begin{pmatrix} (z_1,x_1) \\(z_2,x_2) \\ \vdots \\(z_n,x_n) \end{pmatrix}
Z=
z1Tz2T⋮znT
;(Z,X)=
(z1,x1)(z2,x2)⋮(zn,xn)
其中,Z代表的是全部的隐藏数据,
z
i
z_i
zi代表第i次生成数据时所选定的事件。比如,
z
1
=
1
z_1=1
z1=1,此时的
x
1
x_1
x1就是从第一个高斯分布中抽样出来的数据。z代表随机变量
而 ( Z , X ) (Z,X) (Z,X)代表的就是完全数据。
对于z,因为是离散的,我们给定分布表
z | C1 | C2 | ⋯ \cdots ⋯ | Ck |
---|---|---|---|---|
p p p | p 1 p_1 p1 | p 1 p_1 p1 | ⋯ \cdots ⋯ | p k p_k pk |
对于随机变量z,为了提高泛化能力,我们假定观测数据可以分为k个高斯分布,那么z的取值就是k个,而不是之前说的只有两个。 p 1 p_1 p1对应的高斯分布的参数 N ( μ 1 , Σ 1 ) N(\mu_1,Σ_1) N(μ1,Σ1),并且 ∑ k = 1 K p k = 1 \sum\limits_{k=1}^Kp_k=1 k=1∑Kpk=1
为了方便表达,我们用 θ \theta θ代表全部参数。即 θ = ( p k , u k , Σ k ) \theta=(p_k,u_k,Σ_k) θ=(pk,uk,Σk)
目标函数
那么之前我们提到过,我们的目标,实际上就是求极大似然估计。
max
θ
P
(
X
∣
θ
)
\max\limits_{\theta}P(X|\theta)
θmaxP(X∣θ)
一般情况下,对于这种东西,我们的思路就是取log然后求导求解即可,但是我们知道,X并不是我们的完全数据,X的出现依托于Z,故我们引入Z。(声明:本文的log如无特殊表达,均以e为底数)
l
o
g
P
(
X
∣
θ
)
=
l
o
g
∏
i
=
1
n
P
(
x
i
∣
θ
)
=
∑
i
=
1
n
l
o
g
[
P
(
x
i
∣
θ
)
]
=
∑
i
=
1
n
l
o
g
[
∑
z
i
P
(
x
i
∣
θ
)
]
\begin{equation} \begin{aligned} logP(X|\theta)=&log\prod\limits_{i=1}^nP(x_i|\theta) \\=&\sum\limits_{i=1}^nlog\left[P(x_i|\theta)\right] \\=&\sum\limits_{i=1}^nlog\left[\sum\limits_{z_i}P(x_i|\theta)\right] \end{aligned} \end{equation}
logP(X∣θ)===logi=1∏nP(xi∣θ)i=1∑nlog[P(xi∣θ)]i=1∑nlog[zi∑P(xi∣θ)]
对于这个问题,是很难求解的,因为log里面是连加符号,log里面一大堆连加会导致求导及其困难。这个式子并没有解析解。只能够采取迭代求解的方式。而对于GMM模型,我们一般是采用EM算法求解。
所谓EM算法,在这里不过多介绍了(不理解的可以看上一篇EM算法原理推导),具体步骤如下
EM算法分为两步:
①给定 P ( Z ∣ X , θ t ) → E P ( Z ∣ X , θ t ) [ l o g P ( Z , X ∣ θ ) ] P(Z|X,\theta^{t})\rightarrow{E_{P(Z|X,\theta^{t})}\left[logP(Z,X|\theta)\right]} P(Z∣X,θt)→EP(Z∣X,θt)[logP(Z,X∣θ)]
② θ t + 1 = max θ E P ( Z ∣ X , θ t ) [ l o g P ( Z , X ∣ θ ) ] {\theta^{t+1}}=\max\limits_{\theta}{E_{P(Z|X,\theta^{t})}\left[logP(Z,X|\theta)\right]} θt+1=θmaxEP(Z∣X,θt)[logP(Z,X∣θ)]
依据EM算法原理,只需要将新的 θ t + 1 \theta^{t+1} θt+1作为新的 θ t \theta^t θt,然后不断迭代①、②。最终可以收敛。
既然如此,那么就必须要计算出
E
P
(
Z
∣
X
,
θ
t
)
[
l
o
g
P
(
Z
,
X
∣
θ
)
]
{E_{P(Z|X,\theta^{t})}\left[logP(Z,X|\theta)\right]}
EP(Z∣X,θt)[logP(Z,X∣θ)]。
E
P
(
Z
∣
X
,
θ
t
)
[
l
o
g
P
(
Z
,
X
∣
θ
)
]
=
∑
Z
l
o
g
[
P
(
Z
,
X
∣
θ
)
]
P
(
Z
∣
X
,
θ
t
)
=
∑
Z
l
o
g
[
∏
i
=
1
n
P
(
z
i
,
x
i
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
\begin{equation} \begin{aligned} {E_{P(Z|X,\theta^{t})}\left[logP(Z,X|\theta)\right]}=&\sum\limits_{Z}log[P(Z,X|\theta)]P(Z|X,\theta^t) \\=&\sum\limits_{Z}log\left[\prod_{i=1}^nP(z_i,x_i|\theta)\right]\prod_{i=1}^nP(z_i|x_i,\theta^t) \end{aligned} \end{equation}
EP(Z∣X,θt)[logP(Z,X∣θ)]==Z∑log[P(Z,X∣θ)]P(Z∣X,θt)Z∑log[i=1∏nP(zi,xi∣θ)]i=1∏nP(zi∣xi,θt)
对于这个式子,一般情况下我们都会想方设法地去掉连乘号,因为他一般是难以计算的,复杂度相对于连加号来说较大,并且连乘号容易导致数值溢出。因此我们需要消掉连乘号。
∑
Z
l
o
g
[
∏
i
=
1
n
P
(
z
i
,
x
i
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
Z
∑
i
=
1
n
l
o
g
P
(
z
i
,
x
i
∣
θ
)
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
Z
[
l
o
g
P
(
z
1
,
x
1
∣
θ
)
+
l
o
g
P
(
z
2
,
x
2
∣
θ
)
+
⋯
+
l
o
g
P
(
z
n
,
x
n
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
Z
l
o
g
[
P
(
z
1
,
x
1
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
+
∑
Z
l
o
g
P
[
(
z
2
,
x
2
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
+
⋯
+
∑
Z
l
o
g
[
P
(
z
n
,
x
n
∣
θ
)
]
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
\begin{equation} \begin{aligned} &\sum\limits_{Z}log\left[\prod_{i=1}^nP(z_i,x_i|\theta)\right]\prod_{i=1}^nP(z_i|x_i,\theta^t) \\=&\sum\limits_{Z}\sum_{i=1}^{n}logP(z_i,x_i|\theta)\prod_{i=1}^{n}P(z_i|x_i,\theta^t) \\=&\sum_{Z}\left[ logP(z_1,x_1|\theta)+logP(z_2,x_2|\theta)+\cdots+logP(z_n,x_n|\theta) \right]\prod_{i=1}^{n}P(z_i|x_i,\theta^t) \\=&\sum_Zlog[P(z_1,x_1|\theta)]\prod_{i=1}^nP(z_i|x_i,\theta^t)+\sum_ZlogP[(z_2,x_2|\theta)]\prod_{i=1}^nP(z_i|x_i,\theta^t)+\cdots+\\&\sum_Zlog[P(z_n,x_n|\theta)]\prod_{i=1}^nP(z_i|x_i,\theta^t) \end{aligned} \end{equation}
===Z∑log[i=1∏nP(zi,xi∣θ)]i=1∏nP(zi∣xi,θt)Z∑i=1∑nlogP(zi,xi∣θ)i=1∏nP(zi∣xi,θt)Z∑[logP(z1,x1∣θ)+logP(z2,x2∣θ)+⋯+logP(zn,xn∣θ)]i=1∏nP(zi∣xi,θt)Z∑log[P(z1,x1∣θ)]i=1∏nP(zi∣xi,θt)+Z∑logP[(z2,x2∣θ)]i=1∏nP(zi∣xi,θt)+⋯+Z∑log[P(zn,xn∣θ)]i=1∏nP(zi∣xi,θt)
一项一项地看
∑
Z
l
o
g
P
(
z
1
,
x
1
∣
θ
)
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
z
1
,
z
2
⋯
,
z
n
l
o
g
[
P
(
z
1
,
x
1
∣
θ
)
]
P
(
z
1
∣
x
1
,
θ
t
)
∏
i
=
2
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
z
1
l
o
g
[
P
(
z
1
,
x
1
∣
θ
)
]
P
(
z
1
∣
x
1
,
θ
t
)
∑
z
2
⋯
z
n
∏
i
=
2
n
P
(
z
i
∣
x
i
,
θ
t
)
\begin{equation} \begin{aligned} &\sum_ZlogP(z_1,x_1|\theta)\prod_{i=1}^nP(z_i|x_i,\theta^t) \\=&\sum_{z_1,z_2\cdots,z_n}log[P(z_1,x_1|\theta)]P(z_1|x_1,\theta^t)\prod_{i=2}^nP(z_i|x_i,\theta^t) \\=&\sum_{z_1}log[P(z_1,x_1|\theta)]P(z_1|x_1,\theta^t)\sum_{z_2\cdots{z_n}}\prod_{i=2}^nP(z_i|x_i,\theta^t) \end{aligned} \end{equation}
==Z∑logP(z1,x1∣θ)i=1∏nP(zi∣xi,θt)z1,z2⋯,zn∑log[P(z1,x1∣θ)]P(z1∣x1,θt)i=2∏nP(zi∣xi,θt)z1∑log[P(z1,x1∣θ)]P(z1∣x1,θt)z2⋯zn∑i=2∏nP(zi∣xi,θt)
注意看
∑
z
2
⋯
z
n
∏
i
=
2
n
P
(
z
i
∣
x
i
,
θ
t
)
\sum_{z_2\cdots{z_n}}\prod_{i=2}^nP(z_i|x_i,\theta^t)
∑z2⋯zn∏i=2nP(zi∣xi,θt),外面连加号把里面所有的
z
z
z都积分掉了,因此
∑
z
2
⋯
z
n
∏
i
=
2
n
P
(
z
i
∣
x
i
,
θ
t
)
=
1
\sum_{z_2\cdots{z_n}}\prod_{i=2}^nP(z_i|x_i,\theta^t)=1
∑z2⋯zn∏i=2nP(zi∣xi,θt)=1
所以
∑
Z
l
o
g
P
(
z
1
,
x
1
∣
θ
)
∏
i
=
1
n
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
z
1
l
o
g
[
P
(
z
1
,
x
1
∣
θ
)
]
P
(
z
1
∣
x
1
,
θ
t
)
\begin{equation} \begin{aligned} \sum_ZlogP(z_1,x_1|\theta)\prod_{i=1}^nP(z_i|x_i,\theta^t) =\sum_{z_1}log[P(z_1,x_1|\theta)]P(z_1|x_1,\theta^t) \end{aligned} \end{equation}
Z∑logP(z1,x1∣θ)i=1∏nP(zi∣xi,θt)=z1∑log[P(z1,x1∣θ)]P(z1∣x1,θt)
所以以此类推其余的项,把所有的项加起来得
∑
z
1
l
o
g
[
P
(
z
1
,
x
1
∣
θ
)
]
P
(
z
1
∣
x
1
,
θ
t
)
+
∑
z
2
l
o
g
[
P
(
z
2
,
x
2
∣
θ
)
]
P
(
z
2
∣
x
2
,
θ
t
)
+
⋯
+
∑
z
n
l
o
g
[
P
(
z
n
,
x
n
∣
θ
)
]
P
(
z
n
∣
x
n
,
θ
t
)
=
∑
i
=
1
n
∑
z
i
l
o
g
[
P
(
z
i
,
x
i
∣
θ
)
]
P
(
z
i
∣
x
i
,
θ
t
)
=
∑
i
=
1
n
∑
k
=
1
K
l
o
g
[
P
(
z
i
=
C
k
,
x
i
∣
θ
)
]
P
(
z
i
=
C
k
∣
x
i
,
θ
t
)
=
∑
k
=
1
K
∑
i
=
1
n
l
o
g
[
P
(
z
i
=
C
k
,
x
i
∣
θ
)
]
P
(
z
i
=
C
k
∣
x
i
,
θ
t
)
\begin{equation} \begin{aligned} &\sum_{z_1}log[P(z_1,x_1|\theta)]P(z_1|x_1,\theta^t)+\sum_{z_2}log[P(z_2,x_2|\theta)]P(z_2|x_2,\theta^t)+\cdots+\sum_{z_n}log[P(z_n,x_n|\theta)]P(z_n|x_n,\theta^t) \\&=\sum_{i=1}^n\sum_{z_i}log[P(z_i,x_i|\theta)]P(z_i|x_i,\theta^t) \\&=\sum_{i=1}^n\sum_{k=1}^{K}log[P(z_i=Ck,x_i|\theta)]P(z_i=Ck|x_i,\theta^t) \\&=\sum_{k=1}^K\sum_{i=1}^{n}log[P(z_i=Ck,x_i|\theta)]P(z_i=Ck|x_i,\theta^t) \end{aligned} \end{equation}
z1∑log[P(z1,x1∣θ)]P(z1∣x1,θt)+z2∑log[P(z2,x2∣θ)]P(z2∣x2,θt)+⋯+zn∑log[P(zn,xn∣θ)]P(zn∣xn,θt)=i=1∑nzi∑log[P(zi,xi∣θ)]P(zi∣xi,θt)=i=1∑nk=1∑Klog[P(zi=Ck,xi∣θ)]P(zi=Ck∣xi,θt)=k=1∑Ki=1∑nlog[P(zi=Ck,xi∣θ)]P(zi=Ck∣xi,θt)
所以
E
P
(
Z
∣
X
,
θ
t
)
[
l
o
g
P
(
Z
,
X
∣
θ
)
]
=
∑
k
=
1
K
∑
i
=
1
n
l
o
g
[
P
(
z
i
=
C
k
,
x
i
∣
θ
)
]
P
(
z
i
=
C
k
∣
x
i
,
θ
t
)
{E_{P(Z|X,\theta^{t})}\left[logP(Z,X|\theta)\right]}=\sum_{k=1}^K\sum_{i=1}^{n}log[P(z_i=Ck,x_i|\theta)]P(z_i=Ck|x_i,\theta^t)
EP(Z∣X,θt)[logP(Z,X∣θ)]=k=1∑Ki=1∑nlog[P(zi=Ck,xi∣θ)]P(zi=Ck∣xi,θt)
下一篇GMM高斯混合模型原理推导