EM算法

目錄

一 樣例      

二 公式描述

三 參考文獻


          最大期望算法(Expectation-maximization algorithm,又譯爲期望最大化算法),是在概率模型中尋找參數最大似然估計或者最大後驗估計的算法,其中概率模型依賴於無法觀測的隱性變量。

          最大期望算法經過兩個步驟交替進行計算:

           第一步是計算期望(E),利用對隱藏變量的現有估計值,計算其最大似然估計值;

           第二步是最大化(M),最大化在E步上求得的最大似然值來計算參數的值。M步上找到的參數估計值被用於下一個E步計算中,這個過程不斷交替進行。

一 樣例      

        舉個例子,拋硬幣,有兩個硬幣,但是兩個硬幣的材質不同導致其出現正反面的概率不一樣,目前我們只有一組觀測數據,要求出每一種硬幣投擲時正面向上的概率。總共投了五輪,每輪投擲五次,現在先考慮一種簡單的情況,假設我們知道這每一輪用的是哪一個硬幣去投擲的:

 

        那麼我們拿着這樣的一組數據,就可以很輕鬆的估計出A硬幣和B硬幣出現正面的概率,如下:

        PA = (3+1+2)/ 15 = 0.4

        PB= (2+3)/10 = 0.5

        現在把問題變得複雜一點,假設我們不知道每一次投擲用的是哪一種硬幣,等於是現在的問題加上了一個隱變量,就是每一次選取的硬幣的種類。

 

        那麼現在可以想一想,假設我們把每一次硬幣的種類設爲z,則這五次實驗生成了一個5維的向量(z1,z2,z3,z4,z5),現在問題來了,如果我們要根據觀測結果去求出PA,PB,那麼首先需要知道z,但是如果用最大似然估計去估計z,又要先求出PA,PB。這就產生了一個循環。那麼這個時候EM算法的作用就體現出來了,EM算法的基本思想是:先初始化一個PA,PB,然後我們拿着這個初始化的PA,PB用最大似然概率估計出z,接下來有了z之後就用z去計算出在當前z的情況下的PA,PB是多少,然後不斷地重複這兩個步驟直到收斂。

        有了這個思想之後現在用這個思想來做一下這個例子,假設初始狀態下PA=0.2, PB=0.7,然後我們根據這個概率去估計出z:

 

        按照最大似然估計,z=(B,A,A,B,A),有了z之後我們反過來重新估計一下PA,PB:

         PA = (2+1+2)/15 = 0.33

         PB =(3+3)/10 = 0.6

        可以看到PA,PB的值已經更新了,假設PA,PB的真實值0.4和0.5,那麼你在不斷地重複這兩步你就會發現PA,PB在不斷地靠近這兩個真實值。

二 公式描述

        假設目標函數表示爲:

                                                                             L(\theta)=\prod_{j=1}^{N}P_\theta(y_i)

其中\theta爲概率分佈P_\theta(y)的參數,在沒有隱變量的情況下,我們求解L的最大值的套路是先對L取對數,將連乘的形式轉換成累加的形式,然後就可以對未知數\theta進行求導,只需要求得導數爲0的位置未知量的值即爲目標函數的極大值。但是,如果概率分佈中有隱變量存在時,我們用全概率公式把隱變量在上式中體現出來:

全概率公式:

P(B)=\sum_{i=1}^{n}P(A_i)P(B|A_i)

其中A需是一組完備事件組且都有正概率,則對任意B上式都成立。

                                                                 L(\theta)=\prod_{j=1}^{N}\sum_{z}P_\theta(z)P_\theta(y_i|z)

兩邊同時取對數ln:

                                                         lnL(\theta)=\sum_{j=1}^{N}ln\sum_{z}P_\theta(z)P_\theta(y_i|z)

從上式中可以看出,如果要按照之前的套路,那就需要對上式進行求偏導,但是由於ln中還包含了求和項,在偏導數中的形式將會非常複雜,而且很難求得解析解。因此需要找到一種辦法去求得解析解的近似解,這裏就引入了EM算法。爲了表述的方便性,在這裏用l(\theta)代表lnL(\theta),則:

                                              l(\theta)=\sum_{j=1}^{N}ln\sum_{z}P_\theta(z)P_\theta(y_i|z)

對於求解近似解,EM算法採用的是迭代的方式不斷地逼近真實值,假設第n次迭代的參數值爲\theta_n,第n+1次迭代的參數值爲\theta_{n+1},那麼其實只要滿足l(\theta_{n+1})>l(\theta_n)就可以不斷地進行迭代。現在假設我們已經進行到了第n次迭代,也就是說\theta_n目前是作爲已知的值,那麼來看一看l(\theta)-l(\theta_n)

l(\theta)-l(\theta_n)=\sum_{j=1}^{N}ln\sum_{Z}P_\theta(y_j|z)P_\theta(z)-\sum_{j=1}^{N}ln\sum_{Z}P_{\theta_n}(y_j|z)P_{\theta_n}(z)

由於這裏\theta_n是作爲常數的,因此右式中的第二項可以不用將隱變量體現出,化簡如下:

                    =\sum_{j=1}^{N}ln\sum_{Z}P_\theta(y_j|z)P_\theta(z)-\sum_{j=1}^{N}lnP_{\theta_n}(y_j)

                    =\sum_{j=1}^{N}\left [ ln\sum_{Z}P_\theta(y_j|z)P_\theta(z)-lnP_{\theta_n}(y_j)\right ]

