语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}
?https://blog.csdn.net/lin_limin/article/details/81048411會對GMM和EM做詳細介紹
本文參考:
http://www.ituring.com.cn/article/497545(GMM模型)
https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM模型)
http://www.cnblogs.com/wjy-lulu/p/7010258.html(EM算法)
https://blog.csdn.net/zouxy09/article/details/8537620(EM算法)
什么是高斯混合模型(Gaussian Mixture Model)
高斯混合模型(Gaussian Mixture Model)通常簡稱GMM,是一種業界廣泛使用的聚類算法,該方法使用了高斯分布作為參數模型,并使用了期望最大(Expectation Maximization,簡稱EM)算法進行訓練。
本文對該方法的原理進行了通俗易懂的講解,期望讀者能夠更直觀地理解方法原理。文本的最后還分析了高斯混合模型了另一種常見聚類算法K-means的關系,實際上在特定約束條件下,K-means算法可以被看作是高斯混合模型(GMM)的一種特殊形式(達觀數據 陳運文)。
1.??什么是高斯分布?
高斯分布(Gaussian distribution)有時也被稱為正態分布(normal distribution),是一種在自然界大量的存在的、最為常見的分布形式。在提供精確數學定義前,先用一個簡單的例子來說明。
如果我們對大量的人口進行身高數據的隨機采樣,并且將采得的身高數據畫成柱狀圖,將會得到如下圖1所示的圖形。這張圖模擬展示了334個成人的統計數據,可以看出圖中最多出現的身高在180cm左右2.5cm的區間里。?
圖1 由334個人的身高數據構成的正態分布直方圖
這個圖形非常直觀的展示了高斯分布的形態。接下來看下嚴格的高斯公式定義,高斯分布的概率密度函數公式如下:
2. 高斯混合模型(GMM)
如上圖,這是一個關于身高的生態分布曲線,關于175-180對稱,中間高兩邊低,相信大家在高中已經很了解了,這里就不再闡述。
? ? 現在,我們引用《統計學習方法》-李航 書中的定義,如下圖:
????根據定義,我們可以理解為,GMM是多個高斯分布的加權和,并且權重α之和等于1。這里不難理解,因為GMM最終反映出的是一個概率,而整個模型的概率之和為1,所以權重之和即為1。高斯混合模型實則不難理解,接下來我們介紹GMM的訓練(求解)方法。
PS.從數學角度看,對于一個概率模型的求解,即為求其最大值。從深度學習角度看,我們希望降低這個概率模型的損失函數,也就是希望訓練模型,獲得最大值。訓練和求解是不同專業,但相同目標的術語。
高斯混合模型是對高斯模型進行簡單的擴展,GMM使用多個高斯分布的組合來刻畫數據分布。
舉例來說:想象下現在咱們不再考察全部用戶的身高,而是要在模型中同時考慮男性和女性的身高。假定之前的樣本里男女都有,那么之前所畫的高斯分布其實是兩個高斯分布的疊加的結果。相比只使用一個高斯來建模,現在我們可以用兩個(或多個)高斯分布(陳運文):
該公式和之前的公式非常相似,細節上有幾點差異。首先分布概率是K個高斯分布的和,每個高斯分布有屬于自己的μ和σ 參數,以及對應的權重參數,權重值必須為正數,所有權重的和必須等于1,以確保公式給出數值是合理的概率密度值。換句話說如果我們把該公式對應的輸入空間合并起來,結果將等于1。
回到之前的例子,女性在身高分布上通常要比男性矮,畫成圖的話如圖3。
圖3 男性和女性身高的概率分布圖
圖3的y-軸所示的概率值,是在已知每個用戶性別的前提下計算出來的。但通常情況下我們并不能掌握這個信息(也許在采集數據時沒記錄),因此不僅要學出每種分布的參數,還需要生成性別的劃分情況( \varphi_{i}\varphi_{i} )。當決定期望值時,需要將權重值分別生成男性和女性的相應身高概率值并相加。
注意,雖然現在模型更復雜了,但仍然可使用與之前相同的技術進行模型訓練。在計算期望值時(很可能通過已被混合的數據生成),只需要一個更新參數的最大化期望策略。
3. 最大似然估計
? ? ?想要了解EM算法,我們首先需要了解最大似然估計這個概念。我們通過一個簡單的例子來解釋一下。
? ? 假設,我們需要調查學校男女生的身高分布。我們用抽樣的思想,在校園里隨機抽取了100男生和100女生,共計200個人(身高樣本數據)。我們假設整個學校的身高分布服從于高斯分布。但是這個高斯分布的均值u和方差?2我們不知道,這兩個參數就是我們需要估計的值。記作θ=[u,??]T。
? ? 由于每個樣本都是獨立地從p(x|θ)中抽取的,并且所有的樣本都服從于同一個高斯分布p(x|θ)。那么我們從整個學校中,那么我抽到男生A(的身高)的概率是p(xA|θ),抽到男生B的概率是p(xB|θ)。而恰好抽取出這100個男生的概率,就是每個男生的概率乘積。用下式表示:
????
? ? 這個概率反映了,在概率密度函數的參數是θ時,得到X這組樣本的概率。在公式中,x已知,而θ是未知,所以它是θ的函數。這個函數放映的是在不同的參數θ取值下,取得當前這個樣本集的可能性,因此稱為參數θ相對于樣本集X的似然函數(likehood function)。記為L(θ)。
? ? 我們先穿插一個小例子,來闡述似然的概念。
某位同學與一位獵人一起外出打獵,一只野兔從前方竄過。只聽一聲槍響,野兔應聲到下,如果要你推測,這一發命中的子彈是誰打的?你就會想,只發一槍便打中,由于獵人命中的概率一般大于這位同學命中的概率,看來這一槍是獵人射中的。
????? 這個例子所作的推斷就體現了極大似然法的基本思想,我們并不知道具體是誰打的兔子,但是我們可以估計到一個看似正確的參數。回到男生身高的例子中。在整個學校中我們一次抽到這100個男生(樣本),而不是其他的人,那么我們可以認為這100個男生(樣本)出現的概率最大,用上面的似然函數L(θ)來表示。
? ? 所以,我們就只需要找到一個參數θ,其對應的似然函數L(θ)最大,也就是說抽到這100個男生(的身高)概率最大。這個叫做θ的最大似然估計量,記為:
因為L(θ)是一個連乘函數,我們為了便于分析,可以定義對數似然函數,運用對數的運算規則,把連乘轉變為連加:
PS.這種數學方法在MFCC中我們曾經用過。
? ? 此時,我們要求θ,只需要使θ的似然函數L(θ)極大化,然后極大值對應的θ就是我們的估計。在數學中求一個函數的最值問題,即為求導,使導數為0,解方程式即可(前提是函數L(θ)連續可微)。在深度學習中,θ是包含多個參數的向量,運用高等數學中的求偏導,固定其中一個變量的思想,即可求出極致點,解方程。
總結而言:
????最大似然估計,只是一種概率論在統計學的應用,它是參數估計的方法之一。說的是已知某個隨機樣本滿足某種概率分布,但是其中具體的參數不清楚,參數估計就是通過若干次試驗,觀察其結果,利用結果推出參數的大概值。最大似然估計是建立在這樣的思想上:已知某個參數能使這個樣本出現的概率最大,我們當然不會再去選擇其他小概率的樣本,所以干脆就把這個參數作為估計的真實值。
????求最大似然函數估計值的一般步驟:
(1)寫出似然函數;
(2)對似然函數取對數,并整理;(化乘為加)
(3)求導數,令導數為0,得到似然方程;
(4)解似然方程,得到的參數即為所求。
4.? EM算法
? ? 期望最大(Expectation Maximization, 簡稱EM)算法,稱為機器學習十大算法之一。它是一種從不完全數據或有數據丟失的數據集(存在隱含變量)中求解概率模型參數的最大似然估計方法。
? ? 現在,我們重新回到男女生身高分布的例子。我們通過抽取100個男生身高,并假設身高分布服從于高斯分布,我們通過最大化其似然函數,可以求的高斯分布的參數θ=[u,??]T了,對女生同理。但是,假如這200人,我們只能統計到其身高數據,但是沒有男女信息(其實就是面對200個樣本,抽取得到的每個樣本都不知道是從哪個分布抽取的,這對于深度學習的樣本分類很常見)。這個時候,我們需要對樣本進行兩個東西的猜測或者估計了。
? ??? EM算法就可以解決這個問題。假設我們想估計知道A和B兩個參數,在開始狀態下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過來知道了B也就得到了A。可以考慮首先賦予A某種初值,以此得到B的估計值,然后從B的當前值出發,重新估計A的取值,這個過程一直持續到收斂為止。
? ? 在男女生身高分布的例子中,我們運用EM算法的思想。首先隨便猜一下男生的高斯分布參數:均值和方差。假設均值是1.7米,方差是0.1米,然后計算出每個人更可能屬于第一個還是第二個正態分布中。這是第一步,Expectation。在分開了兩類之后,我們可以通過之前用的最大似然,通過這兩部分,重新估算第一個和第二個分布的高斯分布參數:均值和方差。這是第二步,Maximization。然后更新這兩個分布的參數。這是可以根據更新的分布,重新調整E(Expectation)步驟...如此往復,迭代到參數基本不再發生變化。
? ? 這里原作者提到了一個數學思維,很受啟發,轉給大家看一眼(比較雞湯和啰嗦,大家可以跳過)
????這時候你就不服了,說你老迭代迭代的,你咋知道新的參數的估計就比原來的好啊?為什么這種方法行得通呢?有沒有失效的時候呢?什么時候失效呢?用到這個方法需要注意什么問題呢?呵呵,一下子拋出那么多問題,搞得我適應不過來了,不過這證明了你有很好的搞研究的潛質啊。呵呵,其實這些問題就是數學家需要解決的問題。在數學上是可以穩當的證明的或者得出結論的。那咱們用數學來把上面的問題重新描述下。(在這里可以知道,不管多么復雜或者簡單的物理世界的思想,都需要通過數學工具進行建模抽象才得以使用并發揮其強大的作用,而且,這里面蘊含的數學往往能帶給你更多想象不到的東西,這就是數學的精妙所在啊)
5.? EM算法的簡單理解方式
? ? 在提出EM算法的推導過程之前,先提出中形象的理解方式,便于大家理解整個EM算法,如果只是實現深度學習模型,個人認為可以不需要去看后面的算法推導,看這個就足夠了。
? ? 坐標上升法(Coordinate ascent):
? ? 圖中的直線式迭代優化的途徑,可以看到每一步都會向最優值靠近,而每一步前進的路線都平行于坐標軸。那么我們可以將其理解為兩個未知數的方程求解。倆個未知數求解的方式,其實是固定其中一個未知數,求另一個未知數的偏導數,之后再反過來固定后者,求前者的偏導數。EM算法的思想,其實也是如此。使用坐標上升法,一次固定一個變量,對另外的求極值,最后逐步逼近極值。對應到EM上,E步:固定θ,優化Q;M步:固定Q,優化θ;交替將極值推向最大。?
6.? EM算法推導
? ? 現在很多深度學習框架可以簡單調用EM算法,實際上這一段大家可以不用看,直接跳過看最后的總結即可。但是如果你希望了解一些內部的邏輯,可以看一下這一段推導過程。
? ? 假設我們有一個樣本集{x(1),…,x(m)},包含m個獨立的樣本(右上角為樣本序號)。但每個樣本i對應的類別z(i)是未知的(相當于聚類),也即隱含變量。故我們需要估計概率模型p(x,z)的參數θ(在文中可理解為高斯分布),但是由于里面包含隱含變量z,所以很難用最大似然求解,但如果z知道了,那我們就很容易求解了。
首先放出似然函數公式,我們接下來對公式進行化簡:
? ? 對于參數估計,我們本質上的思路是想獲得一個使似然函數最大化的參數θ,現在多出一個未知變量z,公式(1)。那么我們的目標就轉變為:找到適合的θ和z讓L(θ)最大。
? ? 對于多個未知數的方程分別對未知的θ和z分別求偏導,再設偏導為0,即可解方程。
? ? 因為(1)式是和的對數,當我們在求導的時候,形式會很復雜。
????這里我們需要做一個數學轉化。我們對和的部分,乘以一個相等的函數,得到(2)式,利用Jensen不等式的性質,將(2)式轉化為(3)式。(Jensen不等式數學推到比較復雜,知道結果即可)
Note:
Jensen不等式表述如下:
如果f是凸函數,X是隨機變量,那么:E[f(X)]>=f(E[X])
特別地,如果f是嚴格凸函數,當且僅當X是常量時,上式取等號。參考鏈接: https://blog.csdn.net/zouxy09/article/details/8537620
? ? 至此,上面的式(2)和式(3)不等式可以寫成:似然函數L(θ)>=J(z,Q),那么我們可以通過不斷的最大化這個下界J(z,Q)函數,來使得L(θ)不斷提高,最終達到它的最大值。
????現在,我們推導出了在固定參數θ后,使下界拉升的Q(z)的計算公式就是后驗概率,解決了Q(z)如何選擇的問題。這一步就是E步,建立L(θ)的下界。接下來的M步,就是在給定Q(z)后,調整θ,去極大化L(θ)的下界J(在固定Q(z)后,下界還可以調整的更大)。
????總結而言
EM算法是一種從不完全數據或有數據丟失的數據集(存在隱藏變量)中,求解概率模型參數的最大似然估計方法。
EM的算法流程:
1>初始化分布參數θ;
重復2>, 3>直到收斂:
? ? 2>E步驟(Expectation):根據參數初始值或上一次迭代的模型參數來計算出隱性變量的后驗概率,其實就是隱性變量的期望。作為隱藏變量的現估計值:
????3>M步驟(Maximization):將似然函數最大化以獲得新的參數值:
這個不斷迭代的過程,最終會讓E、M步驟收斂,得到使似然函數L(θ)最大化的參數θ。
在L(θ)的收斂證明:
?
7. k-means和GMM的關系
在特定條件下,k-means和GMM方法可以互相用對方的思想來表達。在k-means中根據距離每個點最接近的類中心來標記該點的類別,這里存在的假設是每個類簇的尺度接近且特征的分布不存在不均勻性。這也解釋了為什么在使用k-means前對數據進行歸一會有效果。高斯混合模型則不會受到這個約束,因為它對每個類簇分別考察特征的協方差模型。
K-means算法可以被視為高斯混合模型(GMM)的一種特殊形式。整體上看,高斯混合模型能提供更強的描述能力,因為聚類時數據點的從屬關系不僅與近鄰相關,還會依賴于類簇的形狀。n維高斯分布的形狀由每個類簇的協方差來決定。在協方差矩陣上添加特定的約束條件后,可能會通過GMM和k-means得到相同的結果。
實踐中如果每個類簇的協方差矩陣綁定在一起(就是說它們完全相同),并且矩陣對角線上的協方差數值保持相同,其他數值則全部為0,這樣能夠生成具有相同尺寸且形狀為圓形類簇。在此條件下,每個點都始終屬于最近的中間點對應的類。(達觀數據 陳運文)
在k-means方法中使用EM來訓練高斯混合模型時對初始值的設置非常敏感。而對比k-means,GMM方法有更多的初始條件要設置。實踐中不僅初始類中心要指定,而且協方差矩陣和混合權重也要設置。可以運行k-means來生成類中心,并以此作為高斯混合模型的初始條件。由此可見并兩個算法有相似的處理過程,主要區別在于模型的復雜度不同。
整體來看,所有無監督機器學習算法都遵循一條簡單的模式:給定一系列數據,訓練出一個能描述這些數據規律的模型(并期望潛在過程能生成數據)。訓練過程通常要反復迭代,直到無法再優化參數獲得更貼合數據的模型為止。
GMM和K-means直觀對比
最后我們比較GMM和K-means兩個算法的步驟。
GMM:
先計算所有數據對每個分模型的響應度
根據響應度計算每個分模型的參數
迭代
K-means:
先計算所有數據對于K個點的距離,取距離最近的點作為自己所屬于的類
根據上一步的類別劃分更新點的位置(點的位置就可以看做是模型參數)
迭代
可以看出GMM和K-means還是有很大的相同點的。GMM中數據對高斯分量的響應度就相當于K-means中的距離計算,GMM中的根據響應度計算高斯分量參數就相當于K-means中計算分類點的位置。然后它們都通過不斷迭代達到最優。不同的是:GMM模型給出的是每一個觀測點由哪個高斯分量生成的概率,而K-means直接給出一個觀測點屬于哪一類。
?
總結
以上是生活随笔為你收集整理的语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原码 反码 补码 详解
- 下一篇: 4245: KI的斐波那契 递归