EM算法

緣起

最近室友都找實(shí)習(xí)。面試時矾削,常被問到的是壤玫,一些基礎(chǔ)的機(jī)器學(xué)習(xí)知識和最新的深度學(xué)習(xí)模型,比如 邏輯回歸哼凯、正則項(xiàng)欲间、f1的計(jì)算、類別不平衡的處理断部、LSTM猎贴、Attention、Transformer蝴光、word2vec她渴、glove、ELMo蔑祟、BERT等等趁耗。因此,我打算系統(tǒng)地疆虚、扎實(shí)地將這些知識學(xué)習(xí)一遍苛败,同時將學(xué)習(xí)的筆記寫成博客右冻,以供自己以后查看。如果不幸?guī)椭藙e人著拭,還可以收獲一些虛榮:-)。對吧~

萬事開頭難牍帚。所以儡遮,先從學(xué)過的EM算法開始吧。

從貝葉斯公式到極大似然估計(jì)

貝葉斯估計(jì)

已知樣本的特征向量x暗赶,為了求樣本的類別w鄙币,我們可以使用經(jīng)典的貝葉斯公式,求解已知特征向量x時不同類別的概率P(w_i|x)蹂随,
P(w_i|x)=\frac{P(x|w_i)P(w_i)}{P(x)}.
然后十嘿,選擇使得P(w_i|x)中最大的w_i作為樣本類別的估計(jì)值,即有
\begin{align} \hat{w}&=\arg \max_{i} P(w_i|x)\\ &=\arg \max_{i} P(x|w_i)P(w_i). \end{align}
其中岳锁,P(w_i)被稱為先驗(yàn)概率绩衷,可通過統(tǒng)計(jì)標(biāo)記樣本中不同類別樣本的比例得到,即
P(w_i)=\frac{\# w_i}{N}.
P(x|w_i) 被稱為類條件概率激率,當(dāng)樣本的特征數(shù)為1且是為離散值時咳燕,
P(x|w_i)=\frac{\#(x,w_i)}{\# w_i}.
其中,\#(x,w_i)表示特征為x且類別為w_i的樣本數(shù)目乒躺。樣本特征數(shù)不為1的情況招盲,這里暫且不討論。當(dāng)特征x的取值是連續(xù)值的時候嘉冒,問題就復(fù)雜了起來曹货。我們可以使用極大似然估計(jì)來解決這個問題。

極大似然估計(jì)

在極大似然估計(jì)中讳推,我們首先假設(shè)P(x|w_i)服從一個概率分布顶籽,常用的是正態(tài)分布,即
P(x|w_i;\mu,\sigma)=\frac{1}{\sqrt{2\pi}\sigma}\exp\left[-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2\right].
記參數(shù)\theta=(\mu,\sigma )娜遵,當(dāng)我們得到一組\theta時蜕衡,類條件概率P(x|w_i)隨之確定。

為了求解\theta设拟,令所有類別為w_i的樣本集合為D慨仿,假設(shè)D中樣本x_1,\cdots,x_n之間相互獨(dú)立,那么有
\begin{align} P(D|\theta)&=P(x_1,x_2,\cdots,x_n|\theta)=\prod_{i=1}^n p(x_i|\theta) \end{align}
P(D|\theta)被稱為似然函數(shù)纳胧,它描述了參數(shù)\theta的合理程度镰吆。一組合適的參數(shù)\theta應(yīng)能使得P(D|\theta)盡量大。所以跑慕,求解\theta最直觀的想法是找到一組\theta使得P(D|\theta)最大万皿。為了計(jì)算的方便摧找,我們定義對數(shù)似然函數(shù)
l(\theta)=\ln P(D|\theta)=\sum_{i=1}^n \ln P(x_i|\theta).
于是,\theta的估計(jì)值為
\hat{\theta}=\arg \max_{\theta} l(\theta).
由于極值點(diǎn)往往在導(dǎo)數(shù)等于0的地方取得牢硅,我們常常通過求導(dǎo)的方法求解上式蹬耘,即
\frac{\partial l(\hat{\theta})}{\partial \mu} = 0, \frac{\partial l(\hat{\theta})}{\partial \sigma}=0.
解得
\begin{align} \hat{\mu}&=\frac{1}{n} \sum_{i=1}^n x_i,\\ \hat{\sigma}&=\frac{1}{n}\sum_{i=1}^n (x_i-\hat{\mu})^2. \end{align}

引入EM算法

在上一節(jié),我們看到極大似然估計(jì)通過最大化似然函數(shù)的方法减余,找到模型的最佳參數(shù)综苔。在這個過程中,我們需要對對數(shù)似然函數(shù)求偏導(dǎo)位岔,令導(dǎo)數(shù)等于0如筛,進(jìn)而得到參數(shù)的估計(jì)值。然而抒抬,在某些復(fù)雜的模型中杨刨,由于存在“隱變量”,我們難以通過對對數(shù)似然函數(shù)求偏導(dǎo)的方法得到參數(shù)的估計(jì)值擦剑。

我們考慮如下的三硬幣問題

假設(shè)有3枚硬幣妖胀,分別記作A、B抓于、C做粤,這些硬幣正面朝上的概率分別為\pi,p,q。現(xiàn)進(jìn)行如下的拋擲實(shí)驗(yàn):首先擲硬幣A捉撮,根據(jù)其結(jié)果選擇硬幣B和硬幣C怕品,如果是正面選擇硬幣B,如果是反面選擇硬幣C巾遭;然后擲選出的硬幣肉康,記錄擲硬幣的結(jié)果,正面記作1灼舍,反面記作0吼和;獨(dú)立地重復(fù)n次實(shí)驗(yàn)(這里,n=10)骑素,觀測結(jié)果如下:
1,1,0,1,0,0,1,0,1,1.
假設(shè)只能觀測到擲硬幣的結(jié)果炫乓,不能觀測擲硬幣的過程。問如何估計(jì)三硬幣模型的參數(shù)\pi,p,q献丑。

\theta=(\pi,p,q)末捣。首先,讓我們嘗試使用極大似然估計(jì)的方法创橄,寫出對數(shù)似然函數(shù)箩做,然后求解\theta。不妨令每次實(shí)驗(yàn)中硬幣A的拋擲結(jié)果為z妥畏,硬幣B和C的拋擲結(jié)果為y邦邦。于是
P(y|\theta)=\sum_z P(y,z|\theta)=\sum_z P(z|\theta)P(y|z,\theta).
顯然安吁,z的取值有0、1兩種燃辖,并且P(z=0|\theta)=1-\pi,P(z=1|\theta)=\pi鬼店。而當(dāng)z=0時,意味著選擇了硬幣C黔龟,此時P(y|z,\theta)=q^y(1-q)^{1-y}薪韩;同理,當(dāng)z=1時捌锭,有P(y|z,\theta)=p^y(1-p)^{1-y}。于是罗捎,上式可展開為
P(y|\theta)=\pi p^y(1-p)^{1-y}+(1-\pi)q^y(1-q)^{1-y}.
對于三硬幣模型多次拋擲的結(jié)果Y=\left[y_1,y_2,\cdots,y_n\right]观谦,有
P(Y|\theta)=\prod_{i=1}^n P(y_i|\theta).
相應(yīng)的對數(shù)似然函數(shù)為
l(\theta)=\ln P(Y|\theta)=\sum_{i=1}^n \ln \left[ \pi p^y_i(1-p)^{1-y_i}+(1-\pi)q^{y_i}(1-q)^{1-y_i} \right].
事實(shí)證明對上式求偏導(dǎo),令導(dǎo)數(shù)等于0桨菜,是無法得到解析解的豁状。也就是極大似然估計(jì)無法解決上述問題。

使用EM算法求解

一方面倒得,假設(shè)我們知道模型參數(shù)\pi,p,q泻红,我們就可以預(yù)測某次實(shí)驗(yàn)中的拋擲結(jié)果來源于硬幣B的概率,不妨記\mu=P(z=1|y,\theta)霞掺,有
\mu = \frac{P(y|z=1,\theta)}{P(y|z=1,\theta)+P(y|z=0,\theta)} = \frac{\pi p^y(1-p)^{1-y}}{\pi p^y(1-p)^{1-y} + (1-\pi) q^y(1-q)^{1-y}}.
另一方面谊路,假設(shè)我們已知每次實(shí)驗(yàn)中拋擲結(jié)果來源于硬幣B的概率,我們就可以估計(jì)模型參數(shù)\pi,p,q菩彬,即
\begin{align} \hat{\pi} &= \frac{1}{n} \sum_{i=0}^n \mu_i,\\ \hat{p} &= \frac{\sum_{i=0}^n \mu_iy_i}{\sum_{i=0}^n \mu_i},\\ \hat{q} &= \frac{\sum_{i=0}^n (1-\mu_i)y_i}{\sum_{i=0}^n (1-\mu_i)}. \end{align}
也就是說缠劝,當(dāng)我們已知模型參數(shù)的時候,我們可以計(jì)算\mu的值骗灶;當(dāng)我們知道\mu的值時惨恭,我們可以估計(jì)模型參數(shù)。對于這種蛋雞問題耙旦,使用迭代法求解是最好不過了脱羡。也就是,先假設(shè)一組模型參數(shù)免都,比如\pi=0.5,p=0.5,q=0.5锉罐,然后計(jì)算\mu的值;接著使用\mu的值琴昆,去估計(jì)模型參數(shù)氓鄙。重復(fù)上述過程多次之后,我們就可以得到\hat{\pi}=0.5,\hat{p}=0.6,\hat{q}=0.6业舍。

在上述過程中抖拦,我們稱\mu為模型的隱變量升酣,也即是無法觀測到但也不是模型參數(shù)的變量。估計(jì)\mu的過程稱為E步态罪,使用\mu估計(jì)模型參數(shù)的過程稱為M步噩茄。下面使用python實(shí)現(xiàn)了對三硬幣模型的求解。

def E_step(pi,p,q,Y):
    Mu = []
    for y in Y:
        pyz1 = pi * p**y * (1-p)**(1-y)
        pyz0 = (1-pi) * q**y * (1-q)**(1-y)
        mu = pyz1 / (pyz1 + pyz0)
        Mu.append(mu)
    return Mu

def M_step(Mu,Y):
    n = len(Mu)
    pi = sum(Mu)/n
    p = sum([Mu[i]*Y[i] for i in range(n)]) / sum(Mu)
    q = sum([(1-Mu[i])*Y[i] for i in range(n)]) / (n-sum(Mu))
    return pi,p,q

def solve_tree_coin(Y,iter_num):
    pi = p = q = 0.5
    for i in range(iter_num):
        Mu = E_step(pi,p,q,Y)
        pi,p,q = M_step(Mu,Y)
        print(pi,p,q)


if __name__ == "__main__":
    Y = [1,1,0,1,0,0,1,0,1,1]
    solve_tree_coin(Y,5)

說句題外話复颈,三硬幣問題是沒有辦法正確估計(jì)模型的參數(shù)绩聘。如\pi = 0.6,p = 1,q = 0\pi=0.5,p=0.6,q=0.6 在輸出結(jié)果上是等價的。畢竟耗啦,對于這個模型觀測數(shù)據(jù)太少了凿菩,任何方法對此都無能為力。

下面我們將正式地對EM算法進(jìn)行介紹帜讲,并運(yùn)用EM算法求解混合高斯模型衅谷。

EM算法的思想

在這里不介紹EM算法的形式化定義(因?yàn)闆]有必要),只是概括一下EM算法的核心思想似将。

