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的求解过程。

转:DP和HDP的更多相关文章

  1. hdu5593/ZYB's Tree 树形dp

    ZYB's Tree    Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一颗NN个节点的树,现在他希望你对于每一个点,求出离每个点距 ...

  2. BZOJ 3057圣主的考验题解

    老师居然考这么毒瘤的题目!!!!! 很容易想到dp,f[i][j]表示有i个节点,左子树的最深深度为j的方案数 枚举左子树有多少节点然后转移,复杂度为n^3 T飞~ 我们考虑到有深度为h的树的节点有多 ...

  3. 《Dynamic Topic Detection and Tracking: A Comparison of HDP, C-Word, and Cocitation Methods》笔记

    原文地址:http://onlinelibrary.wiley.com/doi/10.1002/asi.23134/abstract 黄色背景是我认为比较重要的,红色字体是我自己的话. 动态主题监测与 ...

  4. 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源代码,关于dpi的区分的值

    上一篇博客说了一下.9.png图片http://blog.csdn.net/qq_23195583/article/details/46737419 当然,点九的是指的能够进行拉伸的.那么假设图片不能 ...

  5. HDU 1069 Monkey and Banana (dp)

    题目链接 Problem Description A group of researchers are designing an experiment to test the IQ of a monk ...

  6. CSU - 1547 Rectangle —— DP(01背包)

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1547 题解: 关键是怎么处理长度为1的长方形.当长度为1的长方形的个数cnt> ...

  7. poj 2411 Mondriaan's Dream (轮廓线DP)

    题意:有一个n*m的棋盘,要求用1*2的骨牌来覆盖满它,有多少种方案?(n<12,m<12) 思路: 由于n和m都比较小,可以用轮廓线,就是维护最后边所需要的几个状态,然后进行DP.这里需 ...

  8. 2018-2019 ICPC, NEERC J. Streets and Avenues in Berhattan(DP)

    题目链接:https://codeforc.es/contest/1070/problem/J 题意:给出一个长度为 k 的字符串,选出 n 个和 m 个不同位置的字符构成两个字符串,使得两个字符串相 ...

  9. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

随机推荐

  1. Java编辑环境搭建

    1.Java开发环境搭建 这里主要说的是在Windows系统下的环境搭建 JDK的安装 java的sdk简称JDK ,去其官方网站下载最近的JDK即可http://www.oracle.com/tec ...

  2. cakephp中find('list')的使用

    运用一.快速实现下拉菜单 控制器中,使用find('list')返回的是键值对的数组,键名是array的第一个参数id,键值就是第二个参数content. public function list_s ...

  3. 用列主元消去法分别解方程组Ax=b,用MATLAB程序实现(最有效版)

    数值分析里面经常会涉及到用MATLAB程序实现用列主元消去法分别解方程组Ax=b 具体的方法和代码以如下方程(3x3矩阵)为例进行说明: 用列主元消去法分别解方程组Ax=b,用MATLAB程序实现: ...

  4. python切片技巧

    写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz” for x in range(101): p ...

  5. [SHELL]输出目录下所有的可执行文件,批量创建用户

    #!/bin/bash IFS=: for folder in $PATH #PATH变量分隔符为: do echo $folder echo ------------------ for file ...

  6. 在Arch上安装VSCode的方法

    首先去特硬去下载vscode的安装包 mkdir /tmp/vscode cd /tmp/vscode/ wget https://az764295.vo.msecnd.net/public/0.3. ...

  7. JavaScriptSerializer的实现-常用JsonHelper类

    最近开始自己写自己的项目了,终于鼓起勇气迈出了自己认为的这一大步! 先来通用的helper类和大家分享一下 ,第一个是Object转为json序列的类,这个网上有很多,但我实践了一下大部分都不能用的, ...

  8. ubuntu16.04图形界面安装中文输入法,中文展示

    打开system Settings 设置   打开设置语言   安装Language Support   点击installed languages 选择chinese 打勾,安装   安装IBus框 ...

  9. .Net并行编程 - 并行任务基础知识

    在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的.它的静态属性Task.Factory是TaskFactory类的一个实例, ...

  10. POJ 1741 Tree(树的分治)

    Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...