您當前的位置:首頁 > 收藏

一文說懂EM演算法及其在HMM和GMM中的應用

作者:由 一隻懶羊 發表于 收藏時間:2020-07-15

一、EM演算法要解決的問題

EM演算法就是最大期望演算法,用於解決無法觀測隱性變數的機率模型求引數的問題。這句話是什麼意思呢?舉個例子,如果一個學校只有男生,假設男生身高符合正態分佈,此時需要根據統計得到的男生身高計算出正態分佈模型中的均值和方差,那麼我們可以直接計算。但是如果學校既有男生也有女生,而且因為統計時的疏漏,無法區分統計的身高是男生還是女生的身高,此時要計算模型引數,就需要EM演算法了。

EM演算法依舊透過最大似然估計法來計算機率模型的引數。如果我們知道在狀態z下導致事件y發生的機率,那麼我們在計算事件的最大機率時,可以把表示式寫為:

l(\theta)=log P(y,z|\theta)=log[P(z|\theta)P(y|z,\theta)]=logP(z|\theta)+logP(y|z,\theta)

然後令其求導=0的方式求出

\theta

,也就是求事件發生的機率最大時的引數。但是如果有多個狀態都可能導致事件y,而我們沒法確定到底每一件狀態導致了事件y,那麼我們該如何計算這個引數使得事情發生的機率最大呢?我們可以將表示式寫成:

l(\theta)=log P(y|\theta)=log\sum_{z}^{}{P(y|z,\theta)}=log\sum_{z}^{}{P(z|\theta)P(y|z,\theta)}

之所以是求和符號,就是因為希望透過求Y的邊緣函式表示其機率。

l(\theta)=log P(Y|\theta)=\prod_{i=1}^{N}log P(y_{i}|\theta)=\prod_{i=1}^{N}log\sum_{j=1}^{k}{P(y_{i}|z_{ij},\theta)}=\prod_{i=1}^{N}log\sum_{j=1}^{k}{P(z_{ij}|\theta)P(y_{i}|z_{ij},\theta)}

二、EM演算法的E步是怎麼得出的?

我們在使用EM演算法計算時,常規步驟通常為E步設立公式,然後M步求導,得到引數值再代入E步的公式,如此反覆計算。可是我們E步中的公式是怎麼來的呢?下面就進行解釋

因為不知道

P(z|\theta)

,我們沒有辦法直接求得

\theta

。但是我們發現

l(\theta)

是單調遞增的,而且有上限(因為機率在0到1之間),那麼就可以得知

l(\theta)

會收斂到某一個值,那麼就意味雖然不能求出最優解,但是我們可以先隨意初始化一個

\theta

,然後透過不斷最佳化

\theta

使得

l(\theta)

不斷的變大,最終達到收斂狀態,得到其下界以及這個下界對應的引數

\theta

。既然如此,那麼就應該滿足

l(\theta)-l(\theta_{i})>=0

。我們來看它們的差值:

l(\theta)-l(\theta_{i})= log\sum_{z}^{}{P(z|\theta)P(y|z,\theta)}-log P(y|\theta_{i})\\ = log\sum_{z}^{}{P(z|y,\theta_{i})\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})}}-log P(y|\theta_{i})\\

由於log中帶有求和函式,使得式子難以處理,所以我們利用琴生不等式來對前半部分縮放。所謂琴生不等式就是:

一文說懂EM演算法及其在HMM和GMM中的應用

經過不等式變換可得:

\begin{align} &l(\theta)-l(\theta_{i})>=\sum_{z}^{}{P(z|y,\theta_{i})log\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})}}-log P(y|\theta_{i})\\  & l(\theta)-l(\theta_{i})>= \sum_{z}^{}{P(z|y,\theta_{i})log\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})}}-\sum_{z}^{}P(z|y,\theta_{i})log P(y|\theta_{i})\\  & l(\theta)-l(\theta_{i})>=\sum_{z}^{}{P(z|y,\theta_{i})log\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})P(y|\theta_{i})}} \end{align}

注意後半部分之所以可以加上

\sum_{z}^{}{P(z|y,\theta_{i})}

,是因為它的和為1,而且

logP(y|\theta_{i})