EM算法的全稱是Expectation Maximization Algorithm获黔,也就是期望極大算法。EM算法適用于含有隱變量的模型在验。求解過程分為E步和M步:在E步中求解隱變量的期望玷氏;在M步中使用隱變量的期望代替隱變量的值,求解模型參數(shù)腋舌。

理論上(有興趣的見李航的《統(tǒng)計(jì)學(xué)習(xí)方法)盏触,EM算法并不能保證得到全局最優(yōu)值,而且很依賴所選取初始值的好壞块饺,但EM算法簡化了很多復(fù)雜問題的求解耻陕。計(jì)算機(jī)科學(xué)中的許多方法都是基于這樣的思路。

使用EM求解GMM

首先介紹一下GMM刨沦。

GMM的全稱是Gauss Mixture Model诗宣,即混合高斯模型,也就是將多個高斯分布疊加在一起想诅。假設(shè)GMM中高斯分布的數(shù)量為M召庞,那么相應(yīng)的概率密度函數(shù)為
p(x) = \sum_{i=1}^M a_iN(x;\mu,\Sigma).
如下圖就是一個GMM概率密度函數(shù)的函數(shù)圖像。

概率密度函數(shù)P(x)=0.7N(-10,2)+0.3N(5,3)的函數(shù)圖像

