作者:Thomas Wayne
链接:http://www.zhihu.com/question/26751755/answer/80931791
来源:知乎
著作权归作者全部。商业转载请联系作者获得授权。非商业转载请注明出处。
近期问的人有点多,打算写一系列“简单易懂地理解XXX系列”。
今天来讲一下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。看看它能带来什么不同:
tex=P%28q%7Cx%29+P%28x%29+%3D+P%28X%3Dx%7Cq%29P%28q%29">
在这里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]) 。
有些同学可能发现了。这里面
tex=f%28q%7Cx%29+%5Csim+q%5E%7Bk%7D%281-q%29%5E%7Bn-k%7D">,那个
tex=q%5E%7Bk%7D%281-q%29%5E%7Bn-k%7D">乘上[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