遵循統一的機器學習框架理解高斯混合模型(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} \]
其他的以后再補充
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/73698.html
標籤:其他
下一篇:Pytorch入門教程