GMM產(chǎn)生樣本的過程和三硬幣模型有些類似来破,首先按照先驗(yàn)概率a_i選擇一個高斯分布篮灼,然后產(chǎn)生一個滿足這個高斯分布的樣本。如下圖即為GMM產(chǎn)生的2維樣本數(shù)據(jù)徘禁。

為了使用EM算法诅诱,我們首先要確定模型中的隱變量。在GMM中送朱,隱變量是樣本屬于不同高斯分布的概率P(y=i)娘荡。于是在E步干旁,我們這樣估計(jì)隱變量
P(y_t=i)=\frac{a_iN(x_t;\mu_i,\Sigma_i)}{\sum_{i=1}^M a_iN(x_t;\mu_i,\Sigma_i)}.
在M步,模型參數(shù)的估計(jì)過程如下
\begin{align} a_i & =\frac{1}{n}\sum_{t=1}^n P(y_t=i)\\ \mu_i &= \frac{\sum_{t=1}^n P(y_t=i)x_t}{\sum_{t=1}^n P(y_t=i)}\\ \Sigma_t &= \frac{\sum_{t=1}^n P(y_t=i)(x_t-\mu_i)(x_t-\mu_i)^t}{\sum_{t=1}^n P(y_t=i)} \end{align}

介紹EM算法的大多文章都是拿GMM舉例的炮沐,但作為機(jī)器學(xué)習(xí)中的一類重要的思想争群,EM算法的應(yīng)用非常廣泛,如IBM翻譯模型大年、主題模型等等换薄。

