结构化概率模型

结构化概率模型

结构化概率模型(Structured Probabilistic model),就是利用图论(graph theory)中的图来表示概率分布中相互之间作用的随机变量的关系。深度学习经常面对的问题是如何理解具有丰富结构的高维数据的问题,例如图片、语音、文本等等。除了经典的分类问题如图像识别、语音识别等,有的时候我们还要处理比分类更复杂的任务,如分布密度估计,降噪,填补损失数据,取样等等。我们无法仅仅用一个大型的查找表(look-up table)来处理这些问题,例如假如我们要模拟具有\(n\)个元素每个元素可以取\(k\)个不同值的随机向量 \(\overrightarrow{x}\) 的分布,我们如果采用查找表就需要 \(k^n\) 个参数,我们需要很大的存储空间,需要海量的数据才能防止过拟合,而且预测或者取样的时间也会很长。

使用大型查找表的问题在于我们要模拟所有变量之间的相互关系,但实际问题中常常只有某些变量和其他变量发生直接作用,而图(graph)就可以很好的表示随机变量之间的作用关系,其中每个节点(node)代表了一个随机变量,而每条边(edge)代表了两个随机变量之间有直接作用,而连接不相邻节点的路径(path)就代表了简介相互作用。图可以分为两种:有向图(directed graph)无向图(undirected graph)

有向图

有向图又被称作信念网络(belief network)或者贝叶斯网络(bayesian network),图中的边是有方向的,即从一个节点指向另一个节点,其方向代表了条件概率分布,例如从\(a\)指向\(b\)的边代表了\(b\)的概率分布依赖于\(a\)的值。一个简单的有向图如下图所示:

上图对应的概率分布可以表示为 \(p\left(t_0, t_1, t_2\right)=p\left(t_0\right) p\left(t_1 \mid t_0\right) p\left(t_2 \mid t_1\right)\) ,一般的图的概率分布可通过\(p(x)=\prod_i p\left(x_i \mid P a_G\left(x_i\right)\right)\) 来表示,其中 \(P a_G\left(x_i\right)\) 代表了图G中节点 \(x_i\) 的所有父节点即指向它的节点。和查找表方法相比较,假如条件概率最多出现 \(\mathrm{m}\) 个变量,则有向图复杂度为 \(O\left(k^m\right)\) ,假如我们设计的模型 \(m \ll n\) ,则其效率远高于查找表方法。

无向图

有向图适用于信息流动方向比较明确的问题,而对于其他因果律不明确的问题,我们需要用无向图来表示,无向图也被叫做马尔科夫随机场(Markowv random fields)或马尔科夫网络(Markov Network)。在无向图中,边是没有方向的,且不代表条件概率,一个简单的无向图如下图所示:

对于无向图,如果一个子集包含的所有点两两之间均相互连接,则这个集合叫做团(clique),简记 做 \(C\) ,用 \(\phi(C)\) 来表示团 \(C\) 的所有变量的联合概率分布,则整个图的非归一化的概率分布 (unnormalized probability distribution)可表示为 \(\tilde{p}(x)=\prod_{C \in G} \phi(C)\) ,为了使概率归一 化,我们需要引入配分函数 (partition function) \(Z=\int \tilde{p}(x) d x\) ,归一化后的概率即可表示为 \(p(x)=\frac{1}{Z} \tilde{p}(x)\) 。由于\(Z\)的形式是积分形式,这会导致最大似然估计遇到计算难题,这类问题的解决在18章中会介绍用近似方法求配分函数。
处理具体问题时,常常需要假设对于所有的 \(x , \tilde{p}(x)>0\) ,一个可以保证这一条件的模型是基于能量的模型(energy-based model),即 \(\tilde{p}(x)=\exp (-E(x))\) ,由于取指数后总是正值,这保证了所有状态的概率大于零。基于能量的模型也被称作玻尔兹曼机(Boltzmann machine)
当我们想从模型中取样时,对于有向图,我们可以利用ancestral sampling,即对图中的变量进行拓扑排序(topological ordering),使得对于所有 \(i, j\) ,满足假如 \(x_i\)\(x_j\) 的父节点,则 \(j>i\) 。这样,我们就可以先取样 \(x_1 \sim P\left(x_1\right)\), 然后取样 \(P\left(x_2 \mid P a_G\left(x_2\right)\right)\) ,以此类推,最后取样 \(P\left(x_n \mid P a_G\left(x_n\right)\right)\)

