您的位置:首页 > 其它

认知的概率模型(ESSLLI教程) - 第二部分译文 - 条件

2011-05-01 22:14 375 查看
2. 条件

我们已经发明了一套概率生成模型的工具集,它们代表着世界上有因果关系的知识:这些程序对“因果历史”进行采样。不管怎样,因果模型的能力体现在能灵活地被用来对这个世界进行推理,比如,如果我们在一个生成模型中X依赖于Y,我们可能会问:“如果我们观测到X, Y会怎么样呢?”。在本节我们将讲解一个简单的生成模型通过观测到或假设的事实条件进行各种各样的推理。

大多数认知可以用条件推理来理解,在大多数情况下因果推理就是条件推理:通过一些已知的观察量,推导最可能的原因。而预测是反方向的条件推理:通过已观测到的原因,推导最可能的结果。这些推理要么对表达因果关系的概率程序求条件要么需要理解结果有多大依赖于原因。因果模型的获得,也就是学习过程,同样是一个在更抽象更高层面的条件推理过程:在域中描述因果关系运转的一般知识以及一些观测到的候选因和果相互发生的不同事件基础上,这些观测到的变量之间的可能存在的因果关系是什么?

因果关系模型并不关注知识的应用,比如语言学,自然语言研究所关注的核心问题都是条件推理的核心问题。比如有了我的语言的语法结构知识,再给我一个句子,我如何判断该句子的语法结构是否正确?这仅仅是个语法分析的问题。

一个补充的问题是:有了语言的语法结构知识和要表达的某个特定想法,语法上该如何组织?最后是知识发现和获取问题:有了基本语法的一般知识和例句,如何掌握语言的语法?这个问题也就是我们的语言学家和孩子们所遇到的问题。

视觉捕捉、直觉心理学以及认知的其它领域产生了并行条件推理的问题。视觉获取中,我们观察到一个图像或一系列图像就是一个三维的物理场景投射到二维的视网膜上的过程。一个概率程序既能模拟自然场景产生的物理过程,又能模拟从场景投射出图像的“想象”过程。感知就是运用这种程序根据观察到的图像推测出最佳场景的条件推理过程。在与人的交互中,我们发现有意识的智能体的动作实际上经过计划的:根据智力状态(信仰和需求)产生连续的动作—典型的,对一个理性的智能体,它采取的动作会根据知识(信仰)仅可能可靠的、有效的达到它想要的状态。一个理性的智能体能通过条件推理来计划它们的动作以期最大可能地达到想要的状态。观察到的智能体行为理解或解读能通过一个机遇条件的计划程序实现,它能通过观察到的行为来推导最可能到达的智能状态,并预测该智能体下一步动作。

2.1 用query进行假设推理

假设我们知道一些固定的事实,我们需要知道某个生成模型形成该事实的前提条件。在Church中我们可以使用如下形式的query函数:

(query

generative-model

what-we-want-to-know

what-we-know)

query有三个自变量,第一个是由define定义的一些生成模型;第二个是查询表达式,也就是我们感兴趣的需要计算的部分;最后一个变量是需要满足的条件:可以是一些观察值、数据或更一般的假设,也叫条件句。

请看下面一个简单的生成模型:

(define A (if (flip) 1 0))

(define B (if (flip) 1 0))

(define C (if (flip) 1 0))

(define D (+A B C))

D

上面的过程取样三个数值(0或1),然后再加起来,最后表达式的值可取值为0,1,2,3。每个变量A、B、C取0或1的先验概率为0.5。假设我们观察到D等于3,那么A最可能的取值空间是什么呢?很明显本例中A必须等于1。可以用如下的query语句:

(define (take-sample)

(rejection-query

(define A (if (flip) 1 0))

(define B (if (flip) 1 0))

(define C (if (flip) 1 0))

(define D (+ A B C))

A

(equal? D 3)

)

)