先寫到這里吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翔试,一起剝皮案震驚了整個濱河市轻要,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垦缅,老刑警劉巖伦腐,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異失都,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幸冻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門井辜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燥透,“玉大人,你說我怎么就攤上這事】春迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵奕纫,是天一觀的道長署惯。 經(jīng)常有香客問我,道長延刘,這世上最難降的妖魔是什么漫试? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮碘赖,結(jié)果婚禮上驾荣,老公的妹妹穿的比我還像新娘。我一直安慰自己普泡,他們只是感情好播掷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撼班,像睡著了一般歧匈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砰嘁,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天件炉,我揣著相機(jī)與錄音勘究,去河邊找鬼。 笑死妻率,一個胖子當(dāng)著我的面吹牛乱顾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宫静,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼走净,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孤里?” 一聲冷哼從身側(cè)響起伏伯,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捌袜,沒想到半個月后说搅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虏等,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年弄唧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍衫。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡候引,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敦跌,到底是詐尸還是另有隱情澄干,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布柠傍,位于F島的核電站麸俘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惧笛。R本人自食惡果不足惜从媚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望患整。 院中可真熱鬧静檬,春花似錦、人聲如沸并级。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘲碧。三九已至稻励,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背望抽。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工加矛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煤篙。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓斟览,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辑奈。 傳聞我的和親對象是個殘疾皇子苛茂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345