什麼是狄利克雷分佈?狄利克雷過程又是什麼?

參考:

https://www.zhihu.com/question/26751755

https://cosx.org/2013/01/lda-math-beta-dirichlet

 

今天來講一下dirichlet distribution和dirichlet process怎麼回事。力求讓初學者看懂,而且我比較追求motivation,追求數學嚴謹性和簡潔性的大神請移步不要看了。不喜歡看各種細節的也可以直接跳着看文中的結論。

實際上這是學習nonparametric bayesian裏常見的困惑,有些同學碰到paper或者PPT讀着讀着發現怎麼就弄出一個dirichlet distribution了?這裏面有什麼intuition嗎?
讀三遍:要想簡單地理解,還得要先從簡單的例子講起。

要想易懂地理解dirichlet distribution,首先先得知道它的特殊版本beta distribution幹了什麼。而要理解beta distribution有什麼用,還得了解Bernoulli process。

首先先看Bernoulli process。要理解什麼是Bernoulli process,首先先看什麼Bernoulli trial。Bernoulli trial簡單地說就是一個只有兩個結果的簡單trial,比如拋硬幣
那我們就用拋一個(不均勻)硬幣來說好了,X = 1就是頭,X = 0就是字,我們設定q是拋出字的概率。
那什麼是bernoulli process?就是從Bernoulli population裏隨機抽樣,或者說就是重複的獨立Bernoulli trials,再或者說就是狂拋這枚硬幣n次記結果吧(汗=_=)。好吧,我們就一直拋吧,我們記下X=0的次數k.

現在問題來了。
Q:我們如何知道這枚硬幣拋出字的概率?我們知道,如果可以一直拋下去,最後k/n一定會趨近於q;可是現實中有很多場合不允許我們總拋硬幣,比如我只允許你拋4次。你該怎麼回答這個問題?顯然你在只拋4次的情況下,k/n基本不靠譜;那你只能"猜一下q大致分佈在[0,1]中間的哪些值裏會比較合理",但絕不可能得到一個準確的結果比如q就是等於k/n。

舉個例子,比如:4次拋擲出現“頭頭字字”,你肯定覺得q在0.5附近比較合理,q在0.2和0.8附近的硬幣拋出這個結果應該有點不太可能,q = 0.05和0.95那是有點扯淡了。
你如果把這些值畫出來,你會發現q在[0,1]區間內呈現的就是一箇中間最高,兩邊低的情況。從感性上說,這樣應當是比較符合常理的。

那我們如果有個什麼工具能描述一下這個q可能的分佈就好了,比如用一個概率密度函數來描述一下? 這當然可以,可是我們還需要注意另一個問題,那就是隨着n增長觀測變多,你每次的概率密度函數該怎麼計算?該怎麼利用以前的結果更新(這個在形式上和計算上都很重要)?

到這裏,其實很自然地會想到把bayes theorem引進來,因爲Bayes能隨着不斷的觀測而更新概率;而且每次只需要前一次的prior等等…在這先不多說bayes有什麼好,接下來用更形式化語言來講其實說得更清楚。

我們現在用更正規的語言重新整理一下思路。現在有個硬幣得到random sample X = (x1,x2,...xn),我們需要基於這n次觀察的結果來估算一下q在[0,1]中取哪個值比較靠譜,由於我們不能再用單一一個確定的值描述q,所以我們用一個分佈函數來描述:有關q的概率密度函數(說得再簡單點,即是q在[0,1]“分佈律”)。當然,這應當寫成一個條件密度:f(q|X),因爲我們總是觀測到X的情況下,來猜的q。

現在我們來看看Bayes theorem,看看它能帶來什麼不同:
[公式]

在這裏P(q)就是關於q的先驗概率(所謂先驗,就是在得到觀察X之前,我們設定的關於q的概率密度函數)。P(q|x)是觀測到x之後得到的關於q的後驗概率。注意,到這裏公式裏出現的都是"概率",並沒有在[0,1]上的概率密度函數出現。爲了讓貝葉斯定理和密度函數結合到一塊。我們可以從方程兩邊由P(q)得到f(q),而由P(q|x)得到f(q|x)。
又注意到P(x)可以認定爲是個常量(Q:why?),可以在分析這類問題時不用管。那麼,這裏就有個簡單的結論——關於q的後驗概率密度f(q|x)就和“關於q的先驗概率密度乘以一個條件概率"成比例,即:
[公式]

帶着以上這個結論,我們再來看這個拋硬幣問題:
連續拋n次,即爲一個bernoulli process,則在q確定時,n次拋擲結果確定時,又觀察得到k次字的概率可以描述爲:[公式]
那麼f(q|x)就和先驗概率密度乘以以上的條件概率是成比例的:
[公式]
雖然我們不知道,也求不出那個P(x),但我們知道它是固定的,我們這時其實已經得到了一個求f(q|x)的公式(只要在n次觀測下確定了,f(q)確定了,那麼f(q|x)也確定了)。

現在在來看f(q)。顯然,在我們對硬幣一無所知的時候,我們應當認爲硬幣拋出字的概率q有可能在[0,1]上任意處取值。f(q)在這裏取個均勻分佈的密度函數是比較合適的,即f(q) = 1 (for q in [0,1]) 。
有些同學可能發現了,這裏面[公式]那個[公式]乘上[0,1]的均勻分佈不就是一個Beta distribution麼
對,它就是一個Beta distribution。Beta distribution由兩個參數alpha、beta確定;在這裏對應的alpha等於k+1,beta等於n+1-k。而均勻分佈的先驗密度函數,就是那個f(q)也可以被beta distribution描述,這時alpha等於1,beta也等於1。

更有意思的是,當我們每多拋一次硬幣,出現字時,我們只需要alpha = alpha + 1;出現頭只需要beta = beta + 1。這樣就能得到需要估計的概率密度f(q|x)…

其實之所以計算會變得這麼簡單,是因爲被beta distribution描述的prior經過bayes formula前後還是一個beta distribution;這種不改變函數本身所屬family的特性,叫共軛(conjugate)

ok。講到這你應該明白,對於有兩個結果的重複Bernoulli trial,我們用beta prior/distribution就能解決。那麼加入我們有n個結果呢?比如拋的是骰子?
這時候上面的Bernoulli trial就要變成有一次trial有k個可能的結果; Bernoulli distribution就變成multinomial distribution。而beta distribution所表述的先驗分佈,也要改寫成一個多結果版本的先驗分佈。那就是dirichlet distribution。
均勻的先驗分佈Beta(1,1)也要變成k個結果的Dir(alpha/K)。dirichlet prior也有共軛的性質,所以也是非常好計算的。
簡而言之,就是由2種外推到k種,而看待它們的視角並沒有什麼不同。
他們有着非常非常非常相似的形式。

結論1:dirichlet distribution就是由2種結果bernoulli trial導出的beta distribution外推到k種的generalization

(佔坑,稍後繼續補充dirichlet process)
(sorry,最近很懶,結果看到Gaussian Process就先答了GP,有機會隨後補上=_=)
其它系列歡迎關注:
如何通俗易懂地介紹Gaussian Process? - 知乎用戶的回答
如何用簡單易懂的例子解釋隱馬爾可夫模型? - 知乎用戶的回答
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章