(hist (repeat 100 take-sample) “Value of A, given that D is 3”)

上面的rejection-query会得出在D等于3时,猜测A的最可能取值,我们再用repeat猜测100次,最后用hist函数画出相关概率的柱形图。因为A必须等于1,所以这个图表显示了为该采样显示了100%。

现在我们假设D的条件为大于等于2,这样A就不必一定为1了,但它是1的可能性比不是要大。相应的柱形图显示了在该条件下所猜测的A值的概率分布。

(define (take-sample)

(rejection-query

(define A (if (flip) 1 0))

(define B (if (flip) 1 0))

(define C (if (flip) 1 0))

(define D (+ A B C))

A

(>= D 2)

)

)

(hist (repeat 100 take-sample) “Value of A, given that D is 3”)

为了更好的理解query,让我们先研究一下简单、效率不高但准确的拒绝采样法,它用的是生成再验证的简单办法,前向运行这个生成模型,程序每次采样后我们与条件相比较,如果符合条件就保留这个结果,否则就丢弃,这可用下述Church原理代码表达:

(define (rejection-query ..defines.. query-expression conditioner)

..defines..

(define query-value query-expression)

(define condition-value conditioner)

(if (equal? condition-value true)

query-value

(rejection-query defines query-expression conditioner)))

一个Church过程隐含了一个它采样的概率分布。Rejection-query所定义的查询可以被认为是满足条件的查询结果的分布,这与概率理论中条件概率的正式定义是等价的,在B等于b的条件下A等于a的条件概率常常被写成P(A=a|B=b)。

不幸的是rejection-query效率很低下:即使确信我们的模型满足条件,它也要进行大量的采样来做一遍。如果上面例子里A,B,C的概率很低的话,这个查询最终会运行很长时间而超时被停掉。

(define baserate 0.1)

(define (take-sample)

(rejection-query

(define A (if (flip baserate) 1 0))

(define B (if (flip baserate) 1 0))

(define C (if (flip baserate) 1 0))

(define D (+ A B C))

A

(>= D 2)

)

)

(hist (repeat 100 take-sample) "Value of A, given that D is greater than or equal to 2")

即便是这样简单的问题,将baserate降低一个量级至0.01就会使rejection-query不可用。

在AI中为了提高不确定空间的搜索效率有着许多算法和技术,有一些被引入到Church语言的query实现中使得query在许多情况下的效率更高。(虽然,它们的效率各异,但每个的实现都差不多:给予足够的时间,它从Church模型满足查询条件的恰当的条件分布中采样。)我们常用的一种是基于Metropolis快速算法,是马尔科夫蒙特卡罗推理的一种形式。

(define baserate 0.1)

(define samples

(mh-query 100 100

(define A (if (flip baserate) 1 0))

(define B (if (flip baserate) 1 0))

(define C (if (flip baserate) 1 0))

(define D (+ A B C))

A

(>= D 2)

)

)

(hist samples "Value of A, given that D is greater than or equal to 2")

mh-query需要两个额外的参数,并返回一些列采样值,第一个额外参数是需要的样本数量,第二个参数被算法用来控制迭代的步长,这是个内部随机选择,这样查询总迭代数,也就是总运行时间,取决于这两个参数的乘积。MH的运行原理超过了本教程的范围,但大致可以概括为三句话:该算法在满足条件的随机空间中使用了一种随机游走或扩散的过程;每次MH迭代就是随机游走一步,在长期运行过程中它到达满足条件的点的频率将于它的概率成正比;只要样本之间有足够长的“lag”,这些独立的样本就大约接近于Church程序的条件分布。

如果你降低baserate,上面的查询不会明显变慢,但是它会越来越不准确和不稳定。采用小的随机步数(上面是100),MH获得满足条件的独立样本会变得急剧困难,100个样本集并不能有效代表真实的条件分布。在本例中,将样本数增加到500,仍然可以在合理时间内得到稳定、准确的条件推理结果。

2.2 案例:医疗诊断中的因果推理和人们概率推理的本质

这是个经典的贝叶斯推理,也是个特殊的条件推理任务,卡尼曼、特瓦斯凯、吉仁哲和同事们研究了人们如何做出如下的简单判断:

“一个参加例行检查的40岁女人查出得乳腺癌的概率为1%,如果一个女人有乳腺癌,那么乳房X光查出的概率是80%,如果一个女人没有乳腺癌,那么乳房X光误报的概率是9.6%,问:如果一个女人被乳房X光查出有乳腺癌,那么她实际上得乳腺癌的概率是多少?”

你的直觉是多少?许多没有受过统计推理学习的人会判断出很高的概率,一般在0.7至0.9之间,而正确的答案却要低得多,不到0.1,我们用下面简单的Church查询程序就能算出来。

(define samples

(mh-query 100 100

(define breast-cancer (flip 0.01))

(define positive-mammogram (if breast-cancer (flip 0.8) (flip 0.096)))

breast-cancer

positive-mammogram

)

)

(hist samples "breast cancer")

卡尼曼和特瓦斯凯把这类判断错误叫做基本概率忽视,因为为了做出正确的判断,人们必须意识到关键的是疾病得病率(本例为0.01)和误报率(本例为0.096)的差别,误报率(FAR)与似然率(乳房X光查出的概率)相比看上去很低,但是真正的问题是它几乎比疾病得病率高10倍。贝叶斯法则的标准版本需要利用上述全部三个量来计算在乳房X光查出得病的情况下实际得乳腺癌的后验概率。

吉仁哲和同事们发现,如果将相关的概率表示成更自然的频率或事件子集的大小的话,未经训练的推理者更能凭直觉得出结论:

“平均来看,每1000个40岁妇女前来进行例行检查的有10个患有乳腺癌,其中8个人中会被乳房X光查出来,没有女性乳腺癌的990个人,95个也将被乳房X光误报成乳腺癌。我们来看看例行检查的1000名40岁妇女,那些被乳房X光查出得乳腺癌的人你认为真正有乳腺癌的有多少?“

现在几乎可以从问题中读出答案:103个(95+8)乳房X光查出乳腺癌的妇女中间有8个人真正有乳腺癌。

吉仁哲(科斯米迪、托比和其他同事)强调因为进化和计算上的因素使得上述形式更加简单:人脑被进化成适应对自然界的离散事件进行计数和比较自然的频率,而并非对十进制的概率进行加减乘除。但是这种说法无法解释人类在因果推理中广泛的能力,因为我们常常在没有观测到足够事件情况下,即没有频次下进行推理(常常没有人知道相关的频次,虽然可能以概率形式或其它语言表达的因果关系的强度或几率)。上例中用了一整张表格枚举了所有可能性来描述频次信息,这在更复杂的现实世界推理中是行不通的。

不管怎样,他们的基本想法是:人脑更擅长处理有关频次的场景,而不是有关连续概率值方面的算术,但能被拓展来处理虚构(频次是通过想象的场景获得的)的场景。回想一下,Church程序就是在隐含的特定概率分布上进行明显的虚拟场景的采样。如果人们的推理思维和Church查询类似的话,那么,它就能创造和操纵想象出来的场景,这样就能解释为什么人更适应贝叶斯概率的频次计算形式以及为什么人能够或多或少的处理一些虚构的场景。频次形式中的数字可以从运行表示上述问题的Church程序1000次后的计算历史树上读取出来:

这棵树从树根到叶子每条路径代表了上面程序的一系列随机选择(先选乳腺癌,再选被X光查出),每条边旁边标注了采样值和遍历的次数(由于是1000次采样,所以,这些数字与吉仁哲的那些很接近)。与rejection-query相应的,有105个妇女被X光查出乳腺癌,但真正得的是7个,再计算比率(7/105),

这样,我们使用了Church程序中的因果表达形式来计算频次,最后推导出X光检出的妇女中只有相对很小一部分真正得有乳腺癌。

和rejection-query不一样,人类这种场景下进行推理的表现很差,为什么呢?一种说法是人类表达知识的形式和前面那个简单的Church程序不一样,确实这样,泰拉贝尔和克洛斯基(JEP,2007)指出人类在统计学上的判断基本基于更明显的因果关系模型:当人们得到的统计信息不能直观地映射成直觉上容易接受的因果关系时,他们容易犯忽视基本概率或其它判断错误。在上面的例子中,他们认为错误率对于许多人来说不够直觉——特别是当一个医疗诊断的误报率比基本得病率高出10倍多的时候。他们展示了一个方法能消除忽视基本得病率错误,只要重新将这个癌症问题组织成更直觉的因果关系模型,那么,答对率就能提高2倍以上。例如,看看他们下面的这个版本:

“在参加体检的40岁妇女中有1%的人有乳腺癌。80%有乳癌的会被乳房X光检查出来。而参加体检的40名妇女中有20%的人有良性囊肿,由于密集的囊肿组织,50%良性囊肿的人将被乳房X光检查误诊为乳腺癌。所有其他人乳房X光检查没有问题。假设这个年龄组的女人被乳房X光检查出来,那么她实际上得乳腺癌的概率是多少?“

这个问题对人们来说容易找到答案 — 以经验为主,就像频次形式一样容易。我们可以推测这是因为有关频率可以用一个简单的表示这个因果模型的Church查询计算出来:

(define samples

(mh-query 100 100

(define breast-cancer (flip 0.01))

(define benign-cyst (flip 0.2))

(define positive-mammogram (or (and breast-cancer (flip 0.8)) (and benign-cyst (flip 0.5))))

breast-cancer

positive-mammogram

)

)

(hist samples "breast cancer")

因为这种因果模型—上述Church程序—更接近于人们的直觉,虽然使用的是百分比而非频次,人们也能想象出合适的场景。什么使得这个因果模型比前面现式定义误报率的模型更接近直觉呢?本质上,我们现式地定义了观察到事件的其它原因(例如由于良性瘤而查出癌症的条件概率)来替代“矛盾”的事件的条件概率(没有癌症却被查出的条件概率)。

这类因果模型的框架可以扩展到更为复杂的情况。回想我们上一节使用逻辑函数来描述更复杂的医疗诊断对疾病症状之间的依赖关系:

(define samples

(mh-query 1000 100

(define lung-cancer (flip 0.01))

(define TB (flip 0.005))

(define cold (flip 0.2))

(define stomach-flu (flip 0.1))

(define other (flip 0.1))

(define cough (or (and cold (flip 0.5)) (and lung-cancer (flip 0.3)) (and TB (flip 0.7)) (and other (flip 0.01))))

(define fever (or (and cold (flip 0.3)) (and stomach-flu (flip 0.5)) (and TB (flip 0.2)) (and other (flip 0.01))))

(define chest-pain (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other( flip 0.01))))

(define shortness-of-breath (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other (flip 0.01))))

(list lung-cancer TB)

(and cough fever chest-pain shortness-of-breath)

)

(hist samples "Joint inferences for lung cancer and TB")

你可以使用这个模型来推断在任何症状下的任何疾病子集的条件概率。试着改变条件中的症状和查询中的疾病,比较一下推导的结果和你的直觉有何不同。例如,如果我们在条件的症状中删掉气短和胸口疼,那么,推导结核病和肺癌的概率会怎么样呢?更一般的,我们以任意症状和疾病组合为条件来查询其它的组合,我们在条件中也能用否定词,如,如果我们观察到一个病人不发烧或不咳嗽或两个症状都没有,那么,肺癌(或结核病)的概率是多少?

