Deep learning chapter16

深度学习引用了很多能指导研究者更好地设计和描述他们的算法的建模机制( Deep Learning draws upon many modelling formalisms that researchers can use to guide their design effects and describe their algorithms)。比如 结构化概率模型。结构化概率模型是很多前沿深度学习领域的一个重要组成部分。这一章会具体地介绍结构化概率模型,而且这一章是自我包含的,读者不需要阅读前面地章节也能读懂这一章。

结构化概率模型是一种描述概率分布的方式,它使用图来表示变量之间的关系,由于模型通常使用图来表示的,因此也被称为图模型。

图模型研究领域非常庞大,而且已经发展出了很多的模型,训练算法和推理算法(inference algorithm)。我们在本章将会介绍一些图模型的基本背景和一些核心概念,特别是一些在深度学习领域有非常大作用的概念。

在本章中,我们首先介绍构建大规模概率模型的挑战。之后,介绍如何用图描述概率分布的结构。虽然图结构能帮助我们很好地构建概率模型,但它也有自身的问题。其中一个困难就是在构建图时,如何决定变量之间是否有之间的关联?简单来说就是对于一个给定的问题,如果决定这个问题最优的图结构。 16.5小节给出了如何通过学习变量之间的依赖关系构建图结构的两种方法。最后在16.7节中讨论了深度学习中重点关注的概率图模型方法。

16.1 无结构建模的挑战 (The Challenge of Unstructured Modeling)

深度学习的目标是为了解决人工智能所面临的挑战,这意味着深度学习需要理解现实世界中多维数据中的丰富结构,比如,我们希望AI算法能理解自然图片,能理解音频等数据。
分类算法虽然能够将这些丰富的数据作为输入,之后给出一个类别标签,但是分类算法在学习过程中丢弃了数据的丰富的结构,最后只给出了一个样本label。概率模型可以做分类任务,但其实概率模型还可以做到更多。

  1. 概率密度估计(Density estimation):给定输入\(x\), 机器学习系统会返回真实概率的估计\(p(x)\),虽然这个任务也是只由一个输出值,但是,它需要模型对整个输入数据的分布有完全地理解。
  2. 去噪(Denoising): 给定一个被损坏的或观察错误的输入\(\tilde{x}\), 机器学习系统需要返回一个原始的真实的样本\(x\),这也需要模型能完整得了解数据分布情况。
  3. 缺失值填充(Missing value imputation):给定输入\(x\)的一些观察元素,模型需要估计\(x\)中未观察到的其他元素,或者估计其他元素的概率分布情况。
  4. 采样(Sampling):模型根据概率分布\(p(x)\)生成新的样本。概率分布\(p(x)\)可以从给定的输入样本来学。

一个使用自然图片做sampling task的例子见图16.1。

估计一个含有成千上万个分量的随机变量\(x\)的概率分布是非常有挑战性的任务。假设\(x\)的分量取值只有两种:0和1,这是最简单的情况,但也是非常困难的(overwhelming)。对于一个32*32大小的RGB图像,一共有2的3072次方个可能的像素组合。这个数字是当前估计的宇宙粒子数的10的800次方倍。

在一般情况下,当我们对一个含有n个分量的随机向量x的概率分布进行建模时,假设每个分量都有k中取值,那么P(x)的最一般的表示方法是构建一个查找表(look up table),对每一个可能的\(x\)取值都有一个参数,因此一共有\(k^n\)个参数。这种方法几乎是不可能的,因为以下几个原因:

  1. 存储:要存储这么多参数非常占空间
  2. 统计效率:当模型的参数增多,那么就需要更多的训练数据去学习这些参数。因为查找表方法的参数非常多,因此需要的数据量也很大,而且查找表方法非常容易过拟合到训练数据上。
  3. 运行时间:推理的时候所耗费的时间,假设已经有了这样一个查找表,可以看作是随便变量x各个分量的联合分布\(p(x)\),现在想求边际分布\(p(x_1)\)或者是条件概率分布 \(p(x_1|x_2)\),对于这两种未知量在推理时需要在查找表中将对应的分量找出来然后做求和或者其他运算。非常耗时。
  4. 运行时间: 采样的时候耗时,比如说我们想从学到的模型中采样,最简单的方式是随机生成一个 \(u\sim U(0,1)\),之后遍历查找表,每遍历一个样本就加上该样本出现的概率,当累加的概率大于u时,就采样当前的样本。很明显,这个操作需要遍历查找表多次。

基于查表的方法的问题在于我们显示地对变量的各个分量之间的关系(也就是分量的各个取值的组合)进行建模,但其实,实际中的任务通常变量与变量之间并不是直接相关的。

16.2 使用图作为模型的结构

结构概率模型使用图表示随机变量之间的关系。图中每个节点表示一个随机变量,每一条边表示相邻两个随机变量有之间的关系。使用图来对概率分布进行建模有很多种方法,在接下来的章节中我们介绍其中最有用的几种方法,图模型可以被分为两大类:基于有向图的模型和基于无向图的模型。

16.2.1 有向图模型

有向图模型是结构概率模型的一种表示方式,也有人称其为 置信网络(belief network)和贝叶斯网络(Bayesian network)。

有向图中的边是有方向的。箭头的方向表示某些变量的概率分布依赖于其他变量,也可以看作是条件概率。

假设现在有一个接力比赛,有三个人,每一棒的先后顺序为 Alice,Bob和Carol,假设三人结束的时刻分别为t0,t1,t2. 那么t1的值应当依赖t0,t2的值直接依赖t1,间接依赖t0,这个关系可以用如图16.2的有向图表示。

关于变量X的有向图模型是定义在一个有向图\(g\)上,每个顶点表示一个随机变量的分量,而且局部条件概率分布为\(p(x_i|P_{g}(x_i))\),其中\(p_{g}(x_i)\)表示节点\(x_i\)的父节点。那么最终关于变量\(X\)的概率分布为:

\[p(X) = \prod_iP(x_i|P_{g}(x_i)) \]

在接力比赛中,这个公式可以写成:p(t0,t1,t2) = p(t0)p(t1|t0)p(t2|t1).

16.2.2 无向图模型

有向图模型给了我们一种方式去描述结构化的概率模型,另一种描述方式是无向图模型,也被称为马尔科夫随机场(MRF)和马尔科夫网络。无向图中的边是无向的。

有向图的应用场景一般是我们知道变量之间的因果关系,但在现实中有时候不希望变量之间有明显的方向,变量之间并没有明显的因果关系,可能是相互影响的,这时候我们还是用无向图来建模比较合适。

无向图的概率密度地冠以方式如下:假设无向图表示为\(G\), \(G\)中可以分为多个集团(clique,每个集团中所有的点都两两连接,是一个全连接图),集团用\(C\)表示,那么集团势能(clique potential)\(\phi(C)\)度量了在这个集团中各个变量各种可能的联合状态的亲和力(affinity)(measures the affinity of the variables in that clique for being in each of their possible joint states). 这个因子有一个非负的约束。无向图中所有的集团定义了一个没有归一化的概率密度分布:

\[\tilde{p}(x) = \prod_{C\in G}\phi(C) \]

只要无向图中的集团大小较小,这个未归一化的概率密度分布就能很好处理。从公式中可以看出,亲和力大的集团的概率分布值会较大。但是与贝叶斯网络不同的是,上式不能保证最终获得的是一个有效地概率分布(可能不满足积分为1的特点)。

配分函数 (The Partition Function)

虽然之前介绍的未归一化的概率密度函数是能保证处处非负的,但是并不保证积分和为1. 为了满足这个条件,通常需要对概率分布做归一化:

\[p(x) = \frac{1}{Z} \tilde{p}(x) \]

其中 \(Z = \int \tilde{p}(x)dx\)

当 函数\(\phi(\cdot)\)固定时,Z可以看作是一个常数,但当函数\(\phi(\cdot)\)包含参数时,Z也是关于这些参数的函数。但通常情况下都把Z当作一个常数看待,Z也被称为配分函数,这是一个从统计物理中借鉴来的词。

由于Z是由p(x)在X空间中的所有状态值积分得到的,因此它的计算非常棘手。为了解决这个问题,通常选择的\(\phi(\cdot)\)函数一定要有利于高效地计算出\(Z\). 在深度学习中,Z的计算是非常棘手的(intractable),由于精准地计算Z有点不可能,因此我们转而采取近似的方法。

当我们在设计无向图模型的时候,是可能设计出一个使得Z不存在的势能函数\(\phi(\cdot)\)的。当模型中的变量是连续值,而且概率p(x)在X空间的积分发散,这种情况Z就不存在。比如假设x是一个标量,其对应的势能函数为\(\phi(x) = x^2\),那么\(Z = \int x^2dx\),由于Z是一直发散的,因此在这个势能函数下,该无向图没有对应的概率分布函数。

有向图和无向图之间最大的差别是有向图在一开始就定义好了概率密度函数,而无向图的概率密度函数需要先定义势能函数\(\phi(x)\),之后再变化为概率分布。即使定义好了函数\(\phi(x)\),最后的概率分布也与\(x\)的取值范围紧密相关。

基于能量的模型

关于无向图模型的很多研究都基于一个假设:\(\forall x,\tilde{p}(x)\). 一种简单的方法是采用基于能量的函数(energy-based function,EBM):

\[\tilde{p}(x) = exp(-E(x)) \]

\(E(X)\)表示能量函数,因为指数函数非负的特点,对于所有的能量函数都不会导致概率为0,因此能量函数可以任意选取。如果不采用能量函数,而是通过学习来获得势函数\(\phi(x)\),那么再优化时需要添加约束条件(非零),相反地,如果直接优化能量函数,学习能量函数是一个无约束地优化问题。

任何采用上述的能量函数的概率分布都可以称为 Boltzmann distribution, 因此,很多基于能量函数的模型都被称为 Boltzmann machines. 关于什么样的模型能被称为基于能量的模型和Boltzmann machine, 并没有广为接的准则。 Boltzmann machine 最开始是用来对二元变量建模的,但现在很多模型都引入了实值变量。最开始Boltzmann machine 既可以指含有隐变量的模型也可以指不含隐变量的模型,但现在Boltzmann machine 通常值含有隐变量的模型,而不含隐变量的模型称为马尔科夫随机场(Markov random field) 或者是 对数线性模型(log-linear models).

无向图中的集团(clique)对应着未归一化的概率分布函数的因子(factor)。 由于$ exp(a)exp(b) = exp(a+b)$, 无向图中的集团对应能量函数的各个项。 换句话说,基于能量的模型是一种特殊的Markov network: 指数函数使得能量函数的每一项都对应着无向图中不同集团的factor。图16.5展示了如何按照能量函数的格式来理解这个无向图。 我们可以将能量函数模型中的能量函数的各个项看作是 "product of experts", 能量函数中的每一项都可以看作是一个专家,这个专家对最终的概率分布做了一个小小的约束,最终很多项组合成一个对高维空间概率分布的约束。

基于能量的模型定义中的负号并不是从函数的角度考虑才设置的,因为负号明明可以正好到能量函数中,其实是因为能量函数的概率来自于统计物理领域。这个概念与配分函数一样都是来源于别的学科,保留负号是为了与别的学科相兼容。

很多基于概率模型的算法都不需要计算\(p_{model}(x)\),只要计算 \(log\tilde{p}(x)\)就行了。对于包含隐变量\(h\)的能量模型来说,算法通常计算的是 free energy:

\[F(x) = -log\sum^hexp(-E(X,h)) \]

在本书中,我们选择的是更一般的形式:\(log\tilde{p}(x)\)

16.2.5 分割 和 D-分割 (separation and D-separation)

图模型中的边表示变量之间是否直接相关,我们经常需要知道哪些变量是不直接相关的。 更正式地说法是我们希望知道给定一个变量的子集,哪些变量是条件独立于其他变量的。

在一个无向图中辨别条件独立是比较简单的。 在这种情况下,条件独立的相关变量子集称为一个分割,假设给定子集S,子集A与子集B是条件独立的,那么子集A,B,S分别是一个分割。假设两个随机变量a和b之间的路径只包含unobserved variables,那么a和b并没有separated, 如果a和b之间不存在路径或者是所有相连的路径都存在一个observed variable, 那么a和b就是separated。 我们把只包含unobserved variables的路径称为active的路径,而把包含observed variable的路径称为inactive. 图16.6和16.7说明了这一点。


相似的想法也可以应用到有向图中,不过在有向图中变成了 D-separation, D的意思是dependence,在有向图中,当给定一个子集S,子集A与另一子集B是条件独立的,那么就称当给定S时,A与B是d-separated。 有向图中定义什么样的路径是activte的,什么样的路径是inactivte的比在无向图中复杂,具体定义见图16.8,图16.9也给出了一个例子。

16.2.6 有向图和无向图之间的相互转换

这一小节话比较多,我觉得说得比较啰嗦,其实它要表达的就是有向图和无向图之间没有优劣之分,选择有向还是无向要看具体的任务。至于有向图和无向图之间的转化方法也不难,但是举的例子说的话比较多,写起来收获不大,等以后用到了这个地方再看吧。

因子图 (Factor Graphs)

因子图是展示无向图模型的另一种方式,目的是为了消除标准无向图形式的二义性。在无向图模型中,每个势函数对应无向图中一个子集,但是并不是每一个子集都需要有一个势函数与之对应。因子图显式地展示了所有存在的势函数。如图16.13所示

posted @ 2017-11-05 14:42  Mata  阅读(386)  评论(0编辑  收藏  举报