高斯混合模型與EM算法圖文詳解
一、前言
高斯混合模型(Gaussian Mixture Model)簡稱GMM,是一種業(yè)界廣泛使用的聚類算法。它是多個(gè)高斯分布函數(shù)的線性組合,理論上GMM可以擬合出任意類型的分布,通常用于解決同一集合下的數(shù)據(jù)包含多種不同的分布的情況。高斯混合模型使用了期望最大(Expectation Maximization, 簡稱EM)算法進(jìn)行訓(xùn)練,故此我們在了解GMM之后,也需要了解如何通過EM算法訓(xùn)練(求解)GMM。
二、高斯混合模型(GMM)
在了解高斯混合模型之前,我們先了解一下這種模型的具體參數(shù)模型-高斯分布。高斯分布又稱正態(tài)分布,是一種在自然界中大量存在的,最為常見的分布形式。
如上圖,這是一個(gè)關(guān)于身高的生態(tài)分布曲線,關(guān)于175-180對稱,中間高兩邊低,相信大家在高中已經(jīng)很了解了,這里就不再闡述。
現(xiàn)在,我們引用《統(tǒng)計(jì)學(xué)習(xí)方法》-李航 書中的定義,如下圖:
根據(jù)定義,我們可以理解為,GMM是多個(gè)高斯分布的加權(quán)和,并且權(quán)重α之和等于1。這里不難理解,因?yàn)镚MM最終反映出的是一個(gè)概率,而整個(gè)模型的概率之和為1,所以權(quán)重之和即為1。高斯混合模型實(shí)則不難理解,接下來我們介紹GMM的訓(xùn)練(求解)方法。
PS.從數(shù)學(xué)角度看,對于一個(gè)概率模型的求解,即為求其最大值。從深度學(xué)習(xí)角度看,我們希望降低這個(gè)概率模型的損失函數(shù),也就是希望訓(xùn)練模型,獲得最大值。訓(xùn)練和求解是不同專業(yè),但相同目標(biāo)的術(shù)語。
三、最大似然估計(jì)
想要了解EM算法,我們首先需要了解最大似然估計(jì)這個(gè)概念。我們通過一個(gè)簡單的例子來解釋一下。
假設(shè),我們需要調(diào)查學(xué)校男女生的身高分布。我們用抽樣的思想,在校園里隨機(jī)抽取了100男生和100女生,共計(jì)200個(gè)人(身高樣本數(shù)據(jù))。我們假設(shè)整個(gè)學(xué)校的身高分布服從于高斯分布。但是這個(gè)高斯分布的均值u和方差∂2我們不知道,這兩個(gè)參數(shù)就是我們需要估計(jì)的值。記作θ=[u, ∂]T。
由于每個(gè)樣本都是獨(dú)立地從p(x|θ)中抽取的,并且所有的樣本都服從于同一個(gè)高斯分布p(x|θ)。那么我們從整個(gè)學(xué)校中,那么我抽到男生A(的身高)的概率是p(xA|θ),抽到男生B的概率是p(xB|θ)。而恰好抽取出這100個(gè)男生的概率,就是每個(gè)男生的概率乘積。用下式表示:
這個(gè)概率反映了,在概率密度函數(shù)的參數(shù)是θ時(shí),得到X這組樣本的概率。在公式中,x已知,而θ是未知,所以它是θ的函數(shù)。這個(gè)函數(shù)放映的是在不同的參數(shù)θ取值下,取得當(dāng)前這個(gè)樣本集的可能性,因此稱為參數(shù)θ相對于樣本集X的似然函數(shù)(likehood function)。記為L(θ)。
我們先穿插一個(gè)小例子,來闡述似然的概念。
某位同學(xué)與一位獵人一起外出打獵,一只野兔從前方竄過。只聽一聲槍響,野兔應(yīng)聲到下,如果要你推測,這一發(fā)命中的子彈是誰打的?你就會想,只發(fā)一槍便打中,由于獵人命中的概率一般大于這位同學(xué)命中的概率,看來這一槍是獵人射中的。
這個(gè)例子所作的推斷就體現(xiàn)了極大似然法的基本思想,我們并不知道具體是誰打的兔子,但是我們可以估計(jì)到一個(gè)看似正確的參數(shù)?;氐侥猩砀叩睦又?。在整個(gè)學(xué)校中我們一次抽到這100個(gè)男生(樣本),而不是其他的人,那么我們可以認(rèn)為這100個(gè)男生(樣本)出現(xiàn)的概率最大,用上面的似然函數(shù)L(θ)來表示。
所以,我們就只需要找到一個(gè)參數(shù)θ,其對應(yīng)的似然函數(shù)L(θ)最大,也就是說抽到這100個(gè)男生(的身高)概率最大。這個(gè)叫做θ的最大似然估計(jì)量,記為:
因?yàn)長(θ)是一個(gè)連乘函數(shù),我們?yōu)榱吮阌诜治?,可以定義對數(shù)似然函數(shù),運(yùn)用對數(shù)的運(yùn)算規(guī)則,把連乘轉(zhuǎn)變?yōu)檫B加:
PS.這種數(shù)學(xué)方法在MFCC中我們曾經(jīng)用過,可以回溯一下上一篇文章。
此時(shí),我們要求θ,只需要使θ的似然函數(shù)L(θ)極大化,然后極大值對應(yīng)的θ就是我們的估計(jì)。在數(shù)學(xué)中求一個(gè)函數(shù)的最值問題,即為求導(dǎo),使導(dǎo)數(shù)為0,解方程式即可(前提是函數(shù)L(θ)連續(xù)可微)。在深度學(xué)習(xí)中,θ是包含多個(gè)參數(shù)的向量,運(yùn)用高等數(shù)學(xué)中的求偏導(dǎo),固定其中一個(gè)變量的思想,即可求出極致點(diǎn),解方程。
總結(jié)而言:
最大似然估計(jì),只是一種概率論在統(tǒng)計(jì)學(xué)的應(yīng)用,它是參數(shù)估計(jì)的方法之一。說的是已知某個(gè)隨機(jī)樣本滿足某種概率分布,但是其中具體的參數(shù)不清楚,參數(shù)估計(jì)就是通過若干次試驗(yàn),觀察其結(jié)果,利用結(jié)果推出參數(shù)的大概值。最大似然估計(jì)是建立在這樣的思想上:已知某個(gè)參數(shù)能使這個(gè)樣本出現(xiàn)的概率最大,我們當(dāng)然不會再去選擇其他小概率的樣本,所以干脆就把這個(gè)參數(shù)作為估計(jì)的真實(shí)值。
求最大似然函數(shù)估計(jì)值的一般步驟:
- 寫出似然函數(shù);
- 對似然函數(shù)取對數(shù),并整理;(化乘為加)
- 求導(dǎo)數(shù),令導(dǎo)數(shù)為0,得到似然方程;
- 解似然方程,得到的參數(shù)即為所求。
四、EM算法
期望最大(Expectation Maximization, 簡稱EM)算法,稱為機(jī)器學(xué)習(xí)十大算法之一。它是一種從不完全數(shù)據(jù)或有數(shù)據(jù)丟失的數(shù)據(jù)集(存在隱含變量)中求解概率模型參數(shù)的最大似然估計(jì)方法。
現(xiàn)在,我們重新回到男女生身高分布的例子。我們通過抽取100個(gè)男生身高,并假設(shè)身高分布服從于高斯分布,我們通過最大化其似然函數(shù),可以求的高斯分布的參數(shù)θ=[u, ∂]T了,對女生同理。但是,假如這200人,我們只能統(tǒng)計(jì)到其身高數(shù)據(jù),但是沒有男女信息(其實(shí)就是面對200個(gè)樣本,抽取得到的每個(gè)樣本都不知道是從哪個(gè)分布抽取的,這對于深度學(xué)習(xí)的樣本分類很常見)。這個(gè)時(shí)候,我們需要對樣本進(jìn)行兩個(gè)東西的猜測或者估計(jì)了。
EM算法就可以解決這個(gè)問題。假設(shè)我們想估計(jì)知道A和B兩個(gè)參數(shù),在開始狀態(tài)下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過來知道了B也就得到了A??梢钥紤]首先賦予A某種初值,以此得到B的估計(jì)值,然后從B的當(dāng)前值出發(fā),重新估計(jì)A的取值,這個(gè)過程一直持續(xù)到收斂為止。
在男女生身高分布的例子中,我們運(yùn)用EM算法的思想。首先隨便猜一下男生的高斯分布參數(shù):均值和方差。假設(shè)均值是1.7米,方差是0.1米,然后計(jì)算出每個(gè)人更可能屬于第一個(gè)還是第二個(gè)正態(tài)分布中。這是第一步,Expectation。在分開了兩類之后,我們可以通過之前用的最大似然,通過這兩部分,重新估算第一個(gè)和第二個(gè)分布的高斯分布參數(shù):均值和方差。這是第二步,Maximization。然后更新這兩個(gè)分布的參數(shù)。這是可以根據(jù)更新的分布,重新調(diào)整E(Expectation)步驟...如此往復(fù),迭代到參數(shù)基本不再發(fā)生變化。
這里原作者提到了一個(gè)數(shù)學(xué)思維,很受啟發(fā),轉(zhuǎn)給大家看一眼(比較雞湯和啰嗦,大家可以跳過)
這時(shí)候你就不服了,說你老迭代迭代的,你咋知道新的參數(shù)的估計(jì)就比原來的好???為什么這種方法行得通呢?有沒有失效的時(shí)候呢?什么時(shí)候失效呢?用到這個(gè)方法需要注意什么問題呢?呵呵,一下子拋出那么多問題,搞得我適應(yīng)不過來了,不過這證明了你有很好的搞研究的潛質(zhì)啊。呵呵,其實(shí)這些問題就是數(shù)學(xué)家需要解決的問題。在數(shù)學(xué)上是可以穩(wěn)當(dāng)?shù)淖C明的或者得出結(jié)論的。那咱們用數(shù)學(xué)來把上面的問題重新描述下。(在這里可以知道,不管多么復(fù)雜或者簡單的物理世界的思想,都需要通過數(shù)學(xué)工具進(jìn)行建模抽象才得以使用并發(fā)揮其強(qiáng)大的作用,而且,這里面蘊(yùn)含的數(shù)學(xué)往往能帶給你更多想象不到的東西,這就是數(shù)學(xué)的精妙所在?。?/p>
五、EM算法的簡單理解方式
在提出EM算法的推導(dǎo)過程之前,先提出中形象的理解方式,便于大家理解整個(gè)EM算法,如果只是實(shí)現(xiàn)深度學(xué)習(xí)模型,個(gè)人認(rèn)為可以不需要去看后面的算法推導(dǎo),看這個(gè)就足夠了。
坐標(biāo)上升法(Coordinate ascent):
圖中的直線式迭代優(yōu)化的途徑,可以看到每一步都會向最優(yōu)值靠近,而每一步前進(jìn)的路線都平行于坐標(biāo)軸。那么我們可以將其理解為兩個(gè)未知數(shù)的方程求解。倆個(gè)未知數(shù)求解的方式,其實(shí)是固定其中一個(gè)未知數(shù),求另一個(gè)未知數(shù)的偏導(dǎo)數(shù),之后再反過來固定后者,求前者的偏導(dǎo)數(shù)。EM算法的思想,其實(shí)也是如此。使用坐標(biāo)上升法,一次固定一個(gè)變量,對另外的求極值,最后逐步逼近極值。對應(yīng)到EM上,E步:固定θ,優(yōu)化Q;M步:固定Q,優(yōu)化θ;交替將極值推向最大。
六、EM算法推導(dǎo)
現(xiàn)在很多深度學(xué)習(xí)框架可以簡單調(diào)用EM算法,實(shí)際上這一段大家可以不用看,直接跳過看最后的總結(jié)即可。但是如果你希望了解一些內(nèi)部的邏輯,可以看一下這一段推導(dǎo)過程。
假設(shè)我們有一個(gè)樣本集{x(1),…,x(m)},包含m個(gè)獨(dú)立的樣本(右上角為樣本序號)。但每個(gè)樣本i對應(yīng)的類別z(i)是未知的(相當(dāng)于聚類),也即隱含變量。故我們需要估計(jì)概率模型p(x,z)的參數(shù)θ(在文中可理解為高斯分布),但是由于里面包含隱含變量z,所以很難用最大似然求解,但如果z知道了,那我們就很容易求解了。
首先放出似然函數(shù)公式,我們接下來對公式進(jìn)行化簡:
對于參數(shù)估計(jì),我們本質(zhì)上的思路是想獲得一個(gè)使似然函數(shù)最大化的參數(shù)θ,現(xiàn)在多出一個(gè)未知變量z,公式(1)。那么我們的目標(biāo)就轉(zhuǎn)變?yōu)椋赫业竭m合的θ和z讓L(θ)最大。
對于多個(gè)未知數(shù)的方程分別對未知的θ和z分別求偏導(dǎo),再設(shè)偏導(dǎo)為0,即可解方程。
因?yàn)?1)式是和的對數(shù),當(dāng)我們在求導(dǎo)的時(shí)候,形式會很復(fù)雜。
這里我們需要做一個(gè)數(shù)學(xué)轉(zhuǎn)化。我們對和的部分,乘以一個(gè)相等的函數(shù),得到(2)式,利用Jensen不等式的性質(zhì),將(2)式轉(zhuǎn)化為(3)式。(Jensen不等式數(shù)學(xué)推到比較復(fù)雜,知道結(jié)果即可)
Note:
Jensen不等式表述如下:
如果f是凸函數(shù),X是隨機(jī)變量,那么:E[f(X)]>=f(E[X])
特別地,如果f是嚴(yán)格凸函數(shù),當(dāng)且僅當(dāng)X是常量時(shí),上式取等號。參考鏈接: https://blog.csdn.net/zouxy09/article/details/8537620
至此,上面的式(2)和式(3)不等式可以寫成:似然函數(shù)L(θ)>=J(z,Q),那么我們可以通過不斷的最大化這個(gè)下界J(z,Q)函數(shù),來使得L(θ)不斷提高,最終達(dá)到它的最大值。
現(xiàn)在,我們推導(dǎo)出了在固定參數(shù)θ后,使下界拉升的Q(z)的計(jì)算公式就是后驗(yàn)概率,解決了Q(z)如何選擇的問題。這一步就是E步,建立L(θ)的下界。接下來的M步,就是在給定Q(z)后,調(diào)整θ,去極大化L(θ)的下界J(在固定Q(z)后,下界還可以調(diào)整的更大)。
總結(jié)而言
EM算法是一種從不完全數(shù)據(jù)或有數(shù)據(jù)丟失的數(shù)據(jù)集(存在隱藏變量)中,求解概率模型參數(shù)的最大似然估計(jì)方法。
EM的算法流程:
1>初始化分布參數(shù)θ;
重復(fù)2>, 3>直到收斂:
2>E步驟(Expectation):根據(jù)參數(shù)初始值或上一次迭代的模型參數(shù)來計(jì)算出隱性變量的后驗(yàn)概率,其實(shí)就是隱性變量的期望。作為隱藏變量的現(xiàn)估計(jì)值:
3>M步驟(Maximization):將似然函數(shù)最大化以獲得新的參數(shù)值:
這個(gè)不斷迭代的過程,最終會讓E、M步驟收斂,得到使似然函數(shù)L(θ)最大化的參數(shù)θ。
在L(θ)的收斂證明:
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
解決后端傳long類型數(shù)據(jù)到前端精度丟失問題
這篇文章主要介紹了解決后端傳long類型數(shù)據(jù)到前端精度丟失問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot時(shí)區(qū)問題解決以及徹底解決時(shí)差問題
這篇文章主要給大家介紹了關(guān)于SpringBoot時(shí)區(qū)問題解決以及徹底解決時(shí)差問題的相關(guān)資料,spring?boot作為微服務(wù)簡易架構(gòu),擁有其自身的特點(diǎn),快速搭建架構(gòu),簡單快捷,需要的朋友可以參考下2023-08-08Idea進(jìn)行pull的時(shí)候Your local changes would be
這篇文章主要介紹了Idea進(jìn)行pull的時(shí)候Your local changes would be overwritten by merge.具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11SpringCloud使用AOP統(tǒng)一處理Web請求日志實(shí)現(xiàn)步驟
這篇文章主要為大家介紹了SpringCloud使用AOP統(tǒng)一處理Web請求日志實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08如何解決springcloud feign 首次調(diào)用100%失敗的問題
這篇文章主要介紹了如何解決springcloud feign 首次調(diào)用100%失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot的配置文件(properties與yml)使用方法
配置文件中的配置類型有兩類,一類是系統(tǒng)配置項(xiàng),這種配置的格式都是固定的,是給系統(tǒng)使用的,另一種是用戶自定義配置,用戶可以隨意地規(guī)定配置項(xiàng)的格式,又用戶自行去設(shè)置和讀取,這篇文章主要介紹了SpringBoot的配置文件(properties與yml)使用方法,需要的朋友可以參考下2023-08-08詳解Spring?Boot中@PostConstruct的使用示例代碼
在Java中,@PostConstruct是一個(gè)注解,通常用于標(biāo)記一個(gè)方法,它表示該方法在類實(shí)例化之后(通過構(gòu)造函數(shù)創(chuàng)建對象之后)立即執(zhí)行,這篇文章主要介紹了詳解Spring?Boot中@PostConstruct的使用,需要的朋友可以參考下2023-09-09