#Expectation Maximization Algorithm EM算法和以前學的都不太同樣,EM算法更多的是一種思想,因此後面用幾個例子講解,同時也會重點講解GMM高斯混合模型。 ###①極大似然估計 極大似然估計這裏面用的比較多。假設咱們想要知道咱們學生身高的分佈,首先先假設這些學生都是符合高斯分佈$$N(μ, σ^2)$$咱們要作的就是要估計這兩個參數究竟是多少。學生這麼多,挨個挨個來確定是不切實際的,因此天然就是抽樣了。 爲了統計學生身高,咱們抽樣200我的組成樣本git
咱們須要估計的參數$$θ = [μ, σ]^T$$ 首先估計一下抽到這兩百人的機率一共是多少,抽到男生A的機率github
那麼同時抽到這200個學生的G機率$$L(θ) = L(x_1,x_2,x_3...,x_200;θ) = \prod_{i=1}^{200}P(x_i|θ)$$ 最後再取一個對數就行了:算法
####notation和log 上面有一條公式裏面是同時存在了;和|,這兩個符號差異其實有點大的。**|通常咱們是用來表示條件機率,好比$$P(x|θ)$$就是表示x在θ的條件下發生的機率。框架
也是一個意思。 分號;表示的就是表示後面的是待估計的參數,也就是說P(x;θ)意思就是後面的θ是須要估計的參數而不是條件,因此|也有另外一層意思,若是不是表示條件機率,那麼就是表示後面有待估計參數。 固然是在|不表示條件機率的狀況下。** 這兩種表示法是源於兩種學派的不一樣理解: 頻率派認爲參數爲固定的值,是指真實世界中,參數值就是某個定值。 貝葉斯派認爲參數是隨機變量,是指取這個值是有必定機率的。固然,不管是;仍是|,他們都是表示條件機率的意思,只不過這兩個學派理解不同而已。 notation的問題解決了以後就是log的問題了,爲何須要log化,講道理,是不須要的。可是求log有這麼幾個好處: 1.計算簡單,累乘是很難計算的,log以後能夠變換成累加。 2.機率累乘是會出現數字很是小的狀況,log以後就能夠避免這種狀況。 3.log以後函數的梯度方向是沒有變化的,對於函數優化的方向影響很小。dom
似然函數的執行步驟: 1.獲得似然函數 2.取對數整理 3.求導數,另導數爲零 4.解方程獲得解函數
###②Jensen不等式 首先引出凸函數的概念$$f(x)^{''} > 0$$那麼就是凸函數,因此它的圖像就是一個勾形的,看起來是一個凹函數,其實是凸函數。 學習
凸函數的性質很顯而易見了$$E[f(x)] >= f(E(x))$$ 其實很明顯的,看圖就知道了,E(x)其實就是a到b的平均值,上面的結論很容易證明。那麼若是想要取到等號,須要改變上面?取等號的意思就是相切,相切的意思就是a = b,既然a = b了,那麼x天然就是常數了,因此當且僅當$$P(x = E(x)) == 1$$若是是凹函數,那麼就是方向相反了。 ###③EM算法的推導 正常來看先是要引入一個最大似然函數:$$L(θ) = \sum_{i=1}^{n}logP(x;θ)$$但這樣實際上是和難求的,P(x|θ)徹底混在了一塊兒,根本求不出來,因此咱們要引入一個輔助變量z。####隱變量Z 隱變量是觀測不到的,好比作一個抽樣,從3個袋子裏面抽取小球。而抽取這些小球的過程是不可見的,抽取的過程其實就是隱變量,而這些隱變量,也就是過程能夠告訴咱們這個x是從哪一個袋子來的,由此來區分。這個隱變量和HMM裏面的隱含序列不是一個東西,隱含序列是當前x的狀態,而不是抽取x的過程。因此在這裏,通俗點講,這個z就是用來找到x的組類的,也就是說z來告訴這個x你是屬於哪一組的。 另外須要注意的是,隱變量是不能夠隨便添加的,添加隱變量以後不能影響邊緣機率。也就是說,原來是P(x),添加以後就是P(x,z),那麼必須有:優化
因此咱們引入隱變量的緣由是爲了轉化成和這幾個高斯模型相關的式子,不然無從下手。化簡一下上式子:$$L(θ) = \sum_{i=1}^{n}logP(x;θ)=\sum_{i=1}^{n}log\sum_zP(x, z;θ)$$既然z能夠指定x,那麼咱們只須要求解出z就行了。 注意上面凸函數所提到的一個指望性質,這裏就可使用了。由於雖然優化了上面的式子,仍是不能求出來,由於z變量實在是太抽象了,找不到一個合適的公式來表示它。EM的一個方法就是用優化下界函數的方法來達到優化目標函數的目的。 既然z很抽象,那麼咱們就須要一個轉變一下。對於每個樣例x都會對應一個z,那麼假設一個分佈Q(z)是知足了z的分佈的,而Q(z)知足的條件是Qi意味着每個x對應的z都會對應着一個Q了,這裏有點複雜,再詳細解釋一下。一個x對應一組z,z是一個向量,可是每個z又會分別對應一個一個分佈Q。覺得最後獲得的z不會是一個數字,而是一個機率,也就是說Q(z)獲得的是這個x樣例屬於這個類別的機率是多少。而z的數量,一個是當前有多少個分佈混合在一塊兒的數量。 再梳理一下:如今的樣本是xi,那麼每個xi將會對應着一組的z,每個xi同時也會對應着一個分佈Qi,z其實就是反應了這個樣本是來自於哪一個分佈的。好比這個x是A1分佈作了3,A2分佈作了5,那麼z可能就是={3,5}。因此Qi(z)獲得的是這個x屬於這些個分佈的機率,也就是說這些分佈對x作了多少百分比的功,天然就是要等於1了。 還要注意的是,上面的這個並不能獲得Qi(z)就是分佈對x作了多少功的結論,獲得這個結論是後面下界函數與目標函數相等獲得的。這裏只是知道了總和等於1,由於是分佈的總和嘛。 如今就到了公式的化簡:$$\sum_ilogP(x^{(i)};θ) = \sum_ilog\sum_{z^{(i)}}P(x^{(i)},z^{i};θ) = \sum_ilog\sum_{z^{(i)}}Q_i(z^{(i)})\frac{P(x^{i},z^{i};θ)}{Q_i(z^{(i)})}$$ 仔細看一下這個式子$$\sum_zQ_i(z^{(i)})\frac{P(x^{i},z^{i};θ)}{Q_i(z^{(i)})}$$這個式子其實就是求的指望,假設,那麼能夠利用上面。因而化簡:.net
因而有: 3d
因此Q(z)計算的是後驗機率。計算在當前參數θ和已經抽樣到x的條件下,這個x是從z來的機率。其實就是z對x作了多少貢獻。 因此整個EM算法步驟就很清晰了:####EM算法計算步驟: E-step: 對於每個,求 M-step: 這時候就可使用求導迭代的方法求解了。
這就是整一個EM算法的框架了,能夠看到其實沒有比較具體的算法,大體上就是一個框架。那麼問題來了,怎麼樣證實這東西是一個收斂的??
####證實EM算法的收斂性 既然是極大似然估計,那麼須要證實的天然就是,也就是說極大似然估計要單調遞增。由於每一次都是極大,那麼隨着時間增長,天然就是要增大的了。 當給定一個的時候,至關於t時間的EM算法進行了E步了,因此有:
意思就是求出第i個樣本屬於第j個分佈的機率是多少。以後就是M-step了,就是化簡了:
這裏可能須要解釋一下,根據至於條件,由於很明顯,z是隱變量,只是指明瞭x是屬於哪一個類別,和μ,Σ沒有什麼關係,因此直接忽略那兩個參數了,因此P(z)是沒有那兩個參數的,z是表明了分佈,因此每個分佈的機率確定是包括了,因此就只有一個機率的參數。P(x|z)是自己的機率,就是已經知道分佈是那個了,求屬於這個分佈的機率是多少,既然已經選定了分佈那麼天然就不須要再看φ了,由於φ是各個分佈的機率。
以後就是求導數了: 導數等於0,因而有:$$μ_j = \frac{\sum_{i=1}^mw_j^{(i)}x^{(i)}}{\sum_{i=1}^{m}w_j^{(i)}}$$μ就出來了。 對於φ,那就簡單了,實際上須要優化的式子: