概率图模型:原理与技术之精确推理的复杂性分析
前言
这学期在学习这本书,特别晦涩难懂,所以我就把我看懂的一些内容放在这。最近学到了利用贝叶斯网进行推理。第九章第一节是写的对于精确推理和模糊推理的复杂性分析。这里我只说一下精确推理分析的相关知识点。以下都是我个人的理解,欢迎大家指正。
复杂性理论
在讨论精确推理的复杂性之前,需要先了解复杂性理论的相关知识,要不然就看不懂前面讲的东西,这本书上在附录中的A.3.4中做了介绍。
1. 决策问题
这是课本上的定义,我的理解就是,决策问题就是判断一个问题是正确或错误,也就是输入一个问题,判断返回是否为1(我自己瞎编的,不知道对不对)。决策问题也是P问题(确定性决策算法)。
2.NP问题
我们刚才已经知道P问题就是决策问题。下面我们介绍NP问题(不确定性决策算法)。以下也是网上的解释:
多项式:
对于变量n,5n^2+2n+1这种就叫做多项式。前面再加上n3甚至一路增加到nm,只要m是个常量,就都是多项式。因为这样的式子合并同类项什么的简化到最后还是会有好几个含n的项,所以叫做多项式。
后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(na)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
P类问题:能在多项式时间内可解的问题
NP类问题:能在多项式时间内验证得出一个正确解的问题。(NP:Nondeterministic polynominal,非确定性多项式)
不知道这个问题是不是存在多项式时间内的算法,所以叫non-deterministic非确定性,但是我们可以在多项式时间内验证并得出这个问题的一个正确解。
NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。找一个解很困难,但验证一个解很容易
所有的P类问题都是NP问题。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。
我的理解也不是特别深刻,在这里就简单地说一下我的理解,p问题就是要在多项式时间里找到问题的解,而np问题则是猜测一个值是不是这个问题的解。
3.NP问题的证明
书上给出了np问题的证明方法。如下:
有点晦涩,他的意思是,NP问题有两个过程:
- 猜测阶段:给定一个猜测的解r
- 验证阶段:看看这个r是不是这个问题的解。
- 如果,其中有一个r是这个问题的解,(也就是说,不断尝试猜测,知道猜测到某一个r是问题的解,就可以停下来了),那么这个问题就是一个NP问题。
这样是不是好理解一点了,不过我不知道对不对,哈哈。
4.NP难问题
约化的概念:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。
这里只提一句算了,NP难问题就是说,如果有一个问题可以被所有NP问题约化到,但是这个问题本身不一定是一个NP问题,那么这个问题就是NP难问题。这里有两个用途:一个是用于下面证明NP完全问题,一个是我们要知道,如果一个问题是NP难问题,说明这个问题很复杂不易解决。详见下面。
5.NP完全问题
这里课本上也是解释的很垃圾,所以以下是我从网上找的解释:
从约化的定义中我们看到,一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。再回想前面讲的P和NP问题,联想起约化的传递性,自然地,我们会想问,**如果不断地约化上去,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。**这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC 问题,也就是NP-完全问题。
证明一个问题是NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它
NPC类问题(Nondeterminism Polynomial complete):存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件:
首先,它得是一个NP问题;
然后,所有的NP问题都可以约化到它。
也就是说,NP完全问题就是,解决了这个问题,那么可以解决所有NP问题,这个概念也很抽象,不过在这一块,我们只需理解两个问题:一个是如果一个问题是NP完全问题,那么这个问题很复杂,在实践中难以解决。第二个 就是知道了证明他的方法。不过这里的证明方式与书上稍有区别,我们还是以书上的为准。如下:
这句话给我们提供了重要信息,在书中,证明一个问题是NP完全问题,需要两步:
1.证明这个问题是NP问题(证明方法我们已经在前面说过)
2.证明这个问题是NP难问题,只要找到另一个NP难问题可以约化到它,就可以证明这个问题就是NP难问题。而3-SAT是一个NP完全问题,就一定是一个NP难问题。
这就是证明精确推理复杂性的基本思路。
6. SAT问题
上面的图是我偷的网上的,因为书里介绍的像狗屎。总结一下就是,SAT有文字,文字又组成子句(也就是一个句子),子句又组成一个SAT公式。文字之间用析取(也就是取大)构成子句,子句之间用合取(取小)构成公式。文字的输入形式只有0和1。通过对每个文字赋值(0或者1),可以最终计算公式的结果,若所有的输入中,有一个结果是1则这个公式是满足状态。
7. 3-SAT问题
紧接着,课本中又引出一个3-SAT问题,这是SAT中的一种特殊形式。我们知道,SAT问题中子句可以包含不限量的文字,而3-SAT问题中每个子句必须由3个文字析取组成。这就是他们之间的区别。书中A.3的式子就是一个典型的3-SAT,如下所示。
精确推理的复杂性分析
经过前面一系列的铺垫,我们终于开始正文的证明了!
在第九章第一节中,其实就是说明一个问题,那就是在贝叶斯网的推理中,不论是精确推理还是模糊推理,都是很困难的。
下面我们就来证明书上说的关于贝叶斯网精确推理的复杂性问题。
以下是我们要证明的问题:
证明:给定花X上的一个贝叶斯网花B,变量X属于花X和值x属于Val(X),将决定P(X=x)>0是否成立。
这个问题是NP完全问题。
我简单的分析一下,对于一个贝叶斯网图,我们想知道,对于其中一个节点X,有没有X=x存在的可能。也许我说的比较抽象,不过等下面证明时我们导入了3-SAT的模型后,一切就会开朗。
下面开始证明:
(由以上的知识,我们已经知道证明NP完全问题的步骤,即1.证明该问题是NP问题。2.证明该问题是NP难问题,即找到一个已知的NP难问题可以约化到该问题,这里我们用已知的3-SAT问题约化。)
1.证明该问题为NP问题
证明NP问题的步骤也在上面介绍过了,这里不难理解。这里设的赋值(打不出来我用·代替)是贝叶斯网中的一个输入。验证阶段,我们要验证一下输入这个·以后,节点X是否为x,若为x,则说明在所有输入的可能性中,已经有至少·一个输入的输出X为x,我们假如说,这个问题中只有·这一个输入使X=x,则这里的P(X=x)就是1/所有可能的输入。但是我们猜出这一种可能性,并不能确定是否只有·这一种可能性满足X=x,我们只能确定,有一个或以上满足了X=x,也就是说P(X=x)一定是大于零的。
这里不过多介绍了。
2.证明该问题是NP难问题
由以上我们已经知道,我们若可以把一个已知的NP难问题约化到该问题,则该问题也是一个NP难问题。这里我们已知3-SAT问题是NP难问题,下面我们就把3-SAT问题表示成贝叶斯网。
我们已经知道,在3-SAT问题中,有q1,q2……qn个文字,其中三个文字析取组成一个子句Ci,一共组成了C1,C2……Cm个子句,这些子句合取组成公式X。若是输入q1,q2……qn的所有可能性中有其中一个输入可以使X=1,则说这个公式是可满足的。
我们将所有q当做输入节点,C作为q的后代节点,每三个q指向一个C,X作为所有C的后代作为输出,可得到下图:
然而,当P(X|C1,C2,…Cm)写成表格形式时,规模指数太大,所以,书上又提到了添加一个与门结构,则新的贝叶斯网图如下:
我们已经知道,c1,c2…cm之间用^(取小)连接,也就是说,要使公式为1,c1,c2,…,cm必须全部为1。设计这个与门后,只有c1,c2都为1时,A1才能为1,以此类推,若Am-2为1,就意味着前面的c1到cm-1的值全部为1,最后再与cm与,得到的X为1的时候,则c1,c2,…,cm一定全部为1。这样每个变量最多有三个只能取0或者1的父节点,所以规模是多项式。
那这个图跟我们要证明的问题又有什么联系呢?
在这个图中,q1,q2,…,qn就是一个输入·,而X=x,在这里x就是1,要证明的问题就可以转换成:在所有的q1,q2,…,qn的取值中(注意这里每个q只能取0和1,所以一共能取2的n次方种),有至少一种取值使X为1。这样就很好明白了。我们假设满足输出X为1的q1,q2,…,qn的取值的个数为a,P(X=x)则为a/2的n次方。以下书中的内容就是我说的意思:
由此就可以证明了。