上式中,其實只需要關注求和裏面的項就好了,做一個標註,記ln\sum_{Z}P_\theta(y_j|z)P_\theta(z)爲I項,記爲lnP_{\theta_n}(y_j)II項,接下來分別對這兩項進行化簡:

I項:

                   ln\sum_{Z}P_\theta(y_j|z)P_\theta(z)=ln\sum_{Z}P_\theta(y_j|z)\frac{P_{\theta_n}(z|y_j)P_\theta(z)}{P_{\theta_n}(z|y_j)}

上式中的變換是因爲\sum_{Z}P_{\theta_n}(z|y)=1

接下來還會用到Jensen不等式,Jensen不等式是這麼描述的:

假設f(x)爲凸函數,X是隨機變量,那麼:E[f(X)]>=f(E[X]),通俗的說法是函數的期望大於等於期望的函數。

特別地,如果f是嚴格凸函數,當且僅當 P\left( X=EX \right) =1 ,即 X 是常量時,上式取等號,即E\left[ f\left( X \right) \right] =f\left( EX \right),如下圖所示:

                                                clip_image019

 

 

再觀察一下I項,感覺有一些像能夠用Jensen不等式進行再一次的化簡,下面寫的直觀一點:

                          =ln\sum_{Z}P_\theta(y_j|z)\frac{P_{\theta_n}(z|y_j)P_\theta(z)}{P_{\theta_n}(z|y_j)}=ln\sum_{Z}P_{\theta_n}(z|y_j)\frac{P_\theta(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}

P_{\theta_n}(y_j)當成X,那麼上式\sum_{Z}P_{\theta_n}(z|y_j)\frac{P_\theta(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}就是EX,又因爲ln函數是凹函數,所以根據Jensen不等式有f(E[X])>=E[f(X)],則

                    ln\sum_{Z}P_{\theta_n}(z|y_j)\frac{P_\theta(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}\geqslant \sum_{Z}P_{\theta_n}(z|y_j)ln\frac{P_{\theta}(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}

II項:

                    lnP_{\theta_n}(y_j)=\left [ lnP_{\theta_n}(y_j) \right ]\cdot \sum_{Z}P_{\theta_n}(z|y_j)

                                     = \sum_{Z}P_{\theta_n}(z|y_j) lnP_{\theta_n}(y_j)

然後再把I-II合併起來看一下:

I-II\geqslant \sum_{j=1}^{N}\left [ \sum_{Z}P_{\theta_n}(z|y_j)ln\frac{P_{\theta}(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}-\sum_{Z}P_{\theta_n}(z|y_j) lnP_{\theta_n}(y_j) \right]

            =\sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)}-lnP_{\theta_n}(y_j) \right ]

           =\sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j|z)P_\theta(z)}{P_{\theta_n}(z|y_j)P_{\theta_n}(y_j)} \right ]

           =\sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j,z)}{P_{\theta_n}(z,y_j)} \right ]

將上式代回l(\theta)-l(\theta_n)

l(\theta)-l(\theta_n)\geqslant \sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j,z)}{P_{\theta_n}(z,y_j)} \right ]

l(\theta)\geqslant \sum_{j=1}^{N}\sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j,z)}{P_{\theta_n}(z,y_j)} \right ]+l(\theta_n)

將右邊的這一大串記爲Q(\theta|\theta_n),稱爲下邊界函數,EM算法的目的是要取得目標函數的極大值,那麼可以通過不斷地提升下邊界函數值來不斷地提升目標函數的值,接下來,再看一下Q(\theta|\theta_n),將其化簡爲便於優化迭代的形式:

                                        Q(\theta|\theta_n)=l(\theta_n)+ \sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) \left[ ln\frac{P_{\theta}(y_j,z)}{P_{\theta_n}(z,y_j)} \right ]

可以看到在等式的右邊,由於我們之前的假設是\theta_n是已知的,那麼把已知量和未知量分開:

 

                                                     = \sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) lnP_{\theta}(y_j,z)+l(\theta_n) -\sum_{j=1}^{N} \sum_{Z}P_{\theta_n}(z|y_j) lnP_{\theta_n}(z,y_j)

上式中,等號右邊的第一項中帶未知項,第二項和第三項都是常數,所以接下來的過程就簡單了,我們只要對這個式子求偏導\frac{\partial Q(\theta|\theta_n)}{\partial \theta}=0,求得此時取極大值時\theta的取值,這個值就是進入到下一步迭代是的概率分佈參數值\theta_{n+1},有了\theta_{n+1}之後就可以獲得Q(\theta|\theta_{n+1}),然後不斷地迭代直到收斂。圖示的話如下:

 

三 參考文獻

1. 如何通俗理解EM算法

 

 

 

 

 

 

 

 

 

 

 

 

                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">點贊</span>
                    <span class="count">17</span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打賞開始-->
                                            <!--打賞結束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章舉報</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/u010834867">
                <img src="https://profile.csdnimg.cn/5/5/9/3_u010834867" class="avatar_pic" username="u010834867">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/1x/7.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/u010834867" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">Tuzi_bo</a></span>
                                        </div>
                <div class="text"><span>發佈了22 篇原創文章</span> · <span>獲贊 29</span> · <span>訪問量 2萬+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://im.csdn.net/im/main.html?userName=u010834867" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">關注</a>
                                </div>
                        </div>
                </div>
發佈了90 篇原創文章 · 獲贊 37 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章