AI机动队
首发于AI机动队
结构化概率模型——深度学习第十六章

结构化概率模型——深度学习第十六章

继续《深度学习》花书总结,从第16章开始直到第20章都是在讨论概率模型,其中第16到19章着重于概率模型基础及一些近似方法,第20章讨论应用这些方法的生成模型。我们先来总结第16章概率图的主要概念。

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

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

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

上图对应的概率分布可以表示为 p(t_0,t_1,t_2)=p(t_0)p(t_1|t_0)p(t_2|t_1) ,一般的图的概率分布可通用 p(x)=\prod_{i}p(x_i|Pa_G(x_i)) 来表示,其中 Pa_G(x_i) 代表了图G中节点 x_i 的所有父节点即指向它的节点。和查找表方法相比较,假如条件概率最多出现m个变量,则有向图复杂度为 O(k^m) ,假如我们设计的模型 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)dx ,归一化后的概率即可表示为 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_ix_j 的父节点,则 j>i 。这样,我们就可以先取样 x_1 \sim P(x_1) ,然后取样 P(x_2|Pa_G(x_2)) ,以此类推,最后取样 P(x_n|Pa_G(x_n))

而对于无向图,我们无法进行拓扑排序,通常采取的方法是Gibbs sampling。Gibbs Sampling是一种马尔科夫链蒙特卡洛算法(Markov Chain Monte Carlo,简称MCMC),其基本思想是假设我们有n个变量,初始的样本表示为 (x_1^{(0)}, x_2^{(0)}, ..., x_n^{(0)}) ,之后迭代取样时每个变量取自依赖于现有其他变量值的条件概率分布,即第 i 次迭代取样时, x_1^{(i)}\sim p(X_1=x_1|X_2=x_2^{(i-1)},...,X_n=x_n^{(i-1)})x_2^{(i)}\sim p(X_2=x_2|X_1=x_1^{(i-1)},...,X_n=x_n^{(i-1)}) ,... , x_n^{(i)}\sim p(X_n=x_n|X_1=x_1^{(i-1)},...,X_{n-1}=x_{n-1}^{(i-1)}) ,依此迭代直到取样趋近于真实分布,详细内容在第17章蒙特卡洛算法中再讲。

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

模型训练结束后,如何用模型进行对于某些节点的边缘分布(marginal distribution)或条件概率分布(conditional distribution)进行推断也是一大难题,所以常常需要我们进行近似推断,深度学习中常用到变分推断(variational inference),即寻找接近真实分布 p(\vec{h}|\vec{v}) 的近似分布 q(\vec{h}|\vec{v}) ,这一部分内容会在第19章详细介绍。

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

其能量函数可表示为 E(\vec{v},\vec{h})=-\vec{b}^T\vec{v}-\vec{c}^T\vec{h}-\vec{v}^TW\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_ih_j ,方便运算,所以我们可以很高效的进行训练。

总结

这一章主要讲了概率图模型的基本概念,为以后几章打下基础。物理专业的同学可能会发现,概率图模型中很多概念来源于统计物理,如配分函数,能量函数,玻尔兹曼机等,Gibbs sampling名字也是致敬统计物理学家吉布斯。基础学科与深度学习之间如何相互影响相互促进,是值得思考的问题。


注:截图均来自Ian Goodfellow等合著的Deep Learning一书,推荐阅读原书。

编辑于 2018-11-01

文章被以下专栏收录