题目:贝叶斯网络推理算法简单罗列
上一篇《贝叶斯网络与最大可能解释(MPE)问题》理清了最大可能解释(Most Probable Explanation, MPE)的概念,接下来准备在MATLAB中基于工具箱FullBNT-1.0.4实现贝叶斯网络推理,但在此之前还是走马观花式地看一下贝叶斯网络推理算法,本篇取名为“罗列”意味着非常简略的提及一下,因此不要期待能够学得什么具体内容,仅为后面MATLAB实现作一个过渡和铺垫~
贝叶斯网络推理算法大致可分为精确推理算法和挖推理算法两类。精确推理算法希望能计算出目标变量的边际分布或条件分布的精确值,然而此类算法的计算复杂度随着极大团规模的增长呈指数增长,因此仅适用于贝叶斯网络的规模较小时。当贝叶斯网络的规模较大时,多采用近似推理,近似推理算法可以在较低时间复杂度下获得原问题的近似解。
在【周志华. 机器学习[M]. 清华大学出版社,2016.】的14.4节(学习与推断)中介绍了两种精确推理算法(变量消去和信念传播),14.5节介绍了两种近似推理算法(MCMC采样和变分推断)。
在【刘俊娜. 贝叶斯网络推理算法研究[D]. 合肥工业大学, 2007.】2.5节提到:精确推理算法主要有:多树传播(Polytree Propagation)推理算法;团树传播的(Clique TreePropagation)方法,如联结树(Junction Tree Propagation)推理算法;基于组合优化的求解方法,如符号推理(Symbolic ProbabilisticInference)和桶消元推理(Bucket Elemination Inference)算法。近似推理算法主要有:基于搜索的(Search—Based)方法;Monte Carlo算法。针对不同的贝叶斯网络,用户可以选择合适的推理算法进行推理。各种推理算法相互独立,方便用户选择。图2.5给出了现有贝叶斯网络推理的各种算法。
并在接下来的2.6节较为详细地介绍了多树传播推理算法和联结树推理算法。
在【厉海涛, 金光, 周经伦,等.贝叶斯网络推理算法综述[J]. 系统工程与电子技术,2008, 30(5):935-939.】中共介绍了6种精确推理算法和4种近似推理算法,如表所示:
(1)变量消元推理引擎Variable elimination inference engine: engine = var_elim_inf_engine(bnet)
For details on variable elimination, see
-R. Dechter, "Bucket Elimination: A Unifying Framework forProbabilistic Inference", UA1 96, pp. 211-219.
-Z. Li and B. D'Ambrosio, "Efficient inference in Bayes networks as a combinatorial optimization problem",Intl. J. Approximate Reasoning, 11(1):55-81, 1994
-R. McEliece and S. M. Aji, "The Generalized Distributive Law", IEEETrans. Inform. Theory, 46(2), 2000
(2)信念传播推理引擎Make a loopy belief propagation inference engine: engine =belprop_inf_engine(bnet, ...)
This is like pearl_inf_engine,except it uses potential objects, instead of lambda/pi structs. Hence it is slower.
(3)联结树推理引擎Junction tree inference engine: engine = jtree_inf_engine(bnet)
For more details on the junction tree algorithm, see
-"Probabilistic networks and expert systems", Cowell, Dawid, Lauritzenand Spiegelhalter, Springer, 1999
-"Inference in Belief Networks: A procedural guide", C. Huang and A.Darwiche, Intl. J. Approximate Reasoning, 15(3):225-263, 1996.
(4)全局联合推理引擎Contruct the global joint distribution as a potential: engine = global_joint_inf_engine(bnet)
这里反复出现的关键字“引擎(engine)”是什么意思呢?接下来简单探讨一下其含义。
(1)有关BNT工具箱,很多网上资料的描述均出自【蒋望东, 林士敏.基于贝叶斯网络工具箱的贝叶斯学习和推理[J]. 信息技术,2007(2):5-8.】,该文献对“引擎”的描述如下:
为了提高运算速度,使各种推理算法能够有效应用,BNT工具箱采用了引擎机制,不同的引擎根据不同的算法来完成模型转换、细化和求解。
(2)另外,也可能指的是MATLAB引擎机制:所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制。
参见链接:http://npfeng900.blog.163.com/blog/static/1445610820128193458490/
因此,MATLAB引擎应该是MATLAB混合编程技术(应用程序接口)技术的一种。
参见链接:http://npfeng900.blog.163.com/blog/static/14456108201281895346540
(3)另外,在维基百科中专门有一个词条“inference engine”:In the field of Artificial Intelligence, inference engine is a component of the system that applies logical rules to the knowledge base to deduce new information.
百度百科中专门有一个词条“推理引擎”:推理引擎就是应用系统中用来完成推理功能的模块,也可以称作推理机。
不知道这里的“引擎”到底做何解释?
摘自【周志华. 机器学习[M]. 清华大学出版社,2016.】14.4.1节。
摘自【周志华. 机器学习[M]. 清华大学出版社,2016.】14.4.2节。
该算法应用较多可以大致理解一下其思路。
摘自【刘俊娜. 贝叶斯网络推理算法研究[D]. 合肥工业大学, 2007.】2.6.2节。
联结树算法亦可参见:https://wenku.baidu.com/view/dd5b7c2651e79b89680226e8.html
并没有找到全司联合推理算法的详细描述文献,仅找到一段简单的描述:
摘自【胡大伟. 动态贝叶斯网络的近似推理算法研究[D]. 合肥工业大学,2009.】2.3节:
其中全局联合推理算法是先通过建立所有结点的联合概率分布,然后再边缘化,进而计算所求结点的概率分布的方式进行推理;