星期日, 一月 06, 2008

人工智能-逻辑框架

如何描述一个概念


 

当我们用程序描述一个概念的时候,比如一组 大于100小于1000的数,那么可以用

If(x>100 && x<1000) 来表示,这是100 ---------1000 这样一个线段。

但人对一个事物的认识会随着经验的增加会变得越精确,比如那个x后来被认为是在100-500之间,那么这个概念如何更改呢,在程序中可能是直接把上述语句改为

If(x>100 && x<500) 这样的改动非常容易,但是在现实中,常常会出现这个样的可能,后来又发现x有可能会出现在900以上,那么程序又将改成If((x>100 && x<500 )|| x>900 ) 并且此时由于没有记录最开始1000这个上限,所以程序少了 x<1000 这样的属性。

其实上述问题也就是在软件工程中会遇到的最大的麻烦,当我们无法确定一个事物的概念描述的时候,会导致程序不断的改动,假设在系统中某个地方程序员设定了x不可能大于500这个条件作为某种逻辑判断的话(比如设计一个int[500]的数组),那么这样的改动将会导致系统的崩溃,而要保证不出现这样的问题就需要检查系统中所有代码是否有这样逻辑,随着系统复杂度的增加,这个工作将变成一个impassible mission.

人类在表达这类概念所体现出来的可伸缩性是一种令人惊叹的能力,相反,人在理解If((x>100 && x<500 )|| x>900 ) 这类表达式的时候会出现非常大的困难,如果我再加长这个表达式,那么就很难有人可以看懂了

下面这个树状结构似乎是更符合人的思考方式


在这里我们会注意到人和计算机思考模式的巨大差别,人是并行思维,100 <x<500 和900<x<1000 是同时看到并且得出结论,而计算机则先处理 100<x<500.

另外人与计算机更大的不同是,人在isX 这个问题上,会保留一种历史修改的记忆,比如从100<x<1000 变化到 100<x<500 然后到 100<x<500 || 900<x ,然后通过这种历史记忆,人类会给这条规则加上900<x<1000 这样的更精确的描述.

假设这个x最终是一个分布在 0- 10000 之间的数,但是x 大部分集中在100-500之间出现,次之是在900-1000段,而其他段出现的范围是比较小,并且在某些位置出现的可能是绝不可能的。比如在0或者999上都不是x,那么最终在人脑中的结构可能是如下的


大家可以看到,其实在is X的分支中,rule3 已经覆盖了rule1和rule2,但是人在判定某个数是X的时候,如果是在100-500中,会感觉更有把握一些。

以上是我对计算机与人脑对与知识存储的区别的一个对比,随后我将进行更加详细的分析