目錄
最大期望算法(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的最大值的套路是先對L取對數,將連乘的形式轉換成累加的形式,然後就可以對未知數進行求導,只需要求得導數爲0的位置未知量的值即爲目標函數的極大值。但是,如果概率分佈中有隱變量存在時,我們用全概率公式把隱變量在上式中體現出來:
全概率公式:
其中A需是一組完備事件組且都有正概率,則對任意B上式都成立。
兩邊同時取對數ln:
從上式中可以看出,如果要按照之前的套路,那就需要對上式進行求偏導,但是由於ln中還包含了求和項,在偏導數中的形式將會非常複雜,而且很難求得解析解。因此需要找到一種辦法去求得解析解的近似解,這裏就引入了EM算法。爲了表述的方便性,在這裏用代表,則:
對於求解近似解,EM算法採用的是迭代的方式不斷地逼近真實值,假設第n次迭代的參數值爲,第n+1次迭代的參數值爲,那麼其實只要滿足就可以不斷地進行迭代。現在假設我們已經進行到了第n次迭代,也就是說目前是作爲已知的值,那麼來看一看
由於這裏是作爲常數的,因此右式中的第二項可以不用將隱變量體現出,化簡如下:
上式中,其實只需要關注求和裏面的項就好了,做一個標註,記爲I項,記爲II項,接下來分別對這兩項進行化簡:
I項:
上式中的變換是因爲
接下來還會用到Jensen不等式,Jensen不等式是這麼描述的:
假設f(x)爲凸函數,X是隨機變量,那麼:E[f(X)]>=f(E[X]),通俗的說法是函數的期望大於等於期望的函數。
特別地,如果f是嚴格凸函數,當且僅當 ,即 是常量時,上式取等號,即,如下圖所示:
再觀察一下I項,感覺有一些像能夠用Jensen不等式進行再一次的化簡,下面寫的直觀一點:
把當成X,那麼上式就是EX,又因爲ln函數是凹函數,所以根據Jensen不等式有f(E[X])>=E[f(X)],則
II項:
然後再把I-II合併起來看一下:
將上式代回,
將右邊的這一大串記爲,稱爲下邊界函數,EM算法的目的是要取得目標函數的極大值,那麼可以通過不斷地提升下邊界函數值來不斷地提升目標函數的值,接下來,再看一下,將其化簡爲便於優化迭代的形式:
可以看到在等式的右邊,由於我們之前的假設是是已知的,那麼把已知量和未知量分開:
上式中,等號右邊的第一項中帶未知項,第二項和第三項都是常數,所以接下來的過程就簡單了,我們只要對這個式子求偏導,求得此時取極大值時的取值,這個值就是進入到下一步迭代是的概率分佈參數值,有了之後就可以獲得,然後不斷地迭代直到收斂。圖示的話如下:
三 參考文獻
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="{"mod":"popu_824"}"><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="{"mod":"popu_379"}" 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="{"mod":"popu_379"}">關注</a>
</div>
</div>
</div>