Church程序能有效地将一大堆问题编写成非常紧凑的代码,其中的每个问题想这样:“假如我们观察到X,我们能推导出Y吗?”。在上面的程序中有39=19683个可能的条件组合(因为一共9个随机变量,每个有真、假和未知3中情况),那么,对应每个X也有相当的Y,将有百万个问题。事实上,正如我们下面将看到的,当我们描述复杂查询时,在一个短短的Church程序中编码的可能问题的真实数量是非常巨大的,通常是无限的。使用query原则上我们可以计算任意问题的答案,我们也开始意识到正如开头介绍的那样,概率编程为构建一个“思想”的语言提供了基础:一个有限的知识系统能简洁和高效地支撑无限的推理和决策任务。

将我们的知识表达成概率程序模式可以使我们能够在不改变或不干扰原有知识的基础上很方便地加入获取的新知识。例如,我们想要研究行为和人口统计学因素对一个病人是否得某种病的因果关系:

(define samples

(mh-query 1000 100

(define works-in-hospital (flip 0.01))

(define smokes (flip 0.2))

(define lung-cancer (or (flip 0.01) (and smokes (flip 0.02))))

(define TB (or (flip 0.005) (and works-in-hospital (flip 0.01))))

(define cold (or (flip 0.2) (and works-in-hospital (flip 0.25))))

(define stomach-flu (flip 0.1))

(define other (flip 0.1))

(define cough (or (and cold (flip 0.5)) (and lung-cancer (flip 0.3)) (and TB (flip 0.7)) (and other (flip 0.01))))

(define fever (or (and cold (flip 0.3)) (and stomach-flu (flip 0.5)) (and TB (flip 0.2)) (and other (flip 0.01))))

(define chest-pain (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other( flip 0.01))))

(define shortness-of-breath (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other (flip 0.01))))

(list lung-cancer TB)

(and cough chest-pain shortness-of-breath)

)

)

(hist samples "Joint inferences for lung cancer and TB")

一个气喘、咳嗽和胸口疼的病人更易得肺癌或结核病,修改这个模型再加上是否吸烟或是否在医院工作,看看我们的条件推导结果会如何变化。一般意义上,用概率程序表示知识的因果结构使得我们能建立直观的模型,可以无限度的加入新知识,使其复杂度在生命期内持续增长。

2.3 应用:人工智能中作为专家系统的贝叶斯网络

在人工智能中,这类因果模型通常被称为贝叶斯网络,信仰网络或有向图模型。贝叶斯网络使得专家系统领域发生了变革,其目标是将人类专家知识自动化为机器推理的形式。特别是在医学诊断领域,QMR(“快速医学参考“),贝叶斯网络很早就是那个领域的里程碑,就像我们上面的例子,QMR有两层疾病引起症状的结构并含有噪声逻辑函数,但它要大得多以便捕捉到一个典型的医生要一定时期内要处理的所有疾病:

最近,更复杂而且临时的贝叶斯网络扩展开始在生物学和人类基因医疗系统中发挥作用,如德雷克、赛罗吉科斯的例子:

2.4 用任意命题推理:复杂的查询

在一个生成模型中最自然的是对一个变量求条件,然而,人们也许想问更复杂的假设问题:“如果P会怎样”,其中P是由模型中多个随机变量组合起来的复合命题。

请看下面的Church query:

(define samples

(mh-query

100 100

(define A (if (flip) 1 0))

(define B (if (flip) 1 0))

(define C (if (flip) 1 0))

A

(>= (+ A B C) 2)

)

)

(hist samples "Value of A, given that the sum is greater than or equal to 2")