Gibbs Sampling

但是对于无向图,我们无法进行拓扑排序,通常采取的方法是Gibbs sampling。Gibbs Sampling 是一种马尔科夫链蒙特卡洛算法(Markov Chain Monte Carlo,简称MCMC),其基本思想是假设我们有 \(\mathrm{n}\) 个变量,初始的样本表示为 \(\left(x_1^{(0)}, x_2^{(0)}, \ldots, x_n^{(0)}\right)\) ,之后迭代取样时每个变量取自依赖于现有其他变量值的条件概率分布,即第 \(i\) 次迭代取样时,

\[\begin{aligned} & x_1^{(i)} \sim p\left(X_1=x_1 \mid X_2=x_2^{(i-1)}, \ldots, X_n=x_n^{(i-1)}\right) , \\ & x_2^{(i)} \sim p\left(X_2=x_2 \mid X_1=x_1^{(i-1)}, \ldots, X_n=x_n^{(i-1)}\right) , \ldots , \\ & x_n^{(i)} \sim p\left(X_n=x_n \mid X_1=x_1^{(i-1)}, \ldots, X_{n-1}=x_{n-1}^{(i-1)}\right) , \end{aligned} \]

依此迭代直到取样趋近于真实分布。

假设我们有许多观察到的变量 \(\vec{v}\) ,有些有相互作用有些没有且我们事先不知道这些相互关系,我们该如何训练出合适的图来表示它们之间的关系呢? 一种方法被称作结构学习(structure learning),本质上是一种贪心搜索算法(greedy search),即先试验几种结构的图,看哪种训练误差最小且模型复杂度较低,然后再在这种结构上试验添加或去除某些边并选取其中效果最好的结构再如此循环下去。这种算法的缺点是需要不断的搜索模型结构而且需要多次训练,另一种更常见的方法是引入一些隐藏变量 \(\vec{h}\) ,则观察变量 \(v_i\)\(v_j\) 的关系通过 \(v_i\)\(\vec{h}\) 以及 \(\vec{h}\)\(v_j\) 之间的依赖关系而间接的表示出来。我们可以选取固定的图的结构,令隐藏变量与观察变量相连接,并且通过梯度下降算法求得代表这些连接强弱的参数。
模型训练结束后,如何用模型进行对于某些节点的边缘分布(marginal distribution)或条件概率分布(conditional distribution) 进行推断也是一大难题,所以常常需要我们进行近似推断,深度学习中常用到变分推断(variational inference),即寻找接近真实分布 \(p(\vec{h} \mid \vec{v})\) 的近似分布 \(q(\vec{h} \mid \vec{v})\)

概率图也可以用深度学习中的计算图来代表,观察变量构成输入层,隐藏变量构成隐藏层,层与层之间的链接即代表概率图中的边。一个例子是受限玻尔兹曼机(restricted Boltzmann machine,简称RBM) ,即网络中仅有隐藏变量与观察变量的连接,而观察变量间没有连接,隐藏变量间也没有连接,如下图所示:

能量函数可表示为 \(E(\vec{v}, \vec{h})=-\vec{b}^T \vec{v}-\vec{c}^T \vec{h}-\vec{v}^T W \vec{h}\) ,其中 \(\vec{b}, \vec{c}, W\) 为网络所需要学习的参数。

由于RBM中仅有 \(\vec{v}\)\(\vec{h}\) 间的连接,Gibbs sampling的过程就更简单了,可以同时sample所有的 \(\vec{h}\) ,然后再同时 sample所有的 \(\vec{v}\) 依次交替进行。另外能量函数的导数为 \(\frac{\partial}{\partial W_{i, j}} E(\vec{v}, \vec{h})=-v_i h_j\) ,方便运算,所以我们可以很高效的进行训练。

总结

这一章主要讲了概率图模型的基本概念,概率图模型中很多概念来源于统计物理,如配分函数,能量函数,玻尔兹曼机等,Gibbs sampling名字也是致敬统计物理学家吉布斯。因此,如何在学习过程中发现并促进不同学科的融合也是一个问题。

posted @ 2025-07-31 17:39  sky_darkeen  阅读(17)  评论(0)    收藏  举报