寫這篇博文用了不少時間和精力,若是這篇博文對你有幫助,但願您能夠打賞給博主相國大人。哪怕只捐1毛錢,也是一種心意。經過這樣的方式,也能夠培養整個行業的知識產權意識。我能夠和您創建更多的聯繫,而且在相關領域提供給您更多的資料和技術支持。
html
賞金將用於拉薩兒童圖書公益募捐
手機掃一掃,便可:
附:《春天裏,咱們的拉薩兒童圖書館,須要你們的幫助》python
博主博文推薦:
若是你但願可以對python有更多的掌握,能夠參考博主的系列博文
《python高手的自修課》git
1.機率論基礎:你沒見過的機率
這一部份內容與EM算法並無太大的關係,若是你不想多學點兒東西,能夠直接跳過。寫這一部分主要緣由是:不少學生最開始接觸EM算法是經過李航博士的《統計學系方法》這本書,然而,李航博士在這本書中的推導,用的書寫格式過於專業,所以,若是你不瞭解本一部份內容,可能閱讀這本書會遇到障礙。另外一方面,咱們閱讀的不少論文,都存在這樣的障礙,若是你對這一部分已經有了很好的理解,這將會爲你掃清很大的障礙。github
1.1約定:
P(α1∩α2∩...∩αk)
與
P(α1,α2,...,αk)
同樣,都表示
(α1,α2...αk)
的聯合機率。
請不要忽略這句話的存在,從此看各類文獻焦頭爛額時,或許你纔會體會到這句話真正的價值。來看一組練習:
web
P(α|β,γ)⇔P(α|β∩γ)⇔P(α|β)(在事件(參數)β的背景(條件)下)
P(α,β|γ)⇔P(α∩β|γ)⇔P(α∩β)orP(α,β)在事件(參數)γ的背景(條件)下
Note:
你須要自如的對這些進行無障礙的轉換,由於在不一樣的論文,教材中,做者的書寫習慣都不相同(就像上面兩個式子中的第1個和第2個)。在接下來的環節中,爲了鍛鍊這種自如轉換的能力,我在下面的公式中,將隨機採用上面的某一種表達形式。
你要學會自如地作這樣的變化。在閱讀某些文獻的時候,公式推導可能很是複雜,書寫也很是繁瑣,爲了便於理解和分析,你能夠試着把都有的背景條件去掉(就像上面兩個式子中的第3個),這樣式子就會大大簡化。算法
1.2鏈式法則:
P(α1∩α2∩...∩αk)=P(α1)P(α2|α1)P(α3|α1∩α2)...P(αk|α1∩α2∩α3∩...∩αk−1)
1.3貝葉斯定理
貝葉斯(你知道的版本):編程
P(α|β)=P(β|α)P(α)P(β)
貝葉斯(你不知道的版本):
P(α|β∩γ)=P(β|α∩γ)P(α∩γ)P(β∩γ)
其中全部的機率均以某個背景事件
γ
爲條件。固然也能夠這樣寫:
P(α|β,γ)=P(β|α,γ)P(α,γ)P(β,γ)
1.4獨立性
第一種定義:假如
P(α|β)=P(α)orP(β)=0
,則稱
α
與
β
獨立。記做:
P⊨(α⊥β)
簡寫爲
(α⊥β)
第二種定義:分佈
P
知足
(α⊥β)
當且僅當
P(α∩β)=P(α)P(β)
網絡
1.5條件獨立
把上一節的獨立性定義中,都加上一個共同的背景條件,就變成了條件獨立性。例如:
第一種定義:假如
P(α|β,γ)=P(α|γ)orP(β∩γ)=0
,則稱
α
與
β
在給定事件
γ
時,在分佈
P
中條件獨立獨立。記做:
P⊨(α⊥β|γ)
簡寫爲
(α⊥β|γ)
第二種定義:分佈
P
知足
(α⊥β|γ)
當且僅當
P(α∩β|γ)=P(α|γ)P(β|γ)
app
條件獨立有什麼實際意義呢?事實上,在現實生活中,咱們不多會碰到兩個相互獨立的事件。一種更爲廣泛的狀況是,兩個事件在給定額外事件的條件下獨立。例如,假定要推理某學生被東南大學(SEU)或者南京大學(NU)錄取爲研究生的機會。在許多合理的分佈中,這兩個事件並不獨立。由於,若是已知一個學生已經被南京大學錄取,那麼咱們對他被東南大學錄取的機率估計就會提升。由於他被南京大學錄取說明他是一個比較有前途的學生。
如今,假定這兩所大學都只根據本科成績GRAD作決定,且只根據這個作決定。而且已知學生的本科成績是A,那麼在這種狀況下,咱們發現,已知這個學生被南京大學錄取並不會改變他被東南大學錄取的機率。由於兩個學校都只根據GRAD來錄取。也就是說,他的成績已經顯示出他被東南大學錄取的相關信息,而且他被南京大學錄取的事實並不會改變現狀。用公式表示爲:dom
P(SEU|NU,GRAD)=P(SEU|GRAD=A)
對於這種狀況,咱們就說,在給定
GRAD=A
的條件下,
SEU
與
NU
條件獨立。
1.6隨機變量獨立性性質
1.6.1對稱
(X⊥Y|Z)⇒(Y⊥X|Z)
1.6.2分解
(X⊥Y,W|Z)⇒(X⊥Y|Z)
這個式子看糊塗了沒?看糊塗的話,請返回第1小結的
Note。
接下來,相國大人帶你分析這玩意兒吧:
原式至關於(非嚴格):
(X⊥(Y∩W))⇒(X⊥Y)
意思就是說,
X
與兩個事件的聯合獨立,則其與聯合中任何一個份量都獨立。
WHY?
證實(這裏把
W
寫成了
M
,筆誤):
1.6.3弱聯合
(X⊥Y,W|Z)⇒(X⊥Y|Z,W)
又看不懂了?請返回第1小結的
Note
接下來,相國大人帶你分析這玩意兒吧:
(X⊥Y,W)⇒(X⊥Y|W)
證實:
1.6.4收縮
(X⊥W|Z,Y)∩(X⊥Y|Z)⇒(X⊥Y,W|Z)
證實(之後更新):
精力實在有限,這部分沒時間去證實了,有作好的同行,歡迎發給我,我粘貼到這裏。
1.6.5相交
對正分佈(若是對於全部事件
α≠0,α∈S
,
P(α)>0
成立則稱
P
爲正分佈),以及互不相交的集合
X,Y,Z,W
:
(X⊥Y|Z,W)∩(X⊥W|Z,Y)⇒(X⊥Y,W|Z)
證實(之後更新):
精力實在有限,這部分沒時間去證實了,有作好的同行,歡迎發給我,我粘貼到這裏。
2.琴聲不等式
Jensen不等式在優化理論中大量用到,首先來回顧下凸函數和凹函數的定義。假設
f
是定義域爲實數的函數,若是對於全部的
x
,
f(x)
的二階導數大於等於0,那麼
f
是凸函數。當
x
是向量時,若是海森矩陣H是半正定(即H>=0),那麼
f
是凸函數。若是
f(x)
的二階導數小於0或者H<0,那麼
f
就是凹函數。
Jensen不等式描述以下:
1,若是
f
是凸函數,X是隨機變量,則
f(E[X])⩽E[f(X)]
,特別地,若是
f
是嚴格凸函數,那麼等號成立當且僅當
P(x=E[X])=1
時(也就是說X是常量);
2,若是
f
是凹函數,X是隨機變量,則
f(E[X])⩾E[f(X)]
,,特別地,若是
f
是嚴格凹函數,那麼等號成立當且僅當
P(x=E[X])=1
時(也就是說X是常量);
3,當
f
是(嚴格)凹函數當且僅當-f是(嚴格)凸函數。
經過下面這張圖,能夠加深印象:
上圖中,函數
f
是凸函數,
X
是隨機變量,有0.5的機率是
a
,有0.5的機率是
b
。
X
的指望值
E(x)
就是
a
和
b
的中值
(a+b)/2
了,圖中能夠看到
E[f(X)]⩾f(E[X])
成立。
本文在第四節EM算法導出中,會用到這個不等式性質,在那一節,咱們公式中的
X
是一個函數。這個函數是:
X:g(z)=p(x,z;θ)Q(z)
你沒必要理解這個函數的具體意思,這裏只是混個臉熟就好。若是告訴你這個函數是凹函數,那麼,你應該理解:
f(E[p(x,z;θ)Q(z)])⩾E[f(p(x,z;θ)Q(z))]
進一步的,若是告訴你
Q(z)
是
z
的機率,那麼僅僅根據本科的知識,你也應該知道:
E[p(x,z;θ)Q(z)]=∑zQ(z)p(x,z;θ)Q(z)
若是對這個式子看了很久仍是沒有明白,那麼博主建議你放棄機器學習這個行業。
3.座標上升方(座標降低法)
座標降低法是一種對多個參數分步迭代最終獲得目標函數局部極大值(極小值)的方法。具體來講,對於目標函數:
f(μ,θ)
,咱們首先給定一個最初的猜測值
θ0
,則:
μ1=argmaxμf(μ,θ0)
θ1=argmaxθf(μ1,θ)
μ2=argmaxμf(μ,θ1)
θ2=argmaxθf(μ2,θ)
...
顯然,必定有
f(μ1,θ0)⩽f(μ2,θ1)...⩽f(μi+1,θi)⩽fmax
。隨着迭代的持續進行,
f(μi+1,θi)
將逐漸逼近爲
fmax
,此時
θi
和
μi+1
即爲咱們的參數估計。本文在第四節中將會用到這一方法。固然,對於更多的參量,座標降低(上升)法的迭代規則能夠參考這個公式:
xt+1i=argminyf(xt+11,xt+22,...,y,xti+1,...,xtd)
4.EM算法導出
到這裏,咱們纔算真正進入到了EM算法的門口了。EM算法之因此學習起來感到困難,一方面是咱們忽略了幾本的機率知識,另外一方面,對於剛開始接觸機器學習的人來講,還不習慣迭代的這種思想。導出的方法多種多樣,博主選擇從零開始,一點一點,用最通俗易懂的方法來進行推導。
博主的目標是:讓零基礎,沒學過機器學習的人也能夠看懂。這個目標的實現有一下幾個前提:
- 你已經對前三節有了一個比較靠譜的理解和吸取。
- 你可以回憶一些本科機率統計中關於極大似然估計方面的知識。若是你回憶已經很模糊也沒有關係,你能夠從新找這個部分的教材看一下,我接下來也會講到。
我將按照下面的順序進行講解:
- 從最大似然估計MLE提及
- 咱們遇到了什麼問題?
- EM算法的導出
- 網絡上流行的幾個導出版本
- 深刻以後,讓咱們淺出一下
接下來,讓咱們開始激動人心的探險之旅吧!
4.1 從最大似然估計MLE提及
現實生活中,咱們解決問題的一個經常使用思路是:
1.第一步:在這個問題中,咱們能夠觀測到哪些特徵呢?不妨把它們叫作
x(1),x(2),...,x(n
,每個特徵都有本身的取值。這樣一來咱們能夠把這些特徵統稱爲
X
,其中
X={x(1),x(2),...,x(n}
。咱們會重複不少次實驗,觀測到不少結果。由於每次實驗都是獨立操做的(例如你今天摸彩票和你明天摸彩票沒關聯,可是你天天都去摸,那麼一個月下來後,你就獲得了30個觀測樣本。)因而咱們能夠獲得一系列獨立同分布的樣本點。
相國大人傾情補充:
什麼是獨立同分布?
就是天天去摸彩票之間是沒關聯的不會由於你昨天沒中獎,今天就能中,可是天天中獎的機率都是遵循都一個機率分佈函數,注意是同一個,同一個,同一個。重要的事情說三遍。咱們來看一個例子:
這是某一個機率分佈
P(X)
,每一次作實驗都由它產生了樣本點
x1,x2,x3...xn
。咱們用大寫
X
來表達
X
能夠是
xi
中的任何一個,
X
被叫作隨機變量。
xi
表示每一次實驗的樣本(觀測到的結果),注意這是一個特徵向量不要和這個混淆
x(1)
,這個是特徵。例如
x=(x(1),x(2),...,x(k))
,其中
x(1)
也許表示的是膚色,
x(2)
也許表示體重……你或許已經發現了,這些樣本點,其實就是這些特徵構成的特徵空間中的點。這些點組成的總體的形態,就是這個機率分佈規定的。咱們不妨姑且假設這個機率分佈產生的樣本點,在特徵空間中是一個球(隨便胡謅的)
如今有另外一個機率分佈
P′(X)
它產生了另一組樣本點
x′1,x′2,x′3...x′n
他在這個一樣的特徵空間中,產生了另外一羣樣本點,這羣樣本點也有本身的形態(姑且是一個橢球吧)
咱們知道全部樣本點都是獨立作一次實驗的結果,跟前一次實驗結果沒有關係,所以咱們說這些點都是獨立的。可是
x1,x2,x3...xn,x′1,x′2,x′3...x′n
這些樣本點不是同分布。他們分別屬於兩個分佈。這就是獨立同分布的一個直觀的解釋。
固然,好奇的你也許會問,這個空間中,有一個橢球,有一個球,他們各自是同分布的,彼此不是。並且剛纔您也說到,他們的形態是有各自的分佈規定的。那麼我可不能夠把這種位置不變的橢球體加球體的組合看作是一個聯合體(總體),並把它叫作「相國大人體」呢?答案是能夠的,那既然咱們把它看作了一個新的幾何體。它天然也有本身的機率分佈
P′′(X)
,這個玩意兒能求嗎?
能求。並且事實上,這個玩意兒已經求出來了:
P′′(X)=weight1P(X)+weight2P′(X)
其實就是兩個類別分佈的加權組合。那麼這個權值又是什麼呢?聰明的你,知道嗎?
既然是聯合了,那麼我每次作實驗時,就要考慮一個問題,此次實驗,老子是要作第一個呢?仍是第二個呢?這是一個問題,不妨咱們弄個機率模型
P′′′(Z),Z={"first","second"}
,隨機生成一個吧,生成那個,俺就作哪一個。因而這個權值,就是選擇作第1(2)個實驗的機率。換句話說,就是這個樣本點是來自第一(二)個分佈的機率;換句話說,就是這個樣本點屬於第1(2)類的機率;換句話說,就是這個樣本點隱含的類別;話句話說……
接下來,爲了讓你不二胡,咱們再強調一下書寫:不一樣的樣本點用下標表示,上標
(i)
表示是某一個特徵。換句話說下標是特徵空間的某一個點,上標是這個特徵空間的座標軸。某一個
xi=(x(1),...x(n))
所對應的具體的
x(i)
是這個點的座標值。 累死本大爺了。
2.第二步:咱們會根據本身的學識,對這些個
x(i)
進行建模,咱們的模型中會有一些參量,不妨把它們叫作
θ
(特別的,若是是多個參量,那
θ
就是一個向量
θ=(θ1,...θk)
)。問題是咱們應該創建什麼模型呢?一種最通俗易懂的模型就是創建這些特徵的聯合機率。即:
P(x(1),x(2),...,x(n)
不要對這個式子「感冒」哦,在第一節我說過,這個式子其實就是:
P(x(1)∩x(2)∩,...,∩x(n)
爲何要這麼建模呢?你問過本身嗎?
沒問過,說明你不會學習。
通俗地說,這種建模很是符合人類對事情的認知。
例如,咱們研究一個問題,只能獲得觀測的數據,這些觀測數據,就是一系列的
X
,進一步的說,這些觀測數據,就是一系列的
x1,...,xn
取值的組合。人類看到天上有星星,因而就問本身,爲何我會看到這些星星而不是那些星星呢?因而產生了地心說和日心說。咱們看到一種現象,就會思考爲何出現的是這個現象,而不是另外一個現象。爲何
(x1,...,xn)
是
(0,1,...,"周一","小紅")
而不是
(1,0,...,"周二","小綠")
呢?因而咱們很天然的但願可以獲得一種特定組合發生的機率,也就是咱們的這個聯合機率:
P(x(1),x(2),...,x(n)公式(1)
3.第三步:已知咱們已經作了n次實驗,獲得了n個樣本點
x1,x2,...xn
上面的公式1是每個樣本的機率,請注意公式(1)也能夠寫成這個樣子:
P(x)
。如今咱們獨立作了n實驗,咱們不由在想,爲何是這樣一種結果的組合,而不是另外一種結果的組合呢?(這個思想若是你尚未理解,請返回第2步)因而咱們用上面的機率構造了另外一個機率(請注意下標!):
P(x1,x2,...,x3)=P(x1)P(x2)...P(xn)(注意xi相互獨立)
準確來說,這個東西是一個值,咱們已經知道的值。由於這裏的
xi
都是咱們觀測的結果,是已知量。而這個
P(⋅)
是咱們本身建的模型,也是已知的。也就是說,若是咱們的模型裏面沒有未知參數
θ
,這玩意兒就求出來了。可是正是由於模型裏面有
θ
全部咱們的這個式子裏面有
θ
。因而你會發現,這個玩意兒是關於
θ
的一個函數,不妨把它叫作
L(θ)
吧。走到這一步,完事具有,只欠「
θ
」了,因而咱們開始基於訓練數據,也就是已有經驗來對參數進行估計,咱們把這一步叫作「學習」。參數穩定後,接下來,給定一個觀測點
X
,咱們就能夠預測它的類別了(若是你創建的模型是爲了這個的話),或者咱們的模型是一個聯合機率,這樣咱們能夠預測某一種組合狀態發生的機率。
如今的問題是該如何估計呢?
通常狀況下,若是幸運,咱們的模型就是輸入
X
(這個是咱們的觀測值,是已知量)與參數
θ
之間的那點恩怨糾葛。咱們能夠假定聯合機率取最大時,應該用什麼參數,來獲得參數的估計。更準確地說,就是
θ
應該取得什麼值,才能使得不管輸入
X
如何,獲得的聯合機率都是這一特定輸入下的最大的機率了呢?
換句話說,如今咱們有這n個樣本點,咱們要估計
θ
(注意,是估計!),咱們該如何讓上帝相信咱們估計的
θ
是最可靠的呢?事實勝於雄辯,咱們告訴上帝,你用我這個
θ
,出現這種觀測結果的機率是最大的。因而上帝明白,哦,看來用這個參數值是最有可能出現這種現象的。換句話說,就是這個聯合機率
L(θ)
關於參數
θ
取得最大值時,對應的
θ
。一種本科小屁孩兒都知道的方法就是將這個聯合機率對
θ
求偏導數,令其爲零。Are you understand?
是的,就是這麼個破玩意兒,還有個專有名詞,叫作「
最大似然估計」。
相國大人溫情補充:
具體來講,咱們把這個聯合機率關於參數
θ
的函數叫作似然函數:
L(θ)=P(x1,x2,...,xn;θ)
須要注意的是,這裏咱們用分號把
xi
和
θ
進行了分隔,在李航博士《統計學系方法》和《機率圖模型》等著做中,人們是用」|」來進行分隔的。固然,不嫌事兒多的你,也許喜歡更刺激的表達方式:
L(θ)=P((x11,x21,...,xk1),(x12,x22,...,xk2)...,(x1n,x2n,...,xkn);θ)
咱們更爲經常使用的似然函數形式是對這個聯合機率取對數,即更爲經常使用的似然函數是:
L(θ)=logP(x1,x2,...,xn;θ)
不知你有沒有想過爲何?
若是不取對數,那麼咱們的似然函數就是若干機率的乘積。每個機率都是小於1的數。若是有100個樣本點,那麼最終獲得的結果幾乎就爲0了。任何一門編程語言,都不太可能保證如此精確的計算。咱們把這個叫作「下溢」。固然,另外一方面,也是由於取對數計算更簡單。
考慮到咱們觀測的樣本點都是相互獨立的,所以能夠進一步寫成:
L(θ)=∑ilogP(xi;θ)
若是你看了上一段我說的那個
和上帝對話的比喻的話,你也許就會知道爲何把它叫作「似然」了吧:
「然」在古漢語中,經常用作形容詞,表示「對的」。(「誠然」)
「似」,在古代漢語中,經常用做副詞(修飾限定形容詞、動詞的詞),表示「彷佛,好像」(白髮三千丈,緣愁似個長。)
所以似然值能夠表達爲「彷佛是對的值」,用來求似然值的函數,就叫作「似然函數」了。
不要問我從哪裏知道的。我說過,這篇博客的名字叫作《深刻淺出EM》,若是你感激我,別整那些沒用的,直接掃我
支付寶捐款(在開頭),其餘的都是虛的。
此處看不懂,爾等可緩緩歸矣。
4.2 咱們遇到了什麼問題?
極大似然估計這玩意兒是真好啊,解決了很多問題,可是有一種狀況,它玩兒完了。
咱們剛纔說到,若是幸運,咱們的模型就是輸入
X
(這個是咱們的觀測值,是已知量)與參數
θ
之間的那點恩怨糾葛。可是若是模型的輸入不只僅有
X
,還有某些咱們觀測不到,可是確實存在的」影子」輸入
z
呢?
這種狀況下,咱們想像之前同樣對這個聯合機率作
θ
偏導,但是人們發現,這個偏導數求不出來。爲何求不出來呢?你看到過的全部資料,對這個問題都是一筆帶過,是吧?接下來,讓我來爲你刨根究底:
假設機率模型爲
P((x(1),x(2),z);θ)
,其中
(x(1),x(2),z)
是一個三維的特徵向量,因爲某種緣由,咱們只看到了
x(1),x(2)
這兩個特徵,沒有觀測到
z
這個特徵。
(x(1),x(2),z)
構成了一個三維的樣本空間,咱們作的n次實驗結果,是根據這個機率模型分佈生成的點。以下圖(這個圖是我用python作的一個示意圖,生成的是隨機點,固然你也能夠按照某個機率模型來生成點,可是從說明的功能上看,這個示意圖已經足夠了。若是你對我這個圖比較感興趣,能夠在這篇博文中,找到代碼):
看不清楚的話,再換個角度:
一位浙大的博士提出,我這個圖有問題,就是z軸不該該與x,y垂直。由於垂直意味着z與x,y沒有信息交互。我以爲這種說法是有道理的。在此表示感謝。可是爲了讓你們有一個直觀的印象,我想,仍是暫且沿用這個圖吧。空間全部的點,都是由
P((x(1),x(2),z);θ)
這個模型生成的,這個模型規定了這些點在三維空間內的形態。可是對於每一個平面中的點而言,他們在這個平面中也有一個形態,這個形態是由位於這個平面上的二維機率模型
P′((x(1),x(2));θ)
規定的。這個
P′
與那個
P
是不一樣的分佈。一個是三維,一個是二維。因爲你看不到
z
,所以這些樣本點,在你看來,是這樣的:
因而你會發現,咱們僅僅基於二維特徵,得不到第三個維度
z
的特徵。
若是你對這句話還存在懷疑的態度,那麼咱們下面用數學式子,來爲你推一下:
咱們首先設紅,綠,藍三個平面上的機率分佈爲
P(1),P(2),P(3)
,每一個
z
平面上出現的樣本點個數分別爲
k1,k2,...km
,換句話說,這
k1,k2,...km
的和是樣本點總數
n
,而下標
m
正好是這些樣本點對應的全部不一樣
z
值的個數,換句話說就是這些樣本點對應着
m
個
z
平面。那麼前面說的似然函數能夠寫成:
L(θ)=P(x1,x2,...,x3)=P(x1)P(x2)...P(xn)
其中
P(xi)=∑mk=1P(z=zk)P(k)(xi)
即:
L(θ)=∏i=1n(∑k=1mP(z=zk)P(k)(xi))
這裏面的
P(i)(xk)
更爲準確的表述應該是:
P(i)(xk|z=zi,θ)
可是,若是你看過我在第一章寫的Note的話,而且若是你跟着我也看了一下第一章那幾個獨立性性質的分析的話,我想你應該不會對這樣的書寫感到吃驚。
進一步地,咱們把似然函數換成對數似然函數能夠寫成:
L(θ)=∑xlog(∑zP(z)P(x))
這裏面的
P(x)
更爲準確的表述應該是:
P(x|z,θ)
,而
P(z)
應該寫成
P(z|θ)
。因爲
log
裏面的和號中,每一項都是肯定的一個
z
,所以,對於這兩個機率而言,表達式裏面是沒有z的,而是一個含有
θ
的表達式。而且,給定某一個
z
,這兩個機率咱們通常也都是知道的(
請注意個人表述:我說的是給定一個z,換句話說我要想獲得這兩個機率,就必需要知道這個z是什麼。)。爲了避免讓你迷糊,我這裏重寫一下:
L(θ)=∑xlog(∑zP(z|θ)P(x|z,θ))
按照極大似然估計的方法,咱們接下來要作的是求偏導數:
∂L(θ)∂θ=∑x⎧⎩⎨∑z[P(z|θ)∂P(x|z,θ)∂θ+P(x|z,θ)∂P(z|θ)∂θ]∑zP(z|θ)P(x|z,θ)⎫⎭⎬
這裏面有兩點須要注意:
第一:這個式子令其爲0後,求解是否複雜?我想,不用我說,你也知道,這個計算是很複雜的。但這不是主要問題。主要問題是:
第二:仔細看一下上面的式子。咱們但願令這個式子爲0,解出
θ
,可是從這個式子咱們發現,若是咱們不知道
z
有幾種,上面的和式就沒辦法展開(寫不成實際的表達式)。即使咱們知道z的種類,能夠展開這個和式,裏面的
x
究竟是哪個樣本的
x
?咱們也不知道。若是這兩個你都知道。。。那還叫隱變量嗎?(那樣的話,咱們就繞回去了,能夠寫出具體的式子,這就變成了極大似然估計了。)也就是說,咱們至少要知道z的狀況,即z有多少個取值?每種取值下對應的
P(z|θ)
爲多少?然而遺憾的是,咱們在實際的實驗中,並不能觀測到z的特徵,或者說,即使咱們知道z的取值,咱們也不知道每個樣本對應的是哪個z。所以上面的式子,看起來有路可走,其實是死路一條,寫不出具體的式子來。這也是爲何不少教材上說「沒有顯示的表達式」。說的就是這個意思。
拋開繁瑣的推理,讓咱們回到上面的那張特徵空間圖。
咱們的樣本特徵有:
x(1),x(2),z
。這些特徵構成了一個三維的立體特徵空間,每個樣本都是空間內的一個點。假設咱們如今獲得的數據是根據這樣一個機率分佈獲得的
P(x(1),x(2),z)
,那麼這些點將會以一種特定的「排兵佈陣」彌散在這個三維空間中。很遺憾,咱們如今觀測不到
z
,只能看到
x(1),x(2)
,那麼,這些點組成的」陣型」,在咱們看來,不過是平面上的投影(也就是第3張圖的視角)。
請回顧前面一節我反覆提到的獨立同分布這個問題。咱們要估計三維機率分佈的參數,就要用這個三維空間內全部的樣本點來估計。咱們要估計某個平面上的機率分佈參數,就只能用這個平面上的樣本點來估計。這就是同分布的條件。問題是,如今給咱們一些點,咱們搞不清哪些點是同一個平面的。若是咱們蠻橫地用全部點去估計一個平面上的二維機率分佈,200%是錯的。這就比如,你拿美國佬的飲食習慣來估計南京居民的飲食習慣,取錯了地方。
一個樣本集合的元素是從多個機率分佈中得出的話,某個元素只多是一個機率分佈的結果,可是咱們不知道這個元素從哪一個機率分佈中得出。因此,咱們不只要求出多個機率分佈的最佳參數,並且要求出多個機率分佈在模型中的比例。
而若是咱們知道樣本集合中的一個個元素是從哪一個機率分佈得出的,那直接運用極大似然估計就可求出多個機率分佈的最佳參數,進而求出機率分佈的比率。反過來,若是咱們知道這些機率分佈的最佳參數,那麼咱們也知道樣本集合中的一個個元素分別對應哪一個機率分佈,也能求出機率分佈的比率。因而,咱們陷入了「雞生蛋蛋生雞」的死循環了。
截止到目前,咱們終於完全搞清了EM算法的前提。別得意的太早,接下來,纔是真正開始推導EM算法的環節:
4.3 EM算法的導出
截止目前,咱們其實已經介紹了兩種參數估計的方法。一個是座標降低法。另外一個就是上一節的極大似然估計。那麼,這兩種方法何時,用哪一個呢?
以函數
L(θ)
爲例,咱們會首先考察這個這個函數對
θ
求偏導。若是這兩個偏導數都可以求出來(即存在偏導數),而且均可以令其爲0時,咱們就獲得了等式。這樣就能夠求得這個參數。對於凸函數而言,這個參數也必然是其極大似然估計值。可是,就像上一節咱們遇到的那樣。當存在隱變量時,咱們獲得的等式實際上是個「中看不中用」的傢伙。這個時候,咱們能夠作一個好玩的變化:
首先,咱們知道這個函數有一個參數,咱們但願經過某個肯定的關係,再構建一個參數。不妨叫作
μ
,這樣原來的函數就變成了
L(μ,θ)
。這樣咱們就能夠用座標降低法,假定某一個未知數的初始值,而後以此來估計另外一個未知數。反覆交替,也能夠完成對參數的估計。也就是說,咱們之因此想到要構建這樣一個參數,純粹就是爲了套用座標降低法的。
眼下的問題是,這個參數改怎麼構建呢?
回顧一下座標降低法:
μ1=argmaxμf(μ,θ0)
θ1=argmaxθf(μ1,θ)
μ2=argmaxμf(μ,θ1)
θ2=argmaxθf(μ2,θ)
...
咱們發現,
當前時刻的
μi+1
其實它的式子裏包含的是上一個時刻的
θi
,那麼對於咱們的似然函數而言,咱們也能夠構造一個函數
Q
,使得
μi+1=Q(θi)
還記得咱們似然函數長什麼樣子嗎?:
L(θ)=∑xlog(∑zP(z|θ)P(x|z,θ))
我想你已經注意到了,這個
log
裏面有個和號,這很很差。再次強調,log裏面的和號中每一項,都沒z啥事兒(由於每一項都針對的是一個肯定的z),這個機率都只是
θ
的參數。可是,因爲有了這個和號,使得咱們的log老是受到z的限制。
如今,咱們引入一個新的機率
P(z|x,θ)
,很顯然,這個機率表達的含義是,給定一個樣本,判斷它屬於某一類(z)的機率,這也偏偏是咱們不知道的。可是咱們忽然發現,這個東西里面含有
θ
而且,它仍是一個不知道的。那咱們就把它當作咱們苦苦尋找的那個
Q
吧!
從剛纔的分析中,咱們已經肯定了這麼幾個東西:
1,這個
P(z|x,θ)
(也就是咱們的
Q
)是對於給定的
x
和給定的
z
而言的,所以,它實際上是一個含有
θ
的式子,只不過這個式子咱們不知道罷了。
2,這個Q中的
θ
應該是上一時刻的
θ
若是你對於這兩個東西都已經信服,那麼接下來的工做就好辦了。咱們把Q引進到似然函數中,能夠獲得這樣的等價變換:
L(θ)=∑xlog⎛⎝⎜∑zP(z|x,θ(i))P(z|θ)P(x|z,θ)P(z|x,θ(i))⎞⎠⎟
對於這個式子中
θ
的上標問題,我想,你應該沒有疑問了吧。
咱們把它用一下琴聲不等式,但願把裏面的和號拿到外面。關於這個地方的具體操做和推導,我已經在琴聲不等式那一節的末尾給你說過了,在那裏,咱們的
Q(z)
其實就是
Q(z|θ)
你能夠回過頭來再看一下。這裏我直接給出結論:
L(θ)=∑xlog⎛⎝⎜∑zP(z|x,θ(i))P(z|θ)P(x|z,θ)P(z|x,θ(i))⎞⎠⎟⩾∑x∑z⎛⎝⎜P(z|x,θ(i))logP(z|θ)P(x|z,θ)P(z|x,θ(i))⎞⎠⎟
不等式右側,我想你已經很清楚了,它就是一個含有
θ(i)
和
θ
的式子。而且他倆兒相差一個時刻。咱們不妨令:
P(z|x,θ)=μ
令不等式右側的的部分爲:
B(μ,θ)
則有:
L(θ)⩾B(μ,θ)
那麼接下來咱們但願經過對
B(μ,θ)
運用座標降低法,來獲得
B(μ,θ)
取極大值時的
μ,θ
。若是能證實
B(μ,θ)
取極大值與似然函數極大值相等(換句話說,就是迭代收斂到
L(θ)max
),那麼咱們就完成了
用座標降低法來最大化對數似然函數下界,從而獲得對數似然函數取得極大值時的參數估計,也就是極大似然估計的過程。
關於收斂性的證實,將會放到後面,我想即使我不證實,你也能感受出來,收斂是明擺着的嘛:)
在開始咱們的迭代以前,咱們先來研究一個問題,就是
L(θ)⩾B(μ,θ)
這個式子,何時取得等號?
其實,在琴聲不等式那一節,我已經說過了,對於
f(E[X])⩾E[f(X)]
,取等號的充要條件是
X
爲常數。對應到咱們的這個式子中來,就是:
P(z|θ)P(x|z,θ)P(z|x,θ(i))=c
即:
P(z|θ)P(x|z,θ)=cP(z|x,θ(i))
兩邊對
z
取和式獲得:
∑zP(z|θ)P(x|z,θ)=c∑zP(z|x,θ(i))
即
∑zP(z,x|θ)=c∑zP(z|x,θ(i))
看到這裏,你是否是後悔本身沒有好好看個人第一章呢?若是這裏你二胡了,我建議你回到第一章。看看我都語重心長地對你說了什麼。
這個不等式左邊是x的機率。右邊則爲常數c即:
P(x|θ)=c
注意:
∑zP(z,x|θ)=P(x|θ)
,
∑zP(z|x,θ(i))=1
,若是這兩個你沒看懂。博主給你的建議是:放棄治療。你不適合機器學習。
緊接着咱們當即能夠獲得:
P(z|x,θ(i))=P(z,x|θ)c=P(z,x|θ)P(x|θ)
最右側的部分是貝葉斯定理,我在第一節說過。因而當即獲得:
P(z|x,θ(i))=P(z,x|θ)P(x|θ)=P(z|x,θ)
這個式子告訴咱們,當
θ
取值爲
θ(i)
時,咱們有
L(θ(i))=B(θ(i),θ(i))
(這裏
B(μ(i),θ(i))
我寫成了
B(θ(i),θ(i))
,都一個意思,你懂吧。)
這樣一來咱們就 明白了一個事情:
L(θ)
與
B(θ(i),θ)
實際上是下面這個圖表達的關係:
這個圖是從網上博客(見參考文獻)粘貼過來的,因此函數名字和個人不同。在這個圖中,紅線表示的是
L(θ)
,藍色,綠色表示的分別是
B(θ(t),θ)
和
B(θ(t+1),θ)
也就是說
B(θ(t),θ)
在
θ(t)
處與
L(θ)
相等,即
L(θ(t))=B(θ(t),θ(t))
,而在其餘地方則嚴格小於,綠線同理。咱們對
B(θ(t),θ)
採起座標降低迭代的過程,就是下界函數有藍線不斷轉移到綠線的過程。爲了讓你清楚的理解這個迭代過程,咱們講一下具體的操做:
初始時刻假定
θ(0)
,因而當即能夠獲得
μ(1)=P(z|x,θ(0))
。這樣
θ(1)=argmaxθB(μ(1),θ)
μ(2)=argmaxθB(μ,θ(1))
對於上面這個式子,咱們能夠直接獲得
μ(2)=P(z|x,θ(1))
想想爲何?
咱們剛纔已經證實過,
L(θ(1))⩾B(μ,θ(1))
,也就是說,你
B(μ,θ(1))
最大也就只是
L(θ(1))
而只有
μ(2)=P(z|x,θ(1))
的時候,等號才成立(由於此時函數
B
爲
B(μ=P(z|x,θ(1)),θ(1))=B(θ(1),θ(1))
)。因此之後再也不說明,你應該知道了咱們的迭代策略爲:
E步:
μ(i)=P(z|x,θ(i−1))
M步:
θ(i)=argmaxθB(μ(i),θ)
以上就是咱們EM算法推導的主要內容。咱們「深刻」的工做基本結束,接下來該「淺出」了:
「EM算法能夠看作用座標降低法來最大化對數似然下界的過程。」
——周志華《機器學習》第163頁。
4.4 最後一點小尾巴
咱們剛纔運用
L(θ(1))⩾B(μ,θ(1))
和
B(μ=P(z|x,θ(1)),θ(1))=B(θ(1),θ(1))=L(θ(1))
成功的將E步作了可行性的化簡。其實對於M步,咱們也能夠進一步地化簡,這樣有利於真正使用。
咱們看到,在M步中,咱們的式子其實是這樣的
θ(i)=argmaxθB(μ(i),θ)=argmaxθ∑x∑z⎛⎝⎜P(z|x,θ(i))logP(z|θ)P(x|z,θ)P(z|x,θ(i))⎞⎠⎟
其實,在這一步,咱們的
P(z|x,θ(i))
是個已知量。對於求最大似然估計,並沒什麼卵用。因此咱們能夠省去對
θ
的極大化而言是常數的項。則能夠化簡爲:
θ(i)=argmaxθ∑x∑z(P(z|x,θ(i))logP(z|θ)P(x|z,θ))
網友問題解答:
有網友問爲何只把log分母去掉,而不把log前面相同的因子也去掉?
其實,提出這個問題,說明你們尚未理解這其中的本質。咱們不妨把log裏面的分式寫成log相減的形式,則有下面的公式:
argmaxθ∑x∑z⎛⎝⎜P(z|x,θ(i))logP(z|θ)P(x|z,θ)P(z|x,θ(i))⎞⎠⎟=argmaxθ∑x∑zP(z|x,θ(i))log[P(z|θ)P(x|z,θ)]−∑x∑zP(z|x,θ(i))logP(z|x,θ(i))
其中最後一項是常數,所以去掉。
事實上,不少教材都把這個化簡後的函數叫作
Q(θ(i),θ)
。所以咱們最終的迭代策略爲:
E步:
μ(i)=P(z|x,θ(i−1))
M步:
θ(i)=argmaxθQ(θ(i),θ)
其中
Q(θ(i),θ)=∑x∑z(P(z|x,θ(i))logP(z|θ)P(x|z,θ))
在第五節中,咱們將運用這個東西,來作一個實戰,推導一下高斯混合模型的參數估計。
4.5 EM算法收斂性證實
很簡答,略
5.EM算法與高斯混合模型學習
我看過不少相似的博客和書籍,很是的差別。好端端的,優美的東西,讓這羣人推導得如此眼花繚亂。要麼就是抄的而且本身沒搞懂,要麼就是故弄玄虛彰顯情懷。在這裏,你將會看到,個人推導是很是清晰和易於理解的。爲了達到這個目的,我付出了不少。若是 你以爲有所收穫,能夠給我捐款,資助一個弱小的心靈。
首先講一下什麼是混合高斯模型,報告老師,就是這個玩意兒:
P(x|θ)=∑k=1KαkΦ(x|θk)
其中
Φ(x|θk)=12π−−√σkexp⎛⎝−(x−μk)22σ2k⎞⎠
αk⩾0,∑Kk=1αk=1
事實上,這個
αk
至關於
P(k|θ)
而
P(x|z,θ)
至關於咱們的
Φ(x|θk)=12π√σkexp(−(x−μk)22σ2k)
而且爲了後續你可以更好的理解咱們的模型。
最後,讓咱們照葫蘆畫瓢,用上一節的迭代來推導參數估計。
Q(θ(i),θ)=∑x∑zP(z|x,θ(i))logP(z|θ)P(x|z,θ)=∑x∑zγzxlogαz12π−−√σzexp⎛⎝−(x−μz)22σ2z⎞⎠
這就是咱們的
Q
函數。接下來,讓咱們看一看,咱們的參量都是什麼樣的:
θk=(μk,σ2k)
而咱們
μ(z)=(γz)
其中
γz=(γzx1,γzx2,...)
首先計算
γzx=P(z|x,θ(i))=P(z,x|θ(i))∑zP(z,x|θ(i))=αzΦ(x|θz)=αz12π√σzexp(−(x−