这篇博客写于2020年7月,因为后来一些事情没有再继续推进贝叶斯相关的工作,所以博客也只写到了一半,想了想还是决定发出来……
贝叶斯方法到贝叶斯网络
- 前言
- 前置知识
- 贝叶斯方法
-
- 与频率派的区别
- 思考方式
- 贝叶斯定理
- 贝叶斯网络
-
- 定义与性质
- 节点间的结构
-
- Head_to_Head结构
- Tail_to_Tail结构
- Head_to_Tail结构
- D-Separation(依赖分离)
前言
最近在看一些基于概率的网络入侵检测与分析方法,发现自己对于概率相关的知识还比较薄弱,尤其是很多文献中使用了贝叶斯网络,看得云里雾里。所以特别花时间把贝叶斯相关的理论知识学了一下,结合自己上学期概率论和一些大佬的博客内容,做一个简单的笔记,便于日后阅读文献时可以对相关前置知识有更好的理解。
前置知识
在上学期概率论与数理统计中学到的一些知识,后面会用得到
- 联合(joint)概率:若干个事件共同发生的概率,如事件A和事件B的联合概率即他们同时发生的概率,记为P(A,B)P(A,B)P(A,B)
- 边缘(marginal)概率:某一个事件发生的概率,如事件A的边缘概率记为P(A)P(A)P(A). 边缘概率可通过将联合概率中其他无关事件合并,进而消除无关事件的方法得出,这一过程就是边缘化(marginalization), 如P(A)=∑BP(A,B)P(A)=\sum_BP(A,B)P(A)=∑BP(A,B)或P(A)=∫BP(A,B)P(A)=\int_BP(A,B)P(A)=∫BP(A,B).
- 条件(conditional)概率:在某一事件A发生的前提下,另一事件B发生的概率,记为P(B∣A)P(B|A)P(B∣A). 条件概率可以通过联合概率除以条件事件的边缘概率得出, 如P(B∣A)=P(A,B)P(A)P(B|A)=\cfrac{P(A,B)}{P(A)}P(B∣A)=P(A)P(A,B).
贝叶斯方法
与频率派的区别
假设去抛一个硬币,记硬币正面朝上的概率为θ\thetaθ.
频率派将这个θ\thetaθ看作一个固定的未知常数,而样本空间X是随机的,即扔硬币的结果是随机的。进而可以通过大量的试验结果,将频率近似为概率。所以概率的计算大部分是针对样本X的分布的。
贝叶斯派的观点则认为参数θ\thetaθ是一个随机变量,而样本空间X是固定的,进而着重研究参数θ\thetaθ.但样本空间在某些情况下是未知的。
思考方式
在研究随机变量θ\thetaθ的分布时,根据样本空间X是否已知,分为两种
一是先验分布(prior distribution),即在样本X未知时,根据已有经验知识所得到的π(θ)\pi(\theta)π(θ).
另一种是后验分布(posterior distribution),即样本X已知后,基于先验分布和样本X,对原有分布的修正π(θ∣X)\pi(\theta|X)π(θ∣X).
这种思考方式表示,新观察到的样本信息不断修正此前对于事物的认知。例如某个工厂中每天对产品进行质检,第一天得到了产品合格率为θ\thetaθ. 第二天再进行检测时得到了新的样本XXX,就可以根据这个XXX对此前的θ\thetaθ进行修正,得到π(θ∣X)\pi(\theta|X)π(θ∣X). 如此不断积累,一段时间后对θ\thetaθ的估计愈加趋向真实值。
贝叶斯定理
对于事件A和事件B,若B不是不可能事件,贝叶斯定理可以用如下公式来表示
P(A∣B)=P(B∣A)×P(A)P(B)P(A|B)=\cfrac{P(B|A)\times P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)×P(A)
这个公式可以直接从前面条件概率公式推导出来,这里省略过程。
在下面的描述中,也将此前提到的边缘概率称为先验(prior)概率, 条件概率称为后验(posterior)概率。
贝叶斯网络
定义与性质
贝叶斯网络(Bayesian Network, BN)的网络拓扑结构是一个有向无环图(Directed Acyclic Graph, DAG),其中节点表示若干随机变量{X1,X2,…,Xn}\{X_1, X_2, …, X_n\}{X1,X2,...,Xn}. 若两个节点间存在因果关系,则用箭头相连,起始端节点为“因”,终止端节点为“果”。
如下图所示,Parent节点直接影响到Child节点,所以构造一条有向边(Parent,Child)表示这一关系,而边的权值为P(Child∣Parent)P(Child|Parent)P(Child∣Parent),即在因事件发生的条件下,果事件发生的后验概率。
令DAG=(E,V)DAG=(E,V)DAG=(E,V)表示一个有向无环图,其中的EEE是所有有向边的集合,VVV是所有节点的集合。令Xi,i∈VX_i, i\in VXi,i∈V表示DAG中i节点所代表的随机变量,则XiX_iXi的先验概率就可以用如下公式计算:
p(Xi)=∏i∈Vp(Xi∣Xpa(i))p(X_i)=\prod_{{i\in V}}{p(X_i|X_{pa(i)})}p(Xi)=∏i∈Vp(Xi∣Xpa(i)) 其中,pa(i){pa(i)}pa(i)表示i节点的父节点。
此外,条件概率的公式可推广到任意多个变量,进而用于计算任意多个随机变量的联合分布,即
p(X1,X2,…,Xk)=p(Xk∣Xk−1,…,X1)×p(Xk−1∣Xk−2,…,X1)×…×p(X2∣X1)×p(X1)p(X_1,X_2,…,X_k)=p(X_k|X_{k-1},…,X_1)\times p(X_{k-1}|X_{k-2},…,X_1)\times … \times p(X_2|X_1)\times p(X_1)p(X1,X2,...,Xk)=p(Xk∣Xk−1,...,X1)×p(Xk−1∣Xk−2,...,X1)×...×p(X2∣X1)×p(X1).
节点间的结构
上图是一个简单的贝叶斯网络示例,对其中节点之间的结构关系进行分析,可以发现大致有三类:
Head_to_Head结构
如图中的x1,x3,x5x_1, x_3, x_5x1,x3,x5,如果单独从图中拎出来,就是一个类似于"V"字形的结构
根据上文中的联合概率公式,我们可以计算a,b,c的联合概率:P(a,b,c)=P(c∣a,b)P(a)P(b)P(a,b,c)=P(c|a,b)P(a)P(b)P(a,b,c)=P(c∣a,b)P(a)P(b)
当c未知的时候,由于∑cP(c∣a,b)=1\sum_cP(c|a,b)=1∑cP(c∣a,b)=1(由于未知可以将其所有可能性求和边缘化),就可以得到:
∑cP(a,b,c)=∑c(P(c∣a,b)P(a)P(b))\sum_cP(a,b,c)=\sum_c(P(c|a,b)P(a)P(b))∑cP(a,b,c)=∑c(P(c∣a,b)P(a)P(b))
进而
P(a,b)=P(a)P(b)P(a,b)=P(a)P(b)P(a,b)=P(a)P(b)
也就是说,在这种结构中,可以认为a节点和b节点(相应于上图中的x1,x3x_1, x_3x1,x3)在c未知的条件下是相互独立的(或者说是阻断的, blocked)
而当c作为观察点,即当c已知的情况下
P(a,b∣c)=P(a,b,c)P(c)=P(a)P(b)P(c∣a,b)P(c)P(a,b|c)=\cfrac{P(a,b,c)}{P(c)}=\cfrac{P(a)P(b)P(c|a,b)}{P(c)}P(a,b∣c)=P(c)P(a,b,c)=P(c)P(a)P(b)P(c∣a,b),无法通过边缘化c的方式推导出P(a,b)=P(a)P(b)P(a,b)=P(a)P(b)P(a,b)=P(a)P(b)
也就是说,在这种结构中,可以认为a节点和b节点(相应于上图中的x1,x3x_1, x_3x1,x3)在c已知的条件下是不独立的
Tail_to_Tail结构
观察图中的x4,x6,x7x_4,x_6,x_7x4,x6,x7,可以发现x4x_4x4即是x6x_6x6的父节点又是x7x_7x7的父节点,对应这样的结构:
显然P(a,b,c)=P(c)P(a∣c)P(b∣c)P(a,b,c)=P(c)P(a|c)P(b|c)P(a,b,c)=P(c)P(a∣c)P(b∣c)
同样地,将情况分为c已知和c未知两种前提式下讨论
若c未知,对上求和
∑cP(a,b,c)=∑cP(c)P(a∣c)P(b∣c)\sum_cP(a,b,c)=\sum_cP(c)P(a|c)P(b|c)∑cP(a,b,c)=∑cP(c)P(a∣c)P(b∣c)
其中左边的∑cP(a,b,c)\sum_cP(a,b,c)∑cP(a,b,c)可以将c边缘化消除得到∑cP(a,b)\sum_cP(a,b)∑cP(a,b),而右边则无法化成我们想要的P(a)P(b)P(a)P(b)P(a)P(b),所以在c未知的情况下,a与b不独立
而对若将上式中的P(c)P(c)P(c)移到左边,可以得到
P(a,b∣c)=P(a∣c)P(b∣c)P(a,b|c)=P(a|c)P(b|c)P(a,b∣c)=P(a∣c)P(b∣c),如果再给出c已知的条件,就可以进一步推导出P(a,b)=P(a)P(b)P(a,b)=P(a)P(b)P(a,b)=P(a)P(b),进而在c给定的条件下,a和b相互独立
即对于这种结构中, a和b是在c条件下独立的
Head_to_Tail结构
观察图中的x1,x4,x6x_1,x_4,x_6x1,x4,x6,可以发现其呈现一种“链式”结构,如下图所示
和第二种情况类似,P(a,b,c)=P(c)P(a∣c)P(b∣c)→P(a,b,c)=P(c)P(a|c)P(b|c)\rightarrowP(a,b,c)=P(c)P(a∣c)P(b∣c)→P(a,b∣c)=P(a∣c)P(b∣c)P(a,b|c)=P(a|c)P(b|c)P(a,b∣c)=P(a∣c)P(b∣c), a和b在c条件下独立
而且非常有趣的是,如果将上式的P(a∣c)P(a|c)P(a∣c)移到左边,可以得到
P(a,b∣c)P(a∣c)=P(b∣c)→P(a,b,c)P(a,c)=P(b∣c)→P(b∣a,c)=P(b∣c)\cfrac{P(a,b|c)}{P(a|c)}=P(b|c) \rightarrow\cfrac{P(a,b,c)}{P(a,c)}=P(b|c)\rightarrow P(b|a,c)=P(b|c)P(a∣c)P(a,b∣c)=P(b∣c)→P(a,c)P(a,b,c)=P(b∣c)→P(b∣a,c)=P(b∣c)
也就是说b的状态在c给定的情况下,仅与c有关,而与a无关
其实可以发现,head to tail的这一结论可以推广到任意多个节点,形成一条链,且有P(Xn∣X1,X2,…,Xn−1)=P(Xn∣Xn−1)P(X_n|X_1,X_2,…,X_{n-1})=P(X_n|X_{n-1})P(Xn∣X1,X2,...,Xn−1)=P(Xn∣Xn−1),这其实就是马尔科夫链(Markov Chain)
D-Separation(依赖分离)
一张贝叶斯网络图可以通过分割成若干个上述三种结构的方式来判断节点之间的独立与依赖关系
关于D-分离,我主要参考了这篇讲义,这一小节的内容主要是基于个人理解对该讲义的一个简要翻译与整理
注:这篇讲义在我后续访问时URL有所变更,我在2021-7-8进行了更新,为了防止以后找不到这篇讲义,我将其下载并上传到了CSDN,若后续讲义链接404了可以访问这里
D-Separation中的 D指的是Dependence,即依赖关系。如果两个变量X,YX,YX,Y在给定一个变量集合Z\ZZ的情况下式独立的,就可以称X和Y在Z条件下独立。简单地来说,如果在关于Z\ZZ的知识均为给定的情况下,额外知道X相关内容对了解Y没有进一步的帮助,就可以说X和Y在Z条件下独立。
这篇讲义的作者在这里使用了活跃节点/路径(active vertex/path)的观点来描述D-分离,如果两个节点间的任意路径都是不活跃的(inactive),那么这两个节点就是在这一条件下独立的。
按照讲义中的描述,一条路径是否活跃就看其有无传递信息;或者说,如果沿途所有的节点都是活跃的,那么这条路径就是活跃的。
那么如何确定节点是否为活跃的呢?
这里先简单定义一个“交汇节点”的概念,讲义中称为collider。如果一个节点有不止一个指向它的有向边,即这个节点的入度大于1,则这个节点时一个交汇节点,否则是非交汇节点(non-collider)
若一个节点不在条件集时,即没有任何关于该节点先验知识的情况下,非交汇节点是活跃的,而交汇节点是不活跃的;相反,若该节点在条件集中,则交汇节点活跃、非交汇节点不活跃。此外,交汇节点和其子节点的活跃状态会同时改变。