这个查询的内容和以前的例子一样,但是句法大不一样,我们定义了一个有3个取值0或1的变量的生成模型,然而,我们的条件是复合的,就是3个变量的和大于等于2,这就引入了一个新的随机变量,(>= (+ A B C) 2),它在生成模型中没有出现过。在传统条件概率表述中,我们常常将观察到的事件作为条件:它显式地将随机变量定为一个固定值,例如P(A|B=b)它显式地要求B=b。为了这样表述上述查询,我可以在生成模型中增加复合变量,然后再取条件。然而这种纠结的假设的假设的生成模型不是我们想要的:我们想要一个简单的模型来支持许多查询,而不是一个复杂的模型却只支持一些规定好了的查询。

用Church编写的模型能像前面那样方便地建立复杂的随机表达式,为复合命题进行假设,而不再局限于单个的观测值。这样我们可以构造查询的大多数方案的有效数量不会仅仅是一个大数目而是无穷多,就像在自然语言中的句子。原则上正确的query函数支持无限组这种情况下条件推理。

2.5 例子:拔河比赛中的推理

返回早先的拔河比赛例子,我们可以用query来回答各种各样不同的问题。

例如,如果Bob的队伍胜出,那么Bob有多少可能是强壮的呢?

(define samples

(mh-query 100 100

(define strength (mem (lambda (person) (if (flip) 10 5))))

(define lazy (lambda (person) (flip (/ 1 3))))

(define (total-pulling team)

(sum

(map (lambda (person) (if (lazy person) (/ (strength person) 2) (strength person)))

team)))

(define (winner team1 team2) (if (< (total-pulling team1) (total-pulling team2)) 'team2 'team1))

(strength 'bob)

(and (eq? 'team1 (winner '(bob mary) '(tom sue)))

(eq? 'team1 (winner '(bob sue) '(tom jim)))))

)

(hist samples "Bob strength")

试着改变队伍的数量和Bob的队友,这样会改变Bob强壮的概率吗?这些变化和你的直觉一致吗?你能修改这个例子画出strength的均匀分布吗?

从这个简单的例子中,我们能组成许多复杂的查询,我们可能问这样的问题:如果Bob和Mary一个队,Jim和Sue一个队,Mary至少和Sue一样有力,Bob曾经在一个队伍里赢过Jim的队伍,那么,Bob和Mary胜出的可能性是多少呢?

(define samples
  (mh-query 100 100
    (define strength (mem (lambda (person) (if (flip) 10 5))))
    (define lazy (lambda (person) (flip (/ 1 3))))
    (define (total-pulling team)
      (sum
         (map (lambda (person) (if (lazy person) (/ (strength person) 2) (strength person)))
               team)))
     (define (winner team1 team2) (if (< (total-pulling team1) (total-pulling team2)) 'team2 'team1))
    (eq? 'team1 (winner '(bob mary) '(jim sue)))
     (and (>= (strength 'mary) (strength 'sue))
         (eq? 'team1 (winner '(bob francis) '(tom jim)))))
)
(hist samples "Do bob and mary win against jim and sue")

作为一个练习,让我们回到拔河比赛下生成模型描述和编写Church程序来推断给定一个特定的比赛结果条件下爱丽丝比鲍勃强的概率。

(define samples
  (mh-query 100 100
    (define strength (mem (lambda (person) (if (flip) 10 5))))
    (define lazy (lambda (person) (flip (/ 1 3))))
    (define (total-pulling team)
      (sum
         (map (lambda (person) (if (lazy person) (/ (strength person) 2) (strength person)))
               team)))
    (define (winner team1 team2) (if (< (total-pulling team1) (total-pulling team2)) 'team2 'team1))
    (> (strength 'alice) (strength 'bob))
    (and (eq? 'team1 (winner '(alice tom) '(bob pat)))
         (eq? 'team1 (winner '(alice joe) '(bob pat)))
         (eq? 'team1 (winner '(alice tom) '(bob sue)))
         (eq? 'team1 (winner '(alice joe) '(bob sue)))
         (eq? 'team2 (winner '(tom joe) '(pat sue))))
  )
)
(hist samples "Is alice stronger than bob?")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: