其实接触概率图模型也有一段时间了,从开始入坑NLP起,也陆陆续续看了很多关于图模型这方面的论文、博客和教程等,但是总是不能形成一个完整的体系,所以这次就下决心花点时间好好去整理复习一下。网上的资料很多,但是那都是别人的,最重要的还是要学会整理融合成自己的知识。
今天这篇blog主要就介绍一下图模型的基础知识,后面陆续会整理HMM, CRF等比较常见常用的概率图模型。
“概率论只不过是把常识归纳为计算问题。”
-----皮诶尔·西蒙·拉普拉斯
我们首先肯定都知道什么是图。图就是由结点和结点之间的链接组成的。那么概率图就是在图结构的基础上集成了“概率”的概念,也就是,概率图中的结点变成了随机变量,链接变成了这些随机变量之间的概率关系(依赖关系)。
在宗成庆老师的统计自然语言处理一书中,有关于图模型的整体框架,对后面理解各种类型的图模型有非常好的帮助:
可以看到,整个图模型的框架可以分成有向图(也叫做贝叶斯网络)和无向图(也叫做马尔科夫网络)两个部分。
有向图又可以称作贝叶斯网络、信念网络、有向无环图模型
有向图的一般模型如下所示:
在有向图中,有个箭头从x1指向x2,说明是由于x1“导致”x2,表示两者的依赖关系。通过使用概率乘积规则,我们可以将这个有向图表示为数学公式:
P ( x 1 , ⋯   , x 5 ) = P ( x 1 ) ⋅ P ( x 2 ∣ x 1 ) ⋅ P ( x 3 ∣ x 2 ) ⋅ P ( x 4 ∣ x 2 ) ⋅ P ( x 5 ∣ x 3 , x 4 ) P\left(x_{1}, \cdots, x_{5}\right)=P\left(x_{1}\right) \cdot P\left(x_{2} | x_{1}\right) \cdot P\left(x_{3} | x_{2}\right) \cdot P\left(x_{4} | x_{2}\right) \cdot P\left(x_{5} | x_{3}, x_{4}\right) P(x1,⋯,x5)=P(x1)⋅P(x2∣x1)⋅P(x3∣x2)⋅P(x4∣x2)⋅P(x5∣x3,x4)
下面我们通过一个栗子更好地了解有向图。
“草地是湿的(grass is wet)"的原因可能有
两个:洒水器打開(S=true)或下雨(R=true)。它们之间的关系可以用一个条件概率表
(conditional probability table, CPT) 来描述。比如说,我们可以看到
P(W=true|S=true,R=true)=0.99,即当洒水器打开同时下雨的条件下,“草地湿的”概率为0.99。而“洒水器”和“下雨”的状态又是由“天气”决定的。所以,整体的联合概率可以写成:
P ( C , S , R , W ) = P ( C ) × P ( S ∣ C ) × P ( R ∣ C ) × P ( W ∣ S , R ) P(C, S, R, W)=P(C) \times P(S | C) \times P(R | C) \times P(W | S, R) P(C,S,R,W)=P(C)×P(S∣C)×P(R∣C)×P(W∣S,R)
首先我们来看三种简单的条件独立情况。
节点C链接的是两个箭头的尾部, 如下图
根据上图可以写出三个随机变量的联合分布:
P ( a , b , c ) = P ( a ∣ c ) ∗ P ( b ∣ c ) ⋆ P ( c ) \mathrm{P}(\mathrm{a}, \mathrm{b}, \mathrm{c})=\mathrm{P}(\mathrm{a} | \mathrm{c})^{*} \mathrm{P}(\mathrm{b} | \mathrm{c})^{\star} \mathrm{P}(\mathrm{c}) P(a,b,c)=P(a∣c)∗P(b∣c)⋆P(c)
接着我们去判断a, b两个节点是否条件独立,有两种情况:
(1)没有变量是观测变量 此时我们可以对a,b,c的联合分布对c求积分,如果考虑c是离散的,可得:
p ( a , b ) = ∑ c p ( a ∣ c ) p ( b ∣ c ) p ( c ) p(a, b)=\sum_{c} p(a | c) p(b | c) p(c) p(a,b)=c∑p(a∣c)p(b∣c)p(c)
可见a,b并不独立
(2)变量C是观测变量 此时我们有:
p ( a , b ∣ c ) = p ( a , b , c ) p ( c ) = p ( a ∣ c ) p ( b ∣ c ) \begin{aligned} p(a, b | c) &=\frac{p(a, b, c)}{p(c)} \\ &=p(a | c) p(b | c) \end{aligned} p(a,b∣c)=p(c)p(a,b,c)=p(a∣c)p(b∣c)
可知a,b是条件独立的
同样我们分为两种情况讨论a,b的条件独立性(这里就不具体写出了)
对于 DAG 图 E,如果A,B,C是三个集合(可以是单独的节点或者是节点的集合),为了判断 A 和 B 是否是 C 条件独立的, 我们考虑 E 中所有 A 和 B 之间的 无向路径 。对于其中的一条路径,如果满足以下两个条件中的任意一条,则称这条路径是阻塞(block)的:
(a)路径中存在某个节点X是 head-to-tial 或者 tail-to-tail 节点,并且 X 是包含在 C 中的;
(b)路径中存在某个节点X是head-to-head节点,并且 X 或 X 的儿子是不包含在 C 中的;
如果 A,B 间所有的路径都是阻塞的,那么 A,B 就是关于 C 条件独立的;否则, A,B 不是关于 C 条件独立的。
给定下面一个DAG,判断图中a和b是否在c条件下独立?a和b是否在f条件下独立?
问题1:a到b只有一条路径a->e->f->b,考虑路径上除了a和b之外的节点e和f:其中e是head-to-head类型的,且e的儿子节点就是c,根据上述可知e不阻断;对于f,是tail-to-tail类型的,且f不在c中,f也不阻断;因此a,b不是c条件下独立。
问题2:路径 a->e->f->b 上的所有节点。考虑路径上的点e和f:节点 e 是head-to-head 类型的,e 和她的儿子节点 c 都不在 f 中,e是阻断路径的节点。节点 f 是tail-to-tail类型节点,且 f 节点就在 f中,所以 f 节点阻断了路径。 结论:a 和 b是 f 下条件独立的。
这里首先给出判定条件:
如果联合概率分布满足成对、局部或者全局马尔科夫性,则称此联合概率分布为概率无向图模型。
接着我们来看什么是马尔科夫性
成对马尔可夫性:
P ( Y u , Y v ∣ Y O ) = P ( Y u ∣ Y O ) P ( Y v ∣ Y O ) P\left(Y_{u}, Y_{v} | Y_{O}\right)=P\left(Y_{u} | Y_{O}\right) P\left(Y_{v} | Y_{O}\right) P(Yu,Yv∣YO)=P(Yu∣YO)P(Yv∣YO)
局部马尔可夫性:
P ( Y v , Y O ∣ Y W ) = P ( Y v ∣ Y W ) P ( Y O ∣ Y W ) P\left(Y_{v}, Y_{O} | Y_{W}\right)=P\left(Y_{v} | Y_{W}\right) P\left(Y_{O} | Y_{W}\right) P(Yv,YO∣YW)=P(Yv∣YW)P(YO∣YW)
全局马尔科夫性:
P ( Y A , Y B ∣ Y C ) = P ( Y A ∣ Y C ) P ( Y B ∣ Y C ) P\left(Y_{A}, Y_{B} | Y_{C}\right)=P\left(Y_{A} | Y_{C}\right) P\left(Y_{B} | Y_{C}\right) P(YA,YB∣YC)=P(YA∣YC)P(YB∣YC)
在有向图的情形下,我们可以通过d-划分来判断一个特定的条件独立性质是否成立。那么在无向图中,有没有类似地判定方法呢?
还是对于A,B,C,我们考虑链接集合A的结点和集合B的结点的所有可能的路径。如果所有这些路径都通过了集合C中的一个或多个节点,那么所有这样的路径都被“阻隔”,可以判断集合A与集合B在给定C的条件下独立。
还有另一种更明了的判定方式。我们把集合C中的所有结点以及与这些结点相连的链接全部删除,然后去考察A和B结点之间是否存在一条路径,如果没有这样的路径,则条件独立性质成立。
概率无向图模型的最大特点就是易于因子分解,也就是将整体的联合概率写成若干子联合概率的乘积的形式。
首先我们需要了解什么是“团”与“最大团”
团: 无向图中任何两个结点均有边链接的结点子集;
最大团:无向图中的某一个团C无法再加入另一个结点使其成为更大的团,则C为最大团
那么怎么做因子分解呢?
将概率无向图模型的联合概率概率分布表示为其最大团上的随机变量的函数的乘积形式的操作,称为因子分解。
最后直接看公式
P ( Y ) = 1 Z ( x ) ∏ c ψ c ( Y c ) P(Y)=\frac{1}{Z(x)} \prod_{c} \psi_{c}\left(Y_{c}\right) P(Y)=Z(x)1c∏ψc(Yc)
其中,Z(x)为归一化因子,目的就是为了让结果称为概率(对比softmax理解)
Z ( x ) = ∑ Y ∏ c ψ c ( Y c ) Z(x)=\sum_{Y} \prod_{c} \psi_{c}\left(Y_{c}\right) Z(x)=Y∑c∏ψc(Yc)
后面那个phi函数称为势函数,通常定义为指数函数:
ψ c ( Y c ) = e − E ( Y c ) = e ∑ k λ k f k ( c , y ∣ c , x ) \psi_{c}\left(Y_{c}\right)=e^{-E\left(Y_{c}\right)}=e^{\sum_{k} \lambda_{k} f_{k}(c, y | c, x)} ψc(Yc)=e−E(Yc)=e∑kλkfk(c,y∣c,x)
好的,举个栗子:比如我们需要将上面这个无向图进行因子分解
在有监督的模式识别或者机器学习问题中,我们可以把模型分为生成式和判别式两种。刚接触的时候也是对这俩模型傻傻分不清楚,无法触及到两者的本质区别,然后各种翻阅知乎博客,慢慢有了一些具体的认识。可以参考:
机器学习“判定模型”和“生成模型”有什么区别?
判别式模型与生成式模型
对于一个特定的机器学习问题(输入为X,输出或者说标签为Y),我们的建模思路大致有以下两种:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y | X)=\frac{P(X, Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
好了,上面说的第一种建模思路对应的就是判别式模型,第二种思路对应的就是生成式模型,总结一下: