zoukankan      html  css  js  c++  java
  • 转:DP和HDP

    Dirichlet Process and Hierarchical Dirichlet Process

    原文:http://hi.baidu.com/zentopus/item/46a622f5ef13e4c5a835a28e

    Dirichlet Process and Hierarchical Dirichlet Process

           在这篇文章里,我会初步地介绍Dirichlet Process以及Hierarchical Dirichlet Process,不过仅仅局限于模型本身,并不涉及其inference和具体的application。

           首先,我将简单地介绍Dirichlet分布。Dirichlet分布可以看做是分布之上的分布。其定义为对于一个K维的probability simplex:


       

           我们说这组是Dirichlet distributed, 参数为如果其满足:
       

           如何理解这个定义呢?我们可以举个例子:假设我们有一个从魔术店买来的骰子,我们不知道这是不是一个和普通骰子一样均匀的骰子,即每面出现的概率都是1/6。那么我们现在就可以用一个分布来描述我们对于这个骰子的uncertainty,也就是说,我们想知道这个骰子是一个公平的骰子的概率是多少。那么这个分布,就可以是一个Dirichlet Distribution,只要我们可以将这个分布描述为上述的数学形式。我们再看一眼这个例子,投掷一次骰子,必然会有一面出现(这是一个好骰子),那么六面出现的概率总和必然为1,换句话说,我们可以用这样一个分布来描述骰子出现的概率。而后我们又想知道,这样一个分布出现的概率是多少,那么我们就可以用Dirichlet分布来描述它。从而我们可以说,Dirichlet分布是一个分布之上的分布。
        

    Dirichlet Process

        接下来,我们将从Dirichlet分布过渡到Dirichlet Process。

        首先,我们先来看一下probability measure的概念:我们定义G为可度量空间X上的一个probability measure,如果其满足:

           

           我们还是从刚才的骰子的例子开始,我们现在认为整个骰子所描述的事件空间为一个可度量的空间。一个骰子投掷出去之后,六面必然有一面出现,那么我们可以自然地将整个空间分成为6个部分,我们称每一个部分为一个划分。那么针对这种六个划分的情况,我们可以有一个对应于这个划分的Dirichlet分布。现在我们想做一些调整,我们将骰子投掷出去的结果分成了2种,一种是大{4,5,6},另外是小,对应于{1,2,3}。那么我们可以认为整个空间,被分割成为了2个划分,那么相应的,我们可以对这样一种划分有一个对应的Dirichlet分布。现在我们将其进行一个一般性的描述。假设我们现在有一个可度量的空间X,其上的任意一个有限(finite)划分(partition)满足:


           我们说一个probability measure G服从都Dirichlet Process,如果其满足:对于这个可度量空间上的任意一个有限划分,以及一个实数一个probability measure G0:



           这里G0称作base measure,有些类似于这个DP的均值(mean),称作Strength parameter, 有些类似于这个DP的inverse-variance,在描述一个DP的时候,我们写作:


           接下来,我将简单介绍一下其对应的几种常见的表现形式

    The Chinese Restaurant Process

           把Chinese Restaurant Process(CRP)放在最前,是我认为这是最容易理解的一种表现形式。其对应的并不是G本身,而是对应一个从G进行sampling的过程。

           假设现在有一家中餐馆,里面有无限多的桌子,当然,不是所有桌子上都坐了人。首先进来第一个顾客,第一个顾客只能坐在一号桌子。他坐下之后点了一个菜(这个菜的分量足够大)。然后进来了第二个顾客,他看了一眼一号桌的菜,如果他喜欢吃的话,就坐到一号桌去,如果不喜欢的话,就另外再开一桌,自己点菜。假设这个过程一直下去,当第i个顾客进店的时候,假设这时候已经有了k桌菜,这个顾客巡视了一圈,然后寻找自己喜欢的菜。我们认为他是一个具有大众口味的人,他选择某一桌的概率,完全正比于这桌上坐了多少个顾客。如果他实在没有找到喜欢的菜,他也可以新开一桌,新开一桌的概率正比于某个初始的数值。

           现在我们数学一点来看待这个过程:假设每一个sample,对应于一个顾客。那么我们可以认为第i个sample选择桌子k的概率为的概率,代表了这桌的菜。这个概率正比于已经坐在这桌的顾客数量,而这个顾客开一个新桌的概率则正比于初始化的参数.

           从刚才的描述中,我们已经看出了Dirichlet Process所获得的样本是离散的,并且其抽样过程中体现出了一种聚类的特性。而这些特性不受Base Measure是离散或者连续的影响。

           出了CRP之外,还有一个非常类似的方式,称之为Polya urn scheme(Blackwell 1973)。这个过程和CRP非常相似。假设我们现在有一组samples:


           这组样本是i.i.d的,并且其满足:


           我们可以这样理解抽样的过程:我们现在口袋里有很多很多球,都是不同颜色的。我们从中取出一个球,鉴别了它的颜色,然后拿一个和这个球一样颜色的球和这个球一块儿放回去。如此往复,得到了我们现有的一组样本。

           我们和CRP统一一下,则这个过程可以表现为:



           如果G的sample可以满足上述的分布,我们就认为从G符合DP。


    Stick-breaking Construction

           除了CRP之外,我们还可以通过别的方式来构造一个DP,这就是Stick-breaking construction。整个构造过程如下:



           我们观察上面的这个过程,可以发现sample的过程,就相当于CRP中给每个桌子赋予一个值,而获取的过程,则是确定每个桌子上的顾客数量。

           我们注意到:


           所以,我们可以将解释为一个random probability measure。并且,如果是以这样的方式产生的,我们可以将其写为:


           GEM代表三个人名,分别为:Griffith,Engen和McCloskey


    Dirichlet Process Mixture

           另一个理解DP的角度,就是从一个混合模型来看。假设在一个混合模型中,我们不知道component的明确数量,这时候我们应该怎么处理呢?常规的方法是,重复做多次试验,每次试验中假设不同的数量的component,而后利用AIC,BIC等判别方式来进行选择。但是这样的方式又耗时又费力,有没有轻松一些的方式呢?DP mixture model给了我们一个新的选择,其关键点在于,认为空间中是有无限多的mixtrue component的,但是根据我们的数据,只有其中有限个的component被激活了,并且,这些激活的component的proportion满足一个Dirichlet Distribution。下面我们就从一个有限的mixture model出发,来推广到一个DP mixtrue model。

           我们假设这个mixtrue model有L个component,我们用来表示每个component的proportion,并且,我们给这个proportion加上一个对称的Dirichlet先验,则我们有:


           我们用z代表每个sample的component assignment,即选中了哪一个component,用代表每个component的参数,而这组参数符合一个分布G0,则我们有:



           我们此时可以得到一个分布


           而如果我们将L推向infinite,则这个模型便成为了DP mixture, 如同下图



           我们再完整地看一次DP mixture的生成过程:



    Why Dirichlet Process

           我们用了这么复杂的数学手段,搞出来一个DP,是为什么呢?我们观察DP,发现其有一个非常重要的特性,即在抽样的过程中,可以获取到值相等的2个样本。这有什么重要意义呢?这意味着这一过程本身在重复抽样的过程中,就完成了一个聚类的过程。并且我们注意到,DP对于其Base Measure并无要求,也就是说其Base Measure可以为连续的分布。而我们知道,对于一个连续的分布,其抽样的过程中,两个样本完全相同的概率为绝对的0,而DP则可以在这个分布的基础上,将样本离散化,使得2个样本的值相同的概率不为0。

    Hierarchical Dirichlet Process
           

           我们发现DP具有很好的聚类的特性,并且我们也不用事先设定好类别的数量,使得整个过程变得更为智能。
     
           那么我们现在考虑另一个问题,假设我们已经有了很多数据,并且数据自身是按照组别出现的,每一组数据都可以看做一个mixture model。除了组别内部是mixture model之外,我们还希望这些mixture component是可以share的。我们换一个角度来看这个问题:假设我们现在有一个巨大的空间,整个空间中包含了无数的mixture component,我们每次选择其中的几个,然后利用这几个component生成一组数据。我们把一组一组的数据放在一起,就得到了我们现在所拥有的数据。我们现在希望可以用mixture model来描述这样一种数据,DP可以帮上什么忙么?
     
           我们注意到,在每一组数据中,我们需要进行一次clustering,这意味着我们可以选择DP来描述某一组数据。但是我们又希望在整个数据中share component,一个很原始的原始的想法,就是限制DP的Base Measure为离散的,从而让我们有固定的component可以进行选择。但是这样就使得问题失去了一般性,并且我们还需要面对一个问题,如何选择这样一个Base Measure以及其component数量。这时候,我们发现这个问题其实和针对每一个组内的问题是一致的,那么我们很自然地就想到了,在这一层上我们再利用一次DP来描述,从而使得我们可以克服这些麻烦的问题。那么在DP之上再引入一层DP的模型,就是Hierarchical Dirichlet Process(HDP)。其图模型可以参看下图



           现在我们从生成模型的角度,来看一下这整个的过程:



    Chinese Restaurant Franchise

           和DP一样,我们也可以用中餐馆这样一个描述方式来加强对于这个问题的理解。

           这次,我们不是有一个中餐馆,我们有一家中餐连锁店,每一家都有一样的一份菜单。对于第j家餐馆,我们考虑其第i个顾客。和之前一样,这个顾客走进这家餐馆之后,选择坐在已有的一桌,或者是新开辟一桌。不过这里有一点特别的是,我们允许不同的餐馆中的不同的桌子点相同的菜,因为这些顾客是从同一份菜单里点菜的,当然,每桌还是只有一个菜。那么从一个餐馆的层面来说,我们有:



           那么,在选择每桌的菜的层面上,我们有:



           我们注意到,在整个过程中,各种菜是可以在组间和组内共享的,这是HDP的关键特性。

    Stick-breaking Construction

           现在,我们再从Stick-breaking Construction的角度来看一看HDP。

           从图中我们可以看出,G0是符合DP的,根据之前我们对于DP的描述,我们有:


           其中:


           既然G0有support,那么自然的,以G0为Base Measure的Gj也有相同的support,则:


           其中,满足:


           在给定的情况下,之间是相互独立的。那么之间的关系又是如何呢?

           我们知道,根据DP的定义,对于可度量空间上的任意一种有限划分{A1,A2,...,Ar},我们有:


           那么,这也就意味着:



           从这个式子中,我们就不难看出:


           而,我们则认为其均为probability measure。

           那么对于图中所描述的混合模型,我们的完整的生成模型为:


           其中



    Discussion

           相同的问题,我们为什么要使用HDP?最基本的理由是,如果我们遇到这样的数据集的时候,即一个component会不断变化的mixture model,并且在subgroup中,component是可以共享的这样一个数据集,我们就可以利用HDP来进行建模。实际中,HDP也已经被广泛的使用,应用包括topic modeling,cognitive science等等。

           HDP本身是Dependent Dirichlet Process(DDP)的一种具体的形式,它能够有效地描述这种垂直的层级关系。但是HDP也有局限性,其并不能描述即时变化,不能够描述component的生成与消亡。而在解决这个问题上,目前我们可以依靠Poisson Process Based Dependent Dirichlet Process来给出一个方案,这其中利用了Poisson Process,Gamma Process以及DP的内在关系,具体可以看Dahua Lin的NIPS 2010文章。有时间的话,我也会把对那个模型做一个简单的描述。

           HDP可以利用Variational Inference和Gibbs Sampling来进行"求解",Wang Chong也提出了一种Online的算法,其中利用了一种不同的Stick-breaking的构造方式,来使得上下两层关系之间进行解耦,从而能够进行Online的求解过程。

  • 相关阅读:
    iOS开发笔记 — Text、UI交互细节、两个动画效果等
    iOS数据库存储数组或字典等数据
    NSMutableAttributedString使用
    进军OC之必备C语言知识点
    iOS开发之c语言基础 扩展知识点 及 企业面试题
    iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习
    iOS开发之c语言基础Lesson-10 动态内存管理 上课笔记 与 试题练习
    指针与数组的区别和联系
    iOS开发之c语言基础Lesson-09 高级指针 上课笔记 与 试题练习
    iOS开发之c语言基础Lesson-08 指针 上课笔记 与 试题练习
  • 原文地址:https://www.cnblogs.com/lifegoesonitself/p/3423363.html
Copyright © 2011-2022 走看看