(终于读到概率图了,从这一章开始应该算是PRML的精华内容了。过于基础的东西就不写了,主要写自己不会的)
所有的概率推断和学习,都是概率加法法则和乘法法则(回顾第一章)的运用
贝叶斯网络 -> 有向图模型
马尔科夫随机场 -> 无向图模型
因子图:能把有向图和无向图都转化成的一个表示形式。
有向无环图directed acyclic graphs(DAGS)
贝叶斯线性回归示例
有向图中根据拓扑顺序采样。为了从边缘分布中采样,可以用祖先采样法求取结点值,并扔掉其他结点值。
图模型描述了生成观测数据的一种因果关系,因此这种模型叫做生成式模型。例如图片的生成过程
线性回归不是生成式模型,因为没有建模 p ( x ) p(x) p(x)
隐变量本身可以没有物理含义,仅仅用来从简单成分构建复杂概率分布
省参数的几种方式:
其中 pa i \text{pa}_i pai表示 x i x_i xi的父节点
这里 x = ( x 1 , … , x D ) T \bm x=(x_1,\dots,x_D)^T x=(x1,…,xD)T, const \text{const} const是与 x \bm x x无关的项。注意上式是 x \bm x x的二次函数,所以 p ( x ) p(\bm x) p(x)是多维高斯分布。易得
其中 ϵ \bm \epsilon ϵ是标准多维高斯分布
(感觉这里 i i i必须不能在 j j j的拓扑排序后面,否则 ϵ j \epsilon_j ϵj和 x i x_i xi不独立)
如果节点表示高维高斯分布的变量,则条件分布形式为
可以证明联合分布仍然是高斯分布
高斯变量 x x x的均值 μ \mu μ的共轭先验是 μ \mu μ的高斯分布。 μ \mu μ上的概率分布的参数是控制先验分布的参数,所以可以看作是超参数。超参数本身未知,又可以引入超参数上的先验分布,被称为超先验hyperprior,它仍然是高斯分布。这种构造方法可以扩展到任意层次(套娃),这就是层次贝叶斯模型hierarchical Bayesian model
在给定 c c c的条件下, a , b a,b a,b独立,记为 a ⊥ ⊥ b ∣ c a\perp \!\!\! \perp b|c a⊥⊥b∣c,形式化为
也可等价写成
A , B , C A,B,C A,B,C是任意不相交的结点集合,考虑 A , B A,B A,B是否关于 C C C条件独立
考虑从 A A A到 B B B的所有路径,路径被阻塞当且仅当路径上的某个结点满足下面两条性质之一
如果所有路径都堵塞,则 A ⊥ ⊥ B ∣ C A\perp \!\!\! \perp B|C A⊥⊥B∣C
这种判断框架就是d-分离
是一个生成模型。假设观测变量 x = ( x 1 , … , x D ) T \bm x=(x_1, \dots, x_D)^T x=(x1,…,xD)T,进行 K K K分类,采用one-hot编码 z \bm z z表示类别。定义生成模型 p ( z ∣ μ ) p(\bm z | \bm \mu) p(z∣μ),其中 μ k \mu_k μk是第 k k k类的先验概率。引入 p ( x ∣ z ) p(\bm x|\bm z) p(x∣z)
朴素贝叶斯naive Bayes之所以naive,是因为假设 x 1 , … , x D x_1, \dots, x_D x1,…,xD在给定 z \bm z z的条件下独立。而 p ( x ) p(\bm x) p(x)本身则不能分解
把有向图看作是滤波器。如果一个概率分布 p p p,能用有向图的方式进行分解,则通过了该滤波器。通过的子集记为 D F \mathcal D\mathcal F DF。
还可以设计另一种滤波器,当概率分布 p p p满足了某个有向图所有可能的d-分离对应的条件独立性,d-分离定理指出,该子集仍然是 D F \mathcal D \mathcal F DF
注意如果, p p p有额外的独立性,则仍然能通过该滤波器
分子分母消掉和 x i \bm x_i xi不相关的项,剩下的包括 x i \bm x_i xi的子结点、父结点、子结点的其他父结点(co-parents)。这些点组成的集合称为 x i \bm x_i xi的马尔可夫毯Markov blanket。这也是分类 x i \bm x_i xi和其他结点的最小集合
也叫做Markov网络,或无向概率图
如果从集合 A A A到集合 B B B没有一条不经过集合 C C C的路径,那么 A ⊥ ⊥ B ∣ C A \perp \!\!\! \perp B|C A⊥⊥B∣C
在这样的独立性要求下,无向图模型的形式化是可以推出的
无向图中 x i x_i xi的马尔可夫毯是 x i x_i xi的所有邻居结点子集,这比有向图的定义要简单。
团cliques是结点子集,使子集内每个结点相连;图中不能再扩张的结点子集,就是最大团maximal cliques。有向图是在最大团 C C C的势函数的乘积上定义的。Hammersley-Clifford定理指出,这种定义方法和独立性的要求是等价的!
为了让势函数 ψ \psi ψ严格为正,通常定义一个能量函数,满足
这种指数表示被称之为玻尔兹曼分布Boltzmann distribution,(原来玻尔兹曼机从这来的)
让两者对应的方法为
注意,这样转换完之后配分函数 Z = 1 Z=1 Z=1,很方便。
考虑更一般的情况,为了能实现转换,有向图中的条件分布项必须在一个最大团内。
如果每个条件分布中只有一个父结点,那么直接把有向边改成无向边即可。
如果一项条件分布中有多个父结点,那么需要进行道德化moralization,在父结点之间添加边。这样得到的图称为道德图moral graph. 如图所示
然后让每项有向图中的条件分布放到相应的最大团中。这样,仍然有 Z = 1 Z=1 Z=1.
从无向图转有向图很少见,而且配分函数很难处理
如果一个概率分布中所有条件独立性质,都能通过一个图反映出来,那么这个图被称之为概率分布的D图。
如果一个图的每个条件独立性都能由一个具体的分布满足,那么这个图被称之为条件分布的I图。
即是I图也是D图的就是完美图
不同分布,是否存在有向完美图或无向完美图,是不一定的,关系如图
这里给出有向图和无向图不能转换的各一个例子
将有向图和无向图结合起来,叫做链图chain graphs,显然有向图和无向图都是链图的special case。但是仍然存在分布,没有链图的完美图与之对应
图中一些结点已知,希望计算一个或多个其他结点的后验概率。这里先关注精确推断,第十章会讨论近似推断
利用图中的条件独立性,重新调整图中的加和顺序,通过乘法分配律,使变量不断消去,加快计算效率。(这其实是一种动态规划)
如果图是全连接的,那么则必须对整张图计算,没有条件独立性可以用。
对于链式模型,如果是单项有向图,可以转成无向图
对一个结点求边缘分布
调整加和顺序,可以写成
通过运用乘法分配律,可以看到左侧计算量为3次,右侧只有2次
μ α \mu_\alpha μα可以动态规划进行计算
μ β \mu_\beta μβ类似. ( μ α , μ β \mu_\alpha, \mu_\beta μα,μβ都可以看作是信息messages)
这样的结构称之为马尔科夫链
对于配分函数 Z Z Z,可以利用公式(8.52)把所有的 p ( x n ) p(x_n) p(xn)都算出来,然后加起来
如果链长为 N N N,每个结点状态数为 K K K,则上述求边缘分布的复杂度为 O ( N K 2 ) \mathcal O(NK^2) O(NK2),比暴力枚举的复杂度(关于 K K K的指数次)低太多了
树中每两个节点只有一条路径相连
有向图的树中每个结点只有一个父结点
多树polytree则不然,这样的树会有超过一个结点没有父结点。多树在转无向图时会引入环
有向图和无向图都能表示成一堆因子的乘积
有向图和无向图都是因子图的特例
因子图都是二分图(因子结点factor nodes和变量结点variable nodes)
关于和积算法,之前写过一篇博客,可以对照看:置信传播(Belief Propagation)与链式有向图模型前向后向算法——CVMLI Prince读书随笔第11章
置信传播是和积算法在有向无环图的一种具体形式。
考虑树状的因子图(有向图和无向图都可以写成树状的因子图)
ne ( x ) \text{ne}(x) ne(x)是 x x x的邻居结点, X s X_s Xs是 x x x通过 f s f_s fs相连的子树结点集合。 F s F_s Fs是和 f s f_s fs有关的子树中所有因子项乘积。因为
从而
这里引入
可以看作是从 f s f_s fs传信息给 x x x。对于 F s F_s Fs,可以把 f s f_s fs因子项单独拆出来,得到
其中 G i G_i Gi是和结点 x i x_i xi有关的子树所有项的集合。代入得到
这里 ne ( f s ) \textbf{ne}(f_s) ne(fs)是 f s f_s fs的邻居结点集合。我们定义了
从而
注意,如果变量结点只有两个邻居,则直接把信息往前传即可,没有额外计算。在计算时,把 x x x当作根,从叶结点不断往上算。如果一个叶结点是变量结点,那么直接初始化
如果是因子结点,则初始化为
如图所示
找最大概率对应的变量和概率
与和积算法类似,也是构造一棵树,从叶结点算到根节点,不过算的时候把 ∑ \sum ∑换成 max \max max。注意这时候信息没有反向从根到叶结点的传递。这种算法的原理是
实际计算中,小概率的乘积可能会出数值问题,可以取对数之后进行,分配性质仍然成立,因为
此时,具体的信息传播方法为
初始化为
在根节点的计算公式为
这样算完之后,根结点的 x x x值通过公式(8.98)算出来,其他结点的值,可以通过反向跟踪back-tracking的方式找到。
以马尔科夫链为例,在信息从叶结点向根节点传播时,需要记录一个 ϕ ( x n ) \phi(x_n) ϕ(xn),表示给定 x n x_n xn的情况下,对应最大的 x n = 1 x_{n=1} xn=1。
如果一个因子有多个结点连接,则 ϕ ( x n ) \phi(x_n) ϕ(xn)输出多维度值。马尔科夫链的反向跟踪过程如图所示
这种算法在隐马尔可夫模型当中,被称为Viterbi算法(原来Viterbi算法是反向追踪的一个特例)
简单介绍两种方法,不细搞
该问题超出了推断的范围,从数据本身学习图结构。
参考文献:
[1] Christopher M. Bishop. Pattern Recognition and Machine Learning. 2006