分层狄利克雷过程(Hierarchical Dirichlet Process, HDP)的构造与后验推理过程
题目描述:
分层狄利克雷过程(HDP)是一种非参数贝叶斯模型,用于对共享潜在结构的多个分组数据进行聚类。例如,在主题建模中,每个文档对应一个分组(文档内的词),所有文档共享一个全局的主题集合,但每个文档的主题比例不同。HDP通过构建一个分层结构:顶层是一个全局的狄利克雷过程(DP),用于生成所有分组共享的潜在分布(如主题分布);底层每个分组使用一个依赖全局DP的DP,来生成组特定的分布(如文档特定主题比例)。本题将详细讲解HDP的构造、数学模型、以及后验推理(如使用Gibbs采样)的完整过程。
解题过程:
我们以主题建模为例,假设有 \(J\) 个文档(分组),每个文档包含一系列词。目标是自动发现所有文档共享的主题集合,并推断每个文档的主题比例。
步骤1:理解狄利克雷过程(DP)的基本概念
狄利克雷过程 \(DP(\gamma, H)\) 是一个分布上的分布,其中:
- \(\gamma > 0\) 是浓度参数,控制分布的离散程度。
- \(H\) 是基分布(连续分布),例如主题上的分布。
- DP的每次采样是一个离散分布(即使 \(H\) 连续),形式为:
\[ G = \sum_{k=1}^{\infty} \pi_k \delta_{\phi_k} \]
其中 \(\pi_k\) 是权重(满足 \(\sum_k \pi_k = 1\)),\(\phi_k \sim H\) 是原子(如主题参数),\(\delta\) 是Dirac函数。
DP可以通过“折棍表示(Stick-breaking)”构造:
\[\pi_k = \beta_k \prod_{l=1}^{k-1} (1 - \beta_l), \quad \beta_k \sim \text{Beta}(1, \gamma), \quad \phi_k \sim H \]
这表示先折出第一段比例 \(\beta_1\),剩余部分再折第二段 \(\beta_2\),依此类推。
步骤2:分层狄利克雷过程(HDP)的构造
HDP的目标是让多个分组共享同一个全局的原子集合 \(\{\phi_k\}\),但每个分组有不同的权重分布。
- 顶层全局DP:
\[ G_0 \sim DP(\gamma, H) \]
\(G_0\) 是一个全局的离散分布,形式为:
\[ G_0 = \sum_{k=1}^{\infty} \pi_k \delta_{\phi_k} \]
它提供了所有分组共享的潜在主题(原子)集合 \(\{\phi_k\}\)。
- 底层分组DP:
对于每个文档 \(j\)(分组),采样一个组特定的分布:
\[ G_j \sim DP(\alpha, G_0) \]
这里基分布是 \(G_0\),意味着 \(G_j\) 从 \(G_0\) 中继承相同的原子 \(\{\phi_k\}\),但具有不同的权重 \(\{\pi_{jk}\}\)。实际上,由于 \(G_0\) 是离散的,\(G_j\) 可写为:
\[ G_j = \sum_{k=1}^{\infty} \pi_{jk} \delta_{\phi_k} \]
权重 \(\pi_{jk}\) 依赖于全局权重 \(\pi_k\) 和组内浓度参数 \(\alpha\)。
- 数据生成:
对于文档 \(j\) 中的第 \(i\) 个词:- 采样主题指示变量:\(\theta_{ji} \sim G_j\)。
- 由于 \(G_j\) 是离散的,\(\theta_{ji}\) 必然取某个 \(\phi_k\),即 \(\theta_{ji} = \phi_k\) 以概率 \(\pi_{jk}\)。
- 生成观测词:\(x_{ji} \sim \text{Categorical}(\phi_k)\),其中 \(\phi_k\) 是主题 \(k\) 的词分布(例如,\(\phi_k \sim \text{Dirichlet}(\beta)\))。
这样,所有文档共享相同的主题参数 \(\{\phi_k\}\),但每个文档的主题权重 \(\pi_{jk}\) 不同。
步骤3:HDP的等价表示与先验
直接使用 \(G_j\) 的无限表示不便于计算。通常采用以下等价构造:
- 全局主题权重:使用折棍表示得到全局权重 \(\pi_k\)(来自 \(G_0\))。
- 组特定主题比例:对于文档 \(j\),主题 \(k\) 的权重为:
\[ \pi_{jk} = \pi_k \cdot \text{局部调整} \]
更精确地,通过引入“分层”结构,可以证明 \(G_j\) 的采样等价于:
- 采样一个全局的原子集合 \(\{\phi_k\}\) 和权重 \(\{\pi_k\}\)。
- 对于每个文档 \(j\),采样主题分配 \(z_{ji}\) 的分布为:
\[ z_{ji} \sim \text{Categorical}(\{\pi_{jk}\}_{k=1}^{\infty}) \]
其中 $ \pi_{jk} $ 与 $ \pi_k $ 相关。
实际计算中,常用“中国餐馆过程(CRP)”类比:
- 顶层CRP:全局是一个中国餐馆,每个桌子对应一个主题 \(k\),桌子上的菜是 \(\phi_k\)。
- 底层CRP:每个文档是一个独立的中国餐馆,但顾客(词)可以选择:
a) 坐一个已有桌子(使用已有主题 \(k\))。
b) 以一定概率开新桌子,并从全局菜单 \(G_0\) 中选一个新菜(新主题)。
这确保了新主题在全局共享。
步骤4:后验推理——Gibbs采样算法
由于HDP涉及无限维分布,后验推断常用Gibbs采样,结合“截断”或直接使用非参数表示(如CRP)。这里以CRP表示的直接采样为例。
变量定义:
- \(z_{ji}\):文档 \(j\) 中词 \(i\) 的主题分配(取值主题索引 \(k\))。
- \(\phi_k\):主题 \(k\) 的词分布(参数)。
- \(m_{jk}\):文档 \(j\) 中分配到主题 \(k\) 的词数。
- \(n_{k}\):全局中主题 \(k\) 出现的总词数。
- \(K\):当前已出现的主题数(可增长)。
采样步骤:
- 采样主题分配 \(z_{ji}\):
对于每个词 \(x_{ji}\):- 移除当前计数:\(m_{jz_{ji}}\) 减1,\(n_{z_{ji}}\) 减1。
- 计算该词属于每个已有主题 \(k\) 的条件概率:
\[ p(z_{ji} = k \mid \cdots) \propto (m_{jk} + \alpha \pi_k) \cdot p(x_{ji} \mid \phi_k) \]
其中 $ \pi_k $ 是全局主题 $ k $ 的权重,估计为 $ \pi_k \propto n_{k} $(基于DP性质)。
- 计算属于新主题 \(k_{\text{new}}\) 的概率:
\[ p(z_{ji} = k_{\text{new}} \mid \cdots) \propto \alpha \cdot \pi_{\text{new}} \cdot p(x_{ji} \mid H) \]
其中 $ \pi_{\text{new}} $ 是新主题的预期权重(与 $ \gamma $ 相关),$ p(x_{ji} \mid H) $ 是基分布 $ H $ 的边际似然(即词 $ x_{ji} $ 在新主题下的概率,通过对 $ \phi $ 积分得到,在Dirichlet先验下可解析计算)。
- 根据上述概率采样 \(z_{ji}\),若采样到新主题,则增加 \(K\),并采样新主题参数 \(\phi_{K+1} \sim H\)。
- 更新全局主题权重 \(\pi_k\):
在给定所有 \(z_{ji}\) 后,全局DP的后验可以通过另一个折棍过程或直接估计:
\[ \pi_k \propto n_k - \gamma \log(1 - \xi) \]
更实用的是,使用“分层”CRP的表示,通常将 \(\pi_k\) 积分掉,直接基于计数采样。
- 采样主题参数 \(\phi_k\):
对于每个主题 \(k\),收集所有分配为 \(k\) 的词,计算后验:
\[ \phi_k \sim \text{Dirichlet}(\beta + \mathbf{n}_k) \]
其中 \(\mathbf{n}_k\) 是主题 \(k\) 中每个词的计数向量,\(\beta\) 是先验参数。
-
更新超参数 \(\alpha, \gamma\)(可选):
可以使用额外的Gamma先验,通过采样或优化来更新。 -
迭代:
重复步骤1-4直到收敛。
步骤5:模型解释与应用
- 主题发现:采样后,每个主题 \(\phi_k\) 对应一个词分布,可解释为一个“主题”。
- 文档表示:文档 \(j\) 的主题比例由 \(m_{jk} / \sum_k m_{jk}\) 估计。
- 自动确定主题数:由于DP的非参数性,主题数 \(K\) 会在采样中自动调整,数据决定复杂度。
关键点总结:
- HDP通过顶层DP实现全局主题共享,底层DP实现组特定权重。
- 推理时使用CRP类比,允许动态增加主题。
- Gibbs采样通过逐词重新分配主题,结合全局和局部计数更新后验。
HDP是主题模型(如HDP-LDA)、混合模型分层扩展的基础,广泛应用于文本、图像和基因序列分析中。