遵循统一的机器学习框架理解高斯混合模型(GMM)
一、前言
- 我的博客仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
- 本文参考了网络上诸多资料,特别是B站UPshuhuai008的视频,讲解东西也是我最喜欢的方式:从多个角度阐述和理解问题。
二、理解
统一的机器学习框架(MLA):
1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)
Model
题外话:所谓模型,就是建模的过程,也是我们对现实(已观测)的一种假设,比如前几篇介绍SVM,LR的假设就是:我们认为可以使用一个超平面区分这些数据。模型内涵了我们的归纳偏置或者说是归纳偏好。
几何角度:
对于已观测到的数据\(X=\{x^i,x^2 \cdots ,x^n\}\),由一个概率生成模型生成而来 \(P(X|\theta)\),其中 \(\theta\) 就是这个模型的参数。由于压根不知道 \(P(X|\theta)\) 应该是什么形式,在高斯混合模型中,我们假设(归纳偏好)这些数据由K个高斯模型混合生成的数据,即:\(P(X)\) 由K个高斯模型叠加而来。
概率密度函数由多个高斯分布叠加(加权平均)而来
\[p(x) = \sum_{k=1}^{K} \alpha_k p(x|\mu_k,\Sigma_k),\;\;\sum_{k=1}^K \alpha_k=1,\;\;\alpha_k \; 表示加权值
\]
几何角度就是直接把 \(p(x)\) 当成好几个模型加权到一起,直接就是分开看待的。
下面说的数据生成的角度就是直接 \(p(x)\) 当成一个整体看待,着眼点在于生成的过程,或者说分拆的是数据的生成过程。
数据生成的角度
引入隐变量z:z 表示 对于样本 x 属于哪一个高斯分布,z 是一个离散的随机变量(我们很难确定某一个样本具体属于哪一个分布,因此采用随机变量来表示)。
这里可以理解一个样本的生成过程:先根据z得到样本属于哪一个类别的高斯分布,然后再使用该高斯分布生成样本(随机采样)。
比如说:想象有一个不均匀的骰(此字念tou二声)子,首先掷骰子,得到一个数字,然后根据这个数字对于的高斯模型生成样本(随机采样)。这个骰子就决定了:每个生成样本属于哪一个高斯模型的先验分布。
简单来说就是:掷骰子-->随机采样,数学语言就是
\[p(z=k)-->N(\mu_k,\Sigma_k)
\]
z |
1 |
2 |
\(\cdots\) |
K |
p(z) |
\(p_1\) |
\(p_2\) |
\(\cdots\) |
\(p_k\) |
\[\sum_{k=1}^K p_k=1
\]
因此,从这个角度的写出的概率密度函数:
\[\begin{aligned}
p(x)&=\int_{z}p(x,z)dz\\
&= \int_{z} p(x|z)p(z) dz\\
&= \sum_{z}p(x|z)p(z)\\
&= \sum_{k=1}^K p(x|z=k)p(z=k)\\
&= \sum_{k=1}^K p_k p(x|\mu_k,\Sigma_k)
\end{aligned}
\]
此时就可以看出与几何角度的式子完全一样。
- 几何角度: \(\alpha_k\) 表示不同高斯模型叠加时的权重值
- 数据生成的角度: \(p_k\) 表示任意一个样本属于某一个高斯模型的概率
使用 \(\theta\) 表示全部参数:\(\theta = \{p_1 ,p_2 ,\cdots,p_k;\mu_1,\mu_2, \cdots,\mu_k;\Sigma_1,\Sigma_2,\cdots,\Sigma_k \}\)
策略
求得一组参数 \(\theta\),使得以 \(\theta\) 为参数的模型出现观测到数据的概率值最大。
需要的实现目标:
\[\max\;logP(X|\theta)
\]
真实的优化目标:
\[\theta^{(t+1)} = \arg\max_{\theta} \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)
\]
上式怎么来的参考EM算法之不同的推导方法和自己的理解这篇博客
算法
极大似然估计
现在已经写出模型,还有观测到的数据,直接使用极大似然估计的方法求解:
\[\begin{aligned}
\ \hat{\theta}_{MLE} &= \arg\max_{\theta}\;logP(X)\\
&= \arg\max_{\theta}\;log \prod_{i=1}^np(x^i)\\
&= \arg\max_{\theta}\; \sum_{i=1}^n log \sum_{k=1}^Kp(z^i=k) p(x^i|\mu_k,\Sigma_k)
\end{aligned}
\]
由于 \(log\) 里面是连加,\(MLE\) 的方式无法得到解析解,故此使用数值解:梯度下降法或者EM算法。
EM算法
\[\theta^{(t+1)} = \arg\max_{\theta} \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)
\]
其中 \(Q(\theta,\theta^{(t)}) = \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\) 就是在资料中常见的 \(Q\) 函数。
其实EM算法中使用的策略也还是极大似然估计,只不过换了个对象,极大化的对象不同了。刚开始方法(算法)没错,但是找错人了(优化的对象,损失函数,极大化的函数)。
就好像找对象,使用的方法(死缠烂打流,帅气高冷流,霸气大哥流,知心暖男流,苦逼老实人流,放荡不羁浪子流等,这里相当于人设)其实是没错的,假如没找到对象,可能是没有在正确的分类的人群里去找。比如你用放荡不羁浪子流派想去找一个经历较多想静心过生活的御姐,注定难度很大。因此想要找对象可以在两个方面改变:
- 方法\人设 不变,还是使用放荡不羁浪子流(算法不变,还是极大似然估计),切换找对象的目标群,从御姐范群体换到天真浪漫小女生群体(换一个优化的目标、优化的对象or损失函数)
- 目标群体不变,就爱御姐(优化的函数或者目标不变),使用别的方法\改变自己的人设,从放荡不羁浪子流换成暖男流或者帅气高冷流(从极大似然法换成梯度下降法)
方法相当于人设,一个人的人设改变较难,因此对于大部分人而言,找到一个符合自己人设的对象容易一些,可是大部分人都想找自己理想的目标,梦中的情人,此时就要去改变自己的人设,此时需要付出很大的努力。
更真实的是,有的方法只能优化较少目标,有的方法可以优化特别多的目标,比如MLE(极大似然估计)方法在 \(\arg\max_{\theta}\;logP(X)\) 中就做不到,但是GD(梯度下降法)就可以做到,而且基本是对于所有的目标都适用,简直就是现实世界中的高富帅(人设)。换句话说就是:有的人不需要改变自己的人设,就可以吸引到非常多不同群体的妹子(不同的优化目标或者优化函数),因为这种人设(优化方法)是通杀的。
网上的资料,关于EM算法的解释基本上就到此为止了,如何把上式展开,具体的过程是如何的呢,下面将详细展开说明。
展开方式1:
\(\sum_{k=1}^Klogp(z^i=k|x^i,\theta^{(t)})]=1\)
这个是式子等会会用到。如果这个式子等于1看不懂的,那你就多看几遍。
\[\begin{aligned}
Q(\theta,\theta^{(t)}) &= \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\\
&=\sum_{Z} \{\prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \sum_{i=1}^n log \;p(x^i,z^i|\theta) \}\\
&=\sum_{z^1,\cdots,z^n} \{\prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \sum_{i=1}^n log \;p(x^i,z^i|\theta) \}\\
&=\sum_{z^1,\cdots,z^n}\{log\;p(x^1,z^1|\theta) \prod_{j=1}^n p(z^j|x^j,\theta^{(t)})+\cdots+ log\;p(x^n,z^n|\theta) \prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \}\\
&=\sum_{i=1}^n \{\sum_{k=1}^K log\;p(x^i,z^i=k|\theta)\;p(z^i=k|x^i,\theta^{(t)})]\prod_{j=2}^n[\sum_{k=1}^Klogp(z^i=k|x^i,\theta^{(t)})]\}\\
&=\sum_{i=1}^n \sum_{k=1}^K log\;p(x^i,z^i=k|\theta)\;p(z^i|x^i,\theta^{(t)})
\end{aligned}
\]
展开方式2:从原始式子推导展开
EM算法应用于GMM时,求得\(q(z) = {p(z|x,\theta^{(t)})}\)
\[\begin{aligned}
log P(X|\theta) &= \sum_{i=1}^n log\;p(x^i|\theta)=\sum_{i=1}^n log \int_{z^i}p(x^i,z^i|\theta)dz^i\\
&=\sum_{i=1}^n log \int_{z^i} \frac{p(x^i,z^i|\theta)}{q(z^i)} q(z^i)dz^i\\
&=\sum_{i=1}^n log \;E_{q(z^i)}[ \frac{p(x^i,z^i|\theta)}{q(z^i)}]\\
& \geq \sum_{i=1}^nE_{q(z^i)}[log \frac{p(x^i,z^i|\theta)}{q(z^i)}]\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log \frac{p(x^i,z^i=k|\theta)}{q(z^i=k)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log {p(x^i,z^i=k|\theta)}-\sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log\; {q(z^i=k)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log {p(x^i,z^i=k|\theta)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})}\; log \;{p(x^i,z^i=k|\theta)}\\
\end{aligned}
\]
现在求得
\[\begin{aligned}
Q(\theta,\theta^{(t)})&=\sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})}\; log \;{p(x^i,z^i=k|\theta)}\\
&=\sum_{i=1}^n \sum_{k=1}^K \frac{p(x^i|z^i=k,\theta^{(t)})p(z^i=k|\theta^{(t)})}{\sum_{j=1}^K p(x^i|z^i=j,\theta^{(t)})} log \;{p(x^i|z^i=k,\theta)p(z^i=k|\theta)}\\
&= \sum_{i=1}^n \sum_{k=1}^K \frac {N(x^i|\mu_k^{(t)},\Sigma_k^{(t)})p_k^{(t)}}{\sum_{j=1}^K N(x^i|\mu_j^{(t)},\Sigma_j^{(t)}) }logN(x^i|\mu_k,\Sigma_k)\;p_k
\end{aligned}
\]
根据极大似然估计的方法求取 \(p_k\):
\[\arg\max_{p}\sum_{i=1}^n \sum_{k=1}^K log\;p_k\; {p(z^i=k|x^i,\theta^{(t)})}\\\sum_{k=1}^K p_k=1
\]
\[L(\lambda,p_k) =\sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})} log\;p_k+\lambda(1-\sum_{k=1}^Kp_k)\\
\]
\[\begin{aligned}
&\frac {\partial L}{\partial p_k} = \sum_{i=1}^n \frac{p(z^i=k|x^i,\theta^{(t)})}{p_k}-\lambda=0\\
&\sum_{i=1}^n {p(z^i=k|x^i,\theta^{(t)})}-\lambda\;p_k=0\\
&\sum_{i=1}^n\sum_{k=1}^K{p(z^i=k|x^i,\theta^{(t)})}=n\\
&\sum_{k=1}^K \lambda p_k=\lambda \;\;-->\lambda=n\\
&p_k = \frac{1}{n}\sum_{i=1}^n {p(z^i=k|x^i,\theta^{(t)})}
\end{aligned}
\]
其他的以后再补充