09_EM演算法

十八線碼農ing發表於2020-06-06

  今天是2020年3月5日星期四。預計開學時間不會早於四月初,真是好訊息,可以有大把的時間整理知識點(實際上發文章的時間都6月6號了,希望9月份能開學啊,不耽誤找工作~)。每次導師找,整個人會變的特別煩躁,煩躁加不安,其它事情一點都做不下去,焦慮。改小論文這幾天耽誤了一些時間,查了些EM演算法的例子,怎樣理解這個演算法呢?通過這周的學習,覺得數學公式有點唬人,但卻是理解該演算法最好的形式。

  剛開始對這個演算法一無所知,通過知乎、CSDN看資料,看白板視訊,看講解例子。越看例子越覺得負擔重,因為要先把例子理解了,再去理解這個知識點。例子不能徹底理解,知識點也走不下去,倒不如一遍一遍的看數學公式。看完了公式,再去看例子,朦朦朧朧的就懂了。之後再去看白板視訊,絕對是不一樣的體驗。

  先看別人的視訊,然後自己去推導公式,你會覺得困難摸不到頭腦;先自己去推導公式,再去看別人視訊,你會覺得心曠神怡一目瞭然。第一種做法,往往看視訊的時候就是懵懵噠,抓不住別人講述的重點;第二種做法,類似於先學會了九陽神功,再去和別人切磋武藝。初心是將《統計學習方法》這本書做詳細的心得筆記,現在有點鬆動,希望能堅持下去。


 GitHub:https://github.com/wangzycloud/statistical-learning-method


 EM演算法

引入

  EM演算法應該作為一種通用的求解方法,用於含有隱變數的概率模型引數的極大似然估計。拆開來看,這句話是應用在概率模型上的;用來估計概率模型的引數;類似於極大似然估計;求解的是含有隱變數的概率模型。那麼問題來了,什麼是該有隱變數的概率模型?概率模型是什麼樣子?極大似然估計?該方法是怎麼進行計算的呢?

  通常來講,EM演算法是一種迭代演算法,每次迭代由兩步組成:E步,求期望;M步:求極大,所以該演算法被稱為期望極大演算法。說該演算法可以作為一種通用的求解方法,原因在於:該演算法不是NBM、LR、SVM這類解決相應場景的模型,而是可以用於求解含有隱變數概率模型的引數估計。

  提到模型,腦子裡第一印象有判別模型、生成模型。這裡的概率模型自然和判別模型、生成模型不在同一個層次。在我的理解裡,概率模型是類似於樸素貝葉斯演算法這種,用概率來表示最後的分類標準;而不是感知機、SVM這種利用確信度來表達分類結果的模型。再考慮一下樸素貝葉斯演算法,特徵向量裡的隨機變數X,以及表示類別的隨機變數Y,都是可以被觀測到變數。在所有隨機變數都可以觀測到的情況下,我們可以利用極大似然估計來求解模型的引數。對於含有隱變數的概率模型,要如何求解呢?含有隱變數意味著不能觀測到資料的全部狀況,也就沒有辦法直接利用極大似然估計來求解。

  現在看到的EM演算法,就是一種求解含有隱變數的概率模型引數的極大似然估計方法。

EM演算法

  書本上三硬幣模型,挺好的~程式碼已整理到github中,實際上就是把書本公式用程式碼實現出來...難度不大。

   文中提到,該問題沒有解析解,只有通過迭代的方法進行求解。仔細觀察一下公式(9.4),log(x)作用在公式(9.3)上,很明顯log連乘可以變成連加,但連加式子中的每個項仍然是連加式。好像是因為這個原因,就無法得到解析解了。個人對數學不感冒,只能硬性的記住“不容易求解析解”這點,至於原因,實在是搞不懂啊。雖然無法得到解析解,但我們可以通過EM演算法求解,大致步驟如下:

   一般的,用Y表示觀測隨機變數的資料,Z表示隱隨機變數的資料,Y和Z連在一起稱為完全資料,觀測資料Y又稱為不完全資料。假設給定觀測資料Y,其概率分佈是P(Y|θ),其中θ是需要估計的模型引數,那麼不完全資料Y的似然函式是P(Y|θ),對數似然函式L(θ)=logP(Y|θ),假設Y和Z的聯合概率分佈是P(Y,Z|θ),那麼完全資料的對數似然函式是logP(Y,Z|θ)。

  EM演算法通過迭代求解L(θ)=logP(Y|θ)的極大似然估計,每次迭代由兩個步驟:E步,M步組成。

  文中對Q函式做了具體解釋:

   關於EM演算法的幾點說明,應該挺好理解的吧。步驟(1),迭代求解的方式需要一步步接近極值,是在某個解的基礎上,進一步求解。在最開始的時候,初值是任意選擇的,並且正是因為初值任意選擇,容易陷入區域性極值,也就是對初值的選擇非常敏感(對比一下梯度下降的過程)。步驟(2),我們要清楚,求解的物件是變元引數θ。步驟(3),極大化的過程,詳見下圖~(θ,L(θ))影像。步驟(4),迭代停止條件。

  EM演算法的匯出、收斂性,以及推廣詳見下圖吧~搞了四五天,弄了個流程...

GMM高斯混合模型

   書中公式一大堆,不太友好,手寫程式碼的過程,就是把書本公式復現了一遍。難度不大,我認為需要先了解GMM模型是啥,再通過例子,熟悉一下計算過程,就可以掌握了。

  還是從生成資料的角度看,由GMM模型生成一個資料,是要根據一個普通的多項式分佈αk,來選擇第k個高斯分佈,分兩步生成資料。但是,這裡獲得的資料,並不知道來自第幾個αk,這就是隱變數了。

   對於高斯混合模型的引數估計,可以通過EM演算法求解。

  1.明確隱變數,寫出完全資料的對數似然函式。

  2.EM演算法的E步:確定Q函式。

  3.確定EM演算法的M步。

  具體公式(9.26)-公式(9.32)就不一一摘錄了,github已復現。演算法描述如下:

  本節整理的內容有些水...

相關文章