網上和書上有關於EM算法的推導,都比較複雜,不便於記憶,這裏給出一個更加簡短的推導,用於備忘。算法
在不包含隱變量的狀況下,咱們求最大似然的時候只須要進行求導使導函數等於0,求出參數便可。可是包含隱變量,直接求導就變得異常複雜,此時須要EM算法,首先求出隱變量的指望值(E步),而後,把隱變量當中常數,按照不包含隱變量的求解最大似然的方法解出參數(M步),反覆迭代,最終收斂到局部最優。下面給出EM算法的推導函數
咱們有對數似然函數
\[ L(\theta)=\log P(y|\theta) = \log\sum_zp(y,z|\theta) \]
能夠表示成包含隱變量\(z\)的形式,而後經過邊緣化再消除\(z\),效果是同樣的。spa
因爲是迭代,咱們須要每次獲得的新的似然結果比上一次的似然結果要大,因而咱們的目標是下式
\[ \theta = \arg\max_\theta L(\theta) - L(\theta') \]
因爲$L(\theta') $ 是常量,因此,使得\(L(\theta)\)最大化便可。下面看看如何最大化 \(L(\theta)\) :
\[ \begin{split} \theta &= \arg\max_\theta L(\theta)\\ &= \arg\max_\theta \log\sum_zp(y,z|\theta)\\ &= \arg\max_\theta \log\sum_zp(z|y, \theta')\dfrac{p(y, z|\theta)}{p(z|y, \theta')}\\ &= \arg\max_\theta \sum_zp(z|y,\theta')\log\dfrac{p(y,z| \theta)}{p(z|y,\theta')}\\ &= \arg\max_\theta\sum_zp(z|y,\theta')\log(p(y, z|\theta))\\ &= \arg\max_\theta Q(\theta, \theta') \end{split} \]it
至此,獲得傳說中的Q函數,而後求解出參數\(\theta\)便可class