$\newcommand{\mmm}{\mathbf}$
概率图模型
概率论在现代模式识别中有很重要的地位。第一章中介绍了概率论可以被表示成两个简单的加法和乘法公式。事实上在这本书中讨论的所有概率推理和学习的计算(无论有多复杂)都可以看成这两个公式的重复应用。我们可以只用代数计算(algebraic manipulation)来形式化并解决复杂的概率问题。但是,使用概率分布(probability distributions)的图表示(diagrammatic representations),即概率图模型(graphical models)会更有优势。概率图模型有以下几个有用的属性:
- 概率图模型提供了一个简单的方式可视化(visualize)概率模型的结构,并且能够用来设计和产生新的模型。
- 通过观察概率图模型,可以看到模型的一些属性,包括条件独立性(conditional independence)等等。
- 在复杂模型上进行的需要推理和学习的复杂计算,可以被表示为图计算,底层的数据表达式隐式的被执行。
一个图由节点(nodes),有时也叫顶点(vertices),连接顶点的连接(links),也叫边(edges)。在一个概率图模型中,每一个节点代表一个随机变量,或者一组随机变量,边代表着变量之间的概率关系(probabilistic relationships)。所有随机变量的联合分布可以被分解成一系列部分随机变量的乘积。
本章从有向图(directed graphical models)中的贝叶斯网络(Beyesian networks)开始介绍,有向图中的边通过箭头表示方向。另一个主要的图模型是马尔科夫随机场(Markov random fields),它是一个无向图模型(undirected graphical models),没有明显的方向性。有向图用来描述随机变量之间的因果关系(causal relationships),而无向图用来描述随机变量之间的一些软约束(soft constraints)。为了解决推理问题,将无向图和有向图转化成另一种因子图(factor graph)表示是很方便的。
贝叶斯网络(Bayesian Networks)
图的一个很强大的特点就是一个具体的图可以用来解释一类概率分布。给定随机变量$a,b,c$的联合概率分布$p(a,b,c)$,通过利用乘法公式,我们可以把它写成以下形式:
$$p(a,b,c) = p(c|a,b)p(b|a)p(a).$$
这个公式对于任意的联合分布都成立,我们用节点$a,b,c$表示随机变量,按照上式的右边找出每个节点对应的条件分布,在图中添加一个有向箭头从依赖变量指向该变量。如Figure 8.1所示,$a$到$b$的边表示$a$是$b$的父节点。上式中左边是$a,b,c$是对称的,但是右边不是,事实上,在做分解的时候,一个隐式的顺序$a,b,c$已经被确定了,当然也可以选其他顺序,这样会得到一个新的分解和一个新的图。
如果把三个变量可以扩展到$K$个变量,则对应的联合概率为$p(x_1,\cdots,x_k)$,写成如下形式:
$$p(x_1,\cdots,x_K) = p(x_K|x_{K-1},\cdots,x_1)\cdots p(x_2|x_1)p(x_1).$$
这个式子也叫链式法则,微积分中也有链式法则,这个是概率论中的链式法则。给定$K$值,我们也能生成一个含有$K$个节点的有向图,每一个节点都对应一个条件分布,每一个节点都和比它序号小的节点全部直接相连,所以这个图也叫全连接图,因为任意两个节点都直接相连,但是只有一条有向边由小号节点指向大号节点,所以没有环。
目前为止,所有的操作都是在完全的联合概率分布,相应的分解以及全连接网络上进行的,它们可以应用到任何分布。但是图中也可能有缺失的边,如Figure 8.2所示,它不是一个全连接的图。我们可以直接根据这个图将联合分布表示为很多条件分布的乘积。每一个条件分布的取值只跟图中对应的父节点。比如,$x_5$只取决于$x_1$和$x_3$,$7$个变量的联合概率分布可以写成:
$$p(x_1)p(x_2)p(x_3)p(x_4|x_1,x_2,x_3)p(x_5|x_1,x_3)p(x_6|x_4)p(x_7|x_4,x_5)$$
从上面我们可以看出有向图和变量的条件概率之间的关系,图中定义的联合概率分布是图中所有节点给定其父节点的条件概率的乘积,即:
$$p(\mathbf{x}) = \prod_{k=1}^Kp(x_k|pa_k).$$
其中$pa_k$是$x_k$节点的父节点的集合,$\mathbf{x} = {x_1,\cdots,x_k}$,这个式子给出了一个有向图的联合概率具有因式分解属性。
贝叶斯网络中不能存在有向的圈,即不能存在闭路,所以这种图也叫有向无环图。另一种说法是如果图中的节点有顺序的话,不能存在大号节点到小号节点的有向边。
示例:多项式回归(Example: Polynomial regression)
这里给出了一个用有向图描述概率分布的例子,贝叶斯多项式回归模型。模型中的随机变量是多项式系数向量$\mathbf{w}$以及观测值$\mathbf{t}=(t_1,\cdots,t_N)T$,此外,还有一些模型中确定的参数,它们不是随机变量,如输入数据$\mathbf{x}=(x_1,\cdots,x_N)T$,噪音方差$\sigma^2$,还有$\mathbf{w}$上高斯分布精度的超参数$\alpha$。如果只关注随机变量,联合分布可以看成先验分布$p(\mathbf{w})$和$N$个条件分布$p(t_n|\mathbf{w}),n=1,\cdots,N$的乘积:
$$p(\mathbf{t},\mathbf{w}) = p(\mathbf{w})\prod_{n=1}^Np(t_n|\mathbf{w}).$$
这个模型可以用Figure 8.3表示。
为了方便表示,我们把$t_1,\cdots,t_N$用一个单独的节点,外面用一个盒子包着,叫做盘子(plate),盘子上写上$N$代表有$N$个这样的节点,得到Figure 8.4中的图。如果把模型确定的参数写出来,我们可以得到下式:
$$p(\mathbf{t},\mathbf{w}|\mathbf{x},\alpha,\sigma^2) = p(\mathbf{w}|\alpha)\prod_{n=1}Np(t_n|\mathbf{w},x_n,\sigma2).$$
如果在图中把模型参数和随机变量都表示出来,用空心圆圈代表随机变量,用实心圆点代表确定性参数(deterministic parameters),用图形表示如Figure 8.5。
当用图模型去解决机器学习或者模型时,有时候会固定一些随机变量的值,比如在多项式拟合问题中训练集的变量${t_n}$,在图模型中,将对应节点加上阴影,表示观测变量(observed variables)。如Figure 8.6所示,变量${t_n}$是观测变量。$\mathbf{w}$没有被观测到,所以是一个隐变量(latent variable)或者是(hidden variable)。
利用观测到的${t_n}$的值,我们可以估计多项式系数$\mathbf{w}$,利用贝叶斯公式:
$$p(\mathbf{w}|\mathbf{T}) \propto p(\mathbf{w}) \prod_{n=1}^Np(t_n|\mathbf{w})$$
为了整洁(uncluttered),模型的确定性参数被略去了。
一般来说,我们对于如$\mathbf{w}$之类的模型参数不感兴趣,因为我们的目标是用模型对新的输入进行预测。即在给定观测数据之后,我们给出一个新的输入$\hat{x}$,要找到对应的$\hat{t}$的概率分布,如Figure 8.7所示。给定确定性参数之后,图中所有随机变量的联合分布如下所示:
$$p(\hat{t},\mathbf{t},\mathbf{w}|\hat{x},\mathbf{x},\alpha,\sigma^2) = \left[\prod_{n=1}Np(t_n|x_n,\mathbf{w},\sigma2)\right] p(\mathbf{w}|\alpha)p(\hat{t}|\hat{x},\mathbf{w},\sigma^2).$$
刚开始有一些不理解,但是实际上就是这样一个公式$p(a,b,c) = p(a)p(b|a)p(c|a)$,把$\hat{t}$和$\mathbf{t}$当成两个变量看就行了。
利用概率论的加法公式$p(X) = \sum\limits_Yp(X,Y)$,对模型的参数$\mathbf{w}$积分就得到了$\hat{t}$的预测分布:
\begin{align*}
p(\hat{t}|\hat{x},\mathbf{x},\mathbf{t},\alpha,\sigma^2) = \int p(\hat{t},\mathbf{w}|\hat{x},\mathbf{x},\mathbf{t},\alpha,\sigma^2)d\mathbf{w}
\propto \int p(\hat{t},\mathbf{t},\mathbf{w}|\hat{x},\mathbf{x},\alpha,\sigma^2)d\mathbf{w}
\end{align*}
其中随机变量$\mathbf{t}$被隐式的赋值为数据集中的观测值,即是一个$p(t)$是一个定值。这里刚开始有些不理解,实际上是当$p(b)$为定值的时候,$p(a|b) \propto p(ab)$。
生成模型(Generative models)
这里实际上介绍的是采样方法,叫祖先采样,实际上就是直接采样,AI的第十四章有讲很多采样,可以直接看那个。
很多时候我们需要从一个给定的分布中进行采样,十一章还会更详细的讲采样,这里要介绍一种采样分布叫祖先采样(ancestral sampling),是一种和概率图模型相关的采样方法。给定$K$个变量的联合分布$p(x_1,\cdots,x_K)$对应的有向无环图,假设所有变量的父节点的序号都比它本身小。我们的目标是从联合分布中采样$\hat{x_1},\cdots,\hat{x_k}$。
首先从最小的序号根据$p(x_1)$开始采样,采样结果称为$\hat{x_1}$,接下来按顺序对第$n$个节点按照条件分布$p(x_n|pa_n)$进行采样,每个节点的父节点都取采样值,因为每个父节点都已经采完样了,所以这里不用担心。一直到第$K$个节点采样完成,就生成了一个样本。为了对某些边缘分布进行采样,对需要的节点进行采样,忽略其他节点即可,比如为了对边缘分布$p(x_2,x_4)$进行采样,从联合分布中进行采样,保留$\hat{x_2},\hat{x_4}$的值,其他的值不用管即可。
在概率图的实际应用中,通常小节点对应的是隐变量,大节点对应的图上的最终节点代表着一些观测变量。隐变量的目的是让观测变量的复杂概率分布可以表示成多个简单的条件概率分布的乘积。
我们可以把这样的模型解释为观测变量产生的过程,比如,一个模式识别任务中,每一个观测数据对应一张图片。隐变量解释为物体的位置和方向,给定一个观测图像,我们的目标是找到物体的一个后验分布,在后验分布中对所有可能的位置和方向进行积分,如Figure 8.8所示。
图模型通过观测数据的生成过程描述了一种因果关系过程,因为这个原因,这样的模型也叫做生成式模型(generative model)。相反,Figure 8.5中的模型不是生成式模型,因为多项式回归模型中的输入变量$x$没有概率分布,所以不能用来合成数据。通过引入一个合适的先验分布$p(x)$,我们可以把它变成一个生成式模型。
事实上,概率图模型中的隐变量不是必须要有显式的物理意义,它的引入只是为了方便从简单的条件概率生成复杂的联合分布。在任何一种情况下,应用到生成式模型的祖先采样模拟了观测数据的生成过程,因此产生了和观测数据分布相同(如果模型完美的表现了现实)的美好(fantasy)数据。实际应用中国,利用生成模型产生合成的观测数据,对于理解模型表达的概率分布很有帮助。
离散型随机变量(Discrete variables)
指数分布是很重要的一类分布,它们虽然很简单,但是可以形成更复杂的概率分布,概率图的框架对于表达这些概率分布是如何连接的很有用。
如果我们有向图中亲本和子节点对之间的关系选择为conjugate,会发现这些模型有很好的属性。这里主要探讨两种情况,父节点和子节点都是离散的以及父节点和子节点都对应高斯变量,因为这两种关系可以分层扩展(extended hierarchically)构建任何复杂的有向无环图。首先从离散变量开始:
有$K$个可能状态的单个离散变量$\mathbf{x}$的概率分布是:
$$p(\mathbf{x}|\nu) = \prod_{k=1}k\nu_k{x_k}$$
由参数$\nu = (\nu_1,\cdots,\nu_K)^T$控制,由于有约束条件$\sum_k\nu_k=1$,为了定义分布有$K-1$个$\nu_k$的值需要指定。
假设有两个离散型随机变量$\mathbf{x}1,\mathbf{x}2$,每个变量都有$K$个可能的取值。用$\nu{kl}$表示同时观测到$x{1k}=1$和$x_{2l}=1$,其中$x_{1k}$表示$\mathbf{x}1$的第$k$个分量,$x{2l}$类似。联合分布可以写成:
$$p(\mathbf{x}1,\mathbf{x}2|\nu) = \prod{k=1}K\prod_{l=1}K\nu{kl}^{x_{1k}x_{2l}}.$$
$\nu_{kl}$满足约束条件$\sum_k\sum_l\nu_{kl} =1$,被$K2-1$个参数控制,任意$M$个具有$K$个取值的随机变量的联合分布需要$KM-1$个参数,随着随机变量$M$个数的增加,参数的个数以指数速度增加。
使用乘法公式,联合分布$p(\mathbf{x}_1,\mathbf{x}_2)$可以分解成$p(\mathbf{x}_2|\mathbf{x}_1)p(\mathbf{x}_1)$,对应的图如Figure 8.9(a)所示,边缘分布$p(\mathbf{x}_1)$的分布需要$K-1$个参数,$p(\mathbf{x}_2|\mathbf{x}_1)$对于$K$个可能的$\mathbf{x}_1$,每个都需要$K-1$个参数。所以,和联合分布一样,总共需要的参数为$K-1+K(K-1) = K^2-1$个。
假设$\mmm{x}_1$和$\mmm{x}_2$是独立的,如Figure 8.9(b)所示,每一个变量可以用分开的多峰分布(multinomial distribution)表示,所需的参数量为$2(K-1)$个。类似的,$M$个独立变量需要$M(K-1)$个参数,和变量个数之间是线性关系。从概率图的角度来看,通过在图中去掉边减少了参数的数量,同时代价是这个图只能代表有限类别的分布。
更普通的是,如果我们有$M$个离散型随机变量$\mmm{x}_1,\cdots,\mmm{x}_M$,我们可以用一个节点代表一个随机变量,建立一个有向图表示联合概率分布。每个节点处的条件概率由一组非负参数给出,并且需要满足归一化条件。如果图是全连接的,那么这个分布需要$K^M-1$个参数,如果图中没有连接,那么联合分布可以分解成边缘分布的乘积,需要的所有参数是$M(K-1)$个。拥有中间水平连接性的图比分解成单个边缘分布的乘积能解释更多的分布同时比普遍的联合概率分布需要更少的参数。如Figure 8.10中的节点链,边缘分布$p(\mmm{x}_1)$需要$K-1$个参数,其余的$M-1$个条件分布$p(\mmm{x}i|\mmm{x}{i-1}),i = 2,\cdots,M$,需要$K(K-1)$个参数,总共需要的参数是$K-1+(M-1)K(K-1)$个,是$K$的二次函数(quadratic),随着链的长度$M$增加,参数个数线性增加。
另一个减少模型中独立参数个数的方法是共享参数。例如,Figure 8.10中的链,我们可以用共享的$K(K-1)$个参数去控制条件概率$p(\mmm{x}i|\mmm{x{i-1}),i=2,\cdots,M$,用$K-1$个变量去控制$\mmm{x}_1$的概率分布,总共需要$K^2-1$个参数需要被指定去定义联合概率分布。
通过引入每个参数对应的Dirichlet先验,我们可以把一个随机变量图转换成贝叶斯模型。从概率图的角度来看,每一个节点需要一个额外的父节点代表和这个离散节点相关的Dirichlet分布,如Figure 8.11所示。将控制条件分布$p(\mmm{x}i|\mmm{x}{i-1}),i=2,\cdots,M$的参数共享,得到如Figure 8.12所示的图。
另一种控制模型中离散变量参数指数速度增加的方法是用参数模型而不是条件概率表来表示条件分布。如Figure 8.13中,所有的节点都是一个二值变量,用参数$\nu_i$表示每一个父节点$\mmm{x}i$取值为$1$的概率$p(x_i=1)$,总共有$M$个父节点,所以总共需要$2M$个参数表示条件概率$p(y|x_1,\cdots,x_M)$的$2M$可能取值,如$p(y=1)$。所以指定这个条件分布所需要的参数随着$M$指数级增长。我们可以通过使用logistic sigmoid函数作用于父节点的线性组合上,得到一个更简洁的条件概率分布:
$$p(y=1|x_1,\cdots,x_M) = \sigma\left(w_0+\sum{i=1}Mw_ix_i\right)=\sigma(\mmm{w}T\mmm{x})$$
其中$\sigma(a) = \frac{1}{1+exp(-a)}$是logistic sigmoid,$\mmm{x}=(x_0,x_1,\cdots,x_M)T$是由$M$个父节点状态和一个$x_0=1$构成的$M+1$维向量,$\mmm{w}=(w_0,w_1,\cdots,w_M)T$是$M+1$维参数项。与一般情况相比,这是一个更加严格的条件概率分布形式,但是它的参数个数随着$M$的增加线性增加。在这种情况下,类似于选择多元高斯分布的协方差矩阵的限制形式(如对角矩阵等)。