是一個常數。我們將公式稍作變形:

l(\theta)>=l(\theta_{i})+\sum_{z}^{}{P(z|y,\theta_{i})log\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})P(y|\theta_{i})}}=B(\theta,\theta_{i})

雖然我們無法直接求

l(\theta)

,但是可以不斷的增大

B(\theta,\theta_{i})

來逼近

l(\theta)

。如果我們將

\theta

取值為上一次迭代的值

\theta_{i}

,那麼:

B(\theta_{i},\theta_{i})=l(\theta_{i}),因為\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})P(y|\theta_{i})}=1,log1=0

逼近的效果如下圖所示:

一文說懂EM演算法及其在HMM和GMM中的應用

也就是說,我們要求一個引數,使得B最大,最接近原來的機率,即

\begin{align}\\ &\theta_{i+1}=arg\max_{\theta}B(\theta,\theta_{i})\\ &=arg\max_{\theta}[l(\theta_{i})+\sum_{z}^{}{P(z|y,\theta_{i})log\frac{P(y|z,\theta)P(z|\theta)}{P(z|y,\theta_{i})P(y|\theta_{i})}}]\\ &\simeq arg\max_{\theta}[\sum_{z}^{}{P(z|y,\theta_{i})log{P(y|z,\theta)P(z|\theta)}}]\\ &=arg\max_{\theta}[\sum_{z}^{}{P(z|y,\theta_{i})log{P(y,z|\theta)}}]\\ &=arg\max_{\theta}E_{Z\sim P(z|y,\theta_{i})}log{P(y,z|\theta)}\\ &=arg\max_{\theta}Q(\theta,\theta_{i}) \end{align}\\

在這個過程中,我們去掉常量,發現要想求得最大機率,最終只和在上一個引數

\theta_{i}

背景下的機率分佈(即已知事件y發生,判斷z是哪種隱狀態的機率)和現有的事件發生的機率有關。

這就是為什麼我們使用EM演算法,一開始計算期望時就用

\sum_{z}^{}{P(z|y,\theta_{i})log{P(y,z|\theta)}}

來計算的原因!而我們回頭看,整個公式最為關鍵的地方就是為前半部分式子添加了

P(z|y,\theta_{i})

,為下面的合併兩項奠定了基礎。

三、EM演算法在求解HMM和GMM中的求解

3.1 EM演算法在拋硬幣模型中的引數求解過程

問題背景是如果有三枚硬幣abc,他們出現正面的機率分別為π,p,q,我們先拋擲a硬幣,如果是正面,則用b拋擲,如果是反面,則用c拋擲,然後記錄下b或者c丟擲來的結果。現在得到觀測結果為1、1、0、1、0、0、1、0、1、1。問如何估計三個硬幣正面出現的機率,即三硬幣模型的引數。

注意每一次的拋擲結果是獨立的,所以事件的總機率是各個事件的連乘。由於我們要求的完全資料對數似然函式明確,因此我們直接進入到E步,得到事情最大機率的表示式:

\begin{align} Q(\theta,\theta_{i})&=\sum_{z}^{}  P(z_{j}|Y,\theta_{i}) log{P(Y,z_{j}|\theta)}\\ &=\sum_{z}^{}  [\prod_{j=1}^{N}  {P(z_{j}|y_{j},\theta_{i})][log\prod_{j=1}^{N} {P(y_{j},z_{j}|\theta)}}     ]\\ &=\sum_{z}^{} [\prod_{j=1}^{N}  P(z_{j}|y_{j},\theta_{i})] [\sum_{j=1}^{N}P(y_{j},z_{j}|\theta)]\\ &=\sum_{z}^{}  A B \end{align}

我們僅看B這一項,將其分解成兩部分,第一部分是第一項,第二部分是2到N項,計算可得:

\begin{align} Q(\theta,\theta_{i})&=\sum_{z}^{} [\prod_{j=1}^{N}  P(z_{j}|y_{j},\theta_{i}) logP(y_{1},z_{1}|\theta)]+ \sum_{z}^{} [\prod_{j=1}^{N}  P(z_{j}|y_{j},\theta_{i}) \sum_{j=2}^{N}logP(y_{j},z_{j}|\theta)]\\ &=C+D  \end{align}

我們發現D中的項也可以分解為N-1項形式如C的式子,因此我們只考慮C即可。Z代表的是選擇哪一枚硬幣,我們考慮其中一枚硬幣,其中每一個硬幣又都有兩種狀態,就是正面和反面。

\begin{align} C&=\sum_{z_{1……n}}^{} [\prod_{j=1}^{N}  P(z_{j}|y_{j},\theta_{i}) logP(y_{1},z_{1}|\theta)] \quad (1)\\ &=\sum_{z_{1……n}}^{} [\prod_{j=2}^{N}  P(z_{j}|y_{j},\theta_{i}) P(z_{1}|y_{1},\theta_{i}) logP(y_{1},z_{1}|\theta)]=\sum_{z_{1……n}}^{} [\prod_{j=2}^{N}EFG]    \quad (2)\\ &=\sum_{z_{2……n}}^{} [\prod_{j=2}^{N}  P(z_{j}|y_{j},\theta_{i}) P(z_{1}=0|y_{1},\theta_{i}) logP(y_{1},z_{1}=0|\theta)]+\sum_{z_{1……n}}^{} [\prod_{j=2}^{N}  P(z_{j}|y_{j},\theta_{i}) P(z_{1}=1|y_{1},\theta_{i}) logP(y_{1},z_{1}=1|\theta)]         \quad (3)\\ &=[P(z_{1}=0|y_{1},\theta_{i}) logP(y_{1},z_{1}=0|\theta)+P(z_{1}=1|y_{1},\theta_{i}) logP(y_{1},z_{1}=1|\theta)]\sum_{z_{2……n}}^{} [\prod_{j=2}^{N}P(z_{j}|y_{j},\theta_{i})         \quad (4)\\ &=\sum_{z_{1}}^{}{P(z_{1}|y_{1},\theta_{i})  logP(y_{1},z_{1}|\theta)}   \sum_{z_{2……n}}^{} [\prod_{j=2}^{N}P(z_{j}|y_{j},\theta_{i})   \quad (5)\\ &=\sum_{z_{1}}^{}{P(z_{1}|y_{1},\theta_{i})  logP(y_{1},z_{1}|\theta)}   \quad (6) \end{align}

其實第二步最為關鍵,因為將累乘符號分解以後,(2)中的F和G有關,而E則和G無關,又因為E是指硬幣z在不同取值下的機率,其實等於1,這樣n-1個1累乘法依然是1,所以最終得到(6)這一表達式。

我們知道

Q(\theta,\theta_{i})

可以分解成C+D,而每一個C都會得到類似(6)中的表示式,那麼

Q(\theta,\theta_{i})

的表示式可以表示成:

\begin{align} Q(\theta,\theta_{i}) &=\sum_{z_{1}}^{}{P(z_{1}|y_{1},\theta_{i})  logP(y_{1},z_{1}|\theta)}  +\sum_{z_{2}}^{}{P(z_{2}|y_{2},\theta_{i})  logP(y_{2},z_{2}|\theta)} +……+\sum_{z_{n}}^{}{P(z_{n}|y_{n},\theta_{i})  logP(y_{n},z_{n}|\theta)} \\ &=\sum_{j=1}^{N}  [{\sum_{z_{j}}^{}{P(z_{j}|y_{j},\theta_{i})  logP(y_{j},z_{j}|\theta)}]  }  \\ &=\sum_{j=1}^{N} [P(z_{j}=1|y_{j},\theta_{i})lnP(y_{j},z_{j}=1|\theta)  + P(z_{j}=0|y_{j},\theta_{i})lnP(y_{j},z_{j}=0|\theta)] \end{align}

我們回過頭來梳理一下思路,看看這些符號都代表什麼意思,z表示隱狀態,也就是硬幣A丟擲來的結果,是未知的,而y表示最終看到的觀測結果。

最後進行M步,在上面我們可以用π、p、q表示

P(z_{j}=1|y_{j},\theta_{i})

P(z_{j}=0|y_{j},\theta_{i})

,也就是π、p、q和這兩個機率值的關係式。透過對π、p、q初始化一個比較合理的值,計算出第一個事件中的這兩個機率,表示式如下:

一文說懂EM演算法及其在HMM和GMM中的應用

然後分別對π、p、q求導,比如對π的求導公式為:

一文說懂EM演算法及其在HMM和GMM中的應用

利用剛才算得的

\mu_{j}^{i+1}

,計算π、p、q。然後再計算下一個事件中的

\mu_{j}^{}

,不斷迭代,使得π、p、q的值不斷收斂。

3。2 EM演算法在GMM模型中的引數求解過程

GMM模型就是高斯混合模型,具有如下形式的機率分佈:

一文說懂EM演算法及其在HMM和GMM中的應用

用文章開頭男女生身高的例子來理解,假設觀測資料y_j,j=1,2,…,N是這麼生成的:依據機率

\alpha_{k}

選擇使用男生還是女生的高斯分佈模型,即選擇第k個高斯分佈模型ϕ(y|θ_k),然後使用第k個分模型的機率分佈生成觀測資料y_j。

第一步,確定隱變數和完全資料的對數似然函式。對於觀測資料y_j,定義k個隱變數:

一文說懂EM演算法及其在HMM和GMM中的應用

在這裡,之所以要將隱變數定義成這種形式,是為了統一使用

P(y|\theta)^{\lambda_{jk}}

這種指數形式來表達在第j次觀測中(或者說事件)由第k個模型生成的機率,否則就要把每一個事件的生成機率寫出來,然後再乘起來,這會顯得很累贅,而且不方便對公式進行變形。

一文說懂EM演算法及其在HMM和GMM中的應用

第二步,套用EM演算法的E步,可得:

Q(\theta,\theta_{i})=E_{\gamma\sim P(\gamma|y,\theta_{i})}log{P(y,\gamma|\theta)}

。代入上面公式可得:

一文說懂EM演算法及其在HMM和GMM中的應用

因為

\gamma_{jk}

取值為1或者0,那麼

E\gamma_{jk}

只需要處理

\gamma_{jk}

取值為1的情況,而無需處理

\gamma_{jk}

為0的情況,因此:

一文說懂EM演算法及其在HMM和GMM中的應用

接下來計算M步,透過分別對

\mu_{k}^{}、\sigma_{k}^{2}、\alpha_{k}^{}

求導,令其等於0,可以得到下面的式子,其中響應度的計算可以透過對引數的取初始值得到,再將計算結果代入下式:

一文說懂EM演算法及其在HMM和GMM中的應用

然後利用

\mu_{k}^{}、\sigma_{k}^{2}、\alpha_{k}^{}

重新計算得到響應度

\gamma_{jk}^{}

,反覆迭代。

3.3 EM演算法在HMM模型中對機率學習問題的應用

我們知道HMM模型需要解決三個問題,分別是機率計算問題、機率學習問題和狀態預測問題。EM演算法解決的就是無監督的機率學習問題,學習問題是指已知觀測序列,估計模型

\lambda

(π、A、B)的引數,使得模型觀測序列機率

P(O|\lambda)=\sum_{I}^{}{P(O|I,\lambda)P(I|\lambda)}

最大。

老規矩,先確定完全資料的對數似然函式,觀測資料

O=\{O_{1},O_{2},……,O_{T}\}

,隱變數

I=\{I_{1},I_{2},……,I_{T}\}

,完全資料

(O,I)=\{O_{1},O_{2},……,O_{T}I_{1},I_{2},……,I_{T}\}

,完全資料的對數似然函式是

logP(O|\lambda)

接下來設立E步函式:

一文說懂EM演算法及其在HMM和GMM中的應用

最後M步極大化Q函式:

一文說懂EM演算法及其在HMM和GMM中的應用

同理可以對矩陣A和矩陣B中的每一項求解,得到:

一文說懂EM演算法及其在HMM和GMM中的應用

透過這幾個例子,我想應該能理解演算法是如何輔助模型來求解的。計算過程確實非常複雜,一度讓我感到奔潰,再加上這麼多的公式輸入,也很損耗耐心。但是不深入具體過程,就沒法理解EM演算法是如何起作用的,又適用於什麼場景。

耐心、耐心再耐心!

耐心拯救小羊!希望也能對你有所幫助。

標簽: 機率  Em  演算法  模型  我們