转: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的求解过程。
转:DP和HDP的更多相关文章
- hdu5593/ZYB's Tree 树形dp
ZYB's Tree Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一颗NN个节点的树,现在他希望你对于每一个点,求出离每个点距 ...
- BZOJ 3057圣主的考验题解
老师居然考这么毒瘤的题目!!!!! 很容易想到dp,f[i][j]表示有i个节点,左子树的最深深度为j的方案数 枚举左子树有多少节点然后转移,复杂度为n^3 T飞~ 我们考虑到有深度为h的树的节点有多 ...
- 《Dynamic Topic Detection and Tracking: A Comparison of HDP, C-Word, and Cocitation Methods》笔记
原文地址:http://onlinelibrary.wiley.com/doi/10.1002/asi.23134/abstract 黄色背景是我认为比较重要的,红色字体是我自己的话. 动态主题监测与 ...
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源代码,关于dpi的区分的值
上一篇博客说了一下.9.png图片http://blog.csdn.net/qq_23195583/article/details/46737419 当然,点九的是指的能够进行拉伸的.那么假设图片不能 ...
- HDU 1069 Monkey and Banana (dp)
题目链接 Problem Description A group of researchers are designing an experiment to test the IQ of a monk ...
- CSU - 1547 Rectangle —— DP(01背包)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1547 题解: 关键是怎么处理长度为1的长方形.当长度为1的长方形的个数cnt> ...
- poj 2411 Mondriaan's Dream (轮廓线DP)
题意:有一个n*m的棋盘,要求用1*2的骨牌来覆盖满它,有多少种方案?(n<12,m<12) 思路: 由于n和m都比较小,可以用轮廓线,就是维护最后边所需要的几个状态,然后进行DP.这里需 ...
- 2018-2019 ICPC, NEERC J. Streets and Avenues in Berhattan(DP)
题目链接:https://codeforc.es/contest/1070/problem/J 题意:给出一个长度为 k 的字符串,选出 n 个和 m 个不同位置的字符构成两个字符串,使得两个字符串相 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
随机推荐
- letsencrypt证书-使用certbot申请wildcard证书
目录 1. certbot安装 2. 认证方式 3. 运行命令 4. 更新 1:下载 2:配置 3:申请证书 4:续期证书 1. certbot安装 cd /usr/local/src wget ht ...
- 使用keytool工具产生带根CA和二级CA的用户证书
使用keytool工具产生带根CA和二级CA的用户证书 1 生成根CA 1.1 生成根CA证书 根CA实际是一张自签CA,自签CA的使用者和颁发者都是它自己.使用下面的命令生成根证书,如果没有指定 ...
- 如何往eclipse中导入maven项目
现在公司中大部分项目可能都是使用maven来构建,假如现在摆在你面前有一个maven的项目,如果你要学习它,如何将它导入到像eclipse这样的集成开发工具中呢,以项目public_class_1为例 ...
- 简单的switch嵌套
//添加list数据 1 public static void main(String[] args) { List<String> al = new ArrayList<Strin ...
- [Clr via C#读书笔记]Cp6类型和成员基础
Cp6类型和成员基础 成员 常量:字段(静态字段和实例字段):实例构造器:类型构造器(用于静态字段的构造):方法(静态方法和实例方法):操作符重载(本质是一个方法):转换操作符:属性(本质还是方法): ...
- spring boot 中文乱码问题
在刚接触spring boot 2.0的时候,遇到了一些中文乱码的问题,网上找了一些解决方法. 这里自己做个汇总. 在application.properties文件中添加: spring.http. ...
- 使用Promise链式调用解决多个异步回调的问题
使用Promise链式调用解决多个异步回调的问题 比如我们平常经常遇到的一种情况: 网站中需要先获取用户名,然后再根据用户名去获取用户信息.这里获取用户名getUserName()和获取用户信息get ...
- Python中的global和nonlocal
在Python中,一个变量的scope范围从小到大分成4部分:Local Scope(也可以看成是当前函数形成的scope),Enclosing Scope(简单来说,就是外层函数形成的scope), ...
- Unity3D 入门 - 工作区域介绍 与 入门示例
一. 工作区域详解 1. Scence视图 (场景设计面板) scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置; -- 示例 : 创建一个球体, 控制摄 ...
- 系统常量对话框QT实现
1.运行结果: 2.代码 main.cpp #include "constantdiag.h" #include <QtWidgets/QApplication> in ...