1. 程式人生 > >EM演算法通俗解釋

EM演算法通俗解釋

前言

  EM演算法大家應該都耳熟能詳了,不過很多關於演算法的介紹都有很多公式。當然嚴格的證明肯定少不了公式,不過推公式也是得建立在瞭解概念的基礎上是吧。所以本文就試圖以比較直觀的方式談下對EM演算法的理解,儘量不引入推導和證明,希望可以有助理解演算法的思路。

介紹

  EM方法是專門為優化似然函式設計的一種優化演算法。它的主要應用場景是在用缺失資料訓練模型時。由於資料的缺失,我們只能把似然函式在這些缺失資料上邊緣化,這就造成帶有缺失值的似然函式具有多個完備資料似然函式之和的形式。這種求和造成兩個後果:一是本來可能因子分解的形式被打破(本來獨立的變數耦合在一起了),二是本來具有的凸性被打破(加法運算不具有保凸性)。因此,優化帶有缺失值的似然函式一般是一個高維的非凸優化問題,換句話說就是比較難的問題。


  EM演算法的思路基於以下觀察:

  • 在給定模型引數的情況下,執行推理比較簡單
  • 在給定完備資料的情況下,執行極大似然優化也比較簡單

  不幸的是,帶有缺失值的似然函式以上兩個條件都不滿足。因此,EM演算法採用了一種自舉(bootstrap)的方式來進行逐步優化:


1. 任選一組模型引數,執行推理,得到各個缺失值的概率分佈,然後認為一個缺失值是由所有可能的觀測值組成的,每個觀測值的權重為其概率。這樣我們就把缺失資料的問題轉換成了完備資料的問題。這一步稱作E步。

  關於E步,可以舉一個簡單的例子。

  比如我們想優化似然函式\(P(x,y,z|\mathbf{\theta})\),但是資料有一個缺失值\(x=0,y=1,z=?\)。我們可以這麼處理:

  通過任選一組\(\mathbf{\theta}=\mathbf{\theta}_0\),我們推理得出\(P(z=0|x=0,y=1,\mathbf{\theta}_0)=0.3\),\(P(z=1|x=0,y=1,\mathbf{\theta}_0)=0.7\)。

  據此我們可以認為這個缺失資料是由0.3個\(x=0,y=1,z=0\)和0.7個\(x=0,y=1,z=1\)組成的,這樣就完成了缺失資料的補全。

  現在,似然函式可以表示為:

\(P(x=0,y=1,z=?|\mathbf{\theta})=0.3P(x=0,y=1,z=0|\mathbf{\theta})+0.7P(x=0,y=1,z=1|\mathbf{\theta})=E_z[P(x=0,y=1,z=?|\mathbf{\theta})]\)

  可見新的似然函式就是對帶有缺失值的似然函式關於缺失資料求期望而來,這也是E步名稱的由來。

2. 對於E步得到的似然函式,已經沒有缺失值了,所以可以執行一次對完整資料的極大似然優化,對模型引數進行更新。

EM演算法就是迴圈執行步驟12,不斷逼近某個區域性極值的過程。可以證明EM演算法每步都更接近區域性極值,就是所謂的“爬山”過程


注意在執行步驟2時,似然函式=所有資料點的似然函式之積,對於缺失值,改為用


先把缺失資料填充上, 執行步驟1,得到模型引數;然後用得到的模型引數執行步驟2,得到缺失值的資料...如此反覆迭代,以實現優化的目的。
可以證明EM演算法的每一步都是往更好的結果走,因此可以實現優化的目的。