计算机程序的“行为学”(一)——写在前面
2008-09-24 20:56
190 查看
首先要声明这篇文章不为吹捧任何先进的或者高尚的或者与时俱进的技术或者理论,所以请不要在我的地盘上乱点火,我肯定不会回应的。我是双鱼座的人,和我吵架等于慢性自杀,各位请自重。
那么我在这里要说的是关于计算机程序的“行为学”,显然计算机不会和人一样自主思考,所以“行为学”只能打上引号了。我的目的当然不是证明计算机程序如何用六条腿行走(我读初中的时候曾经看过此类研究天牛行为的文章,写得理论有余,精彩不足),我只是希望引发读者对于计算机程序的“行为”模式的思考,然后进一步地,我们可以看到如何通过计算机程序的“行为”来解释它的思维,然后我们能够看到一些使得计算机能够“自主思维”的方法。如果您对于最后一点嗤之以鼻也没关系,计算机智能领域从来都是分歧严重的,所有的意见都仅供参考。
那么我们按照计算机教材的惯例,以一个小故事开始:这个故事是著名的泥巴孩子故事,如果您看过《Reasoning About Knowledge》这本书可以直接略过这段,或者到这里看另外一个故事:(另外一个Blog上不去,回头填一下)。
关于泥孩子的故事,大体上是这样的(摘自《Reasoning About Knowledge》):
假设有n个小孩在一起玩。这些小孩的妈妈告诫过他们如果把自己弄脏了会有很严重的后果。所以,每个孩子都希望能保持清洁,但是每个孩子又都希望看到别人弄
脏自己(小孩就这么阴险……)。现在这帮小鬼中的一些,假设有k个人,在玩的时候把泥巴弄到自己额头上了(以头抢地?)。他们中的每一个都能够看到别人头
上的泥巴,但是却看不到自己头上的泥巴。当然,他们不会说出来。然后他们的父亲来了,他说:“你们中至少有一个人额头上有泥巴。”这一点当然小孩们都已经
知道了(如果k>1)。于是父亲开始一遍又一遍地反复问如下的问题:“你们中的任何一个知道他自己的额头上有泥巴吗?”假设每个孩子都足够机敏、聪
慧和诚实,并且他们总是同时回答问题,那么结果会如何呢?
可以“证明”,在开始的“k-1"次提问中,所有的孩子都会回答“不”,而在第k次,头上有泥巴的孩子都会回答“是”。
“证
明”是基于k的推导。当k=1,结论是显然的:唯一的头上有泥巴的小孩看到别人头上都没有泥。由于他,知道至少有一个孩子头上有泥,他便可以归结出他一定
是那个头上有泥的。现在假设k=2。只有两个“泥孩子”a和b。他们第一次都会回答“不”,因为他们看到对方头上的泥。但是,当b说“不“的时候,a会意
识到自己也是个“泥孩子”,否则b第一次的时候应该会知道他自己头上有泥,并且回答“是”。于是a第二次就会回答“是“。而b也会经历类似的推理。现在假
设k=3,于是有三个“泥孩子”a,b和c。a会这样说:假设我头上没有土,那么,根据k=2的情况,b和c在第二次都会回答“是”。而当他们并没有这样
做,他(a)就意识到这个假设是错的,他是个“泥孩子”,于是他会在第三次回答“是”。b和c也一样。
我们可以对一般的情况使用相同的方法进行推论。
[/i]很显然,一台足够聪明的电脑就可以模拟每个小孩在这个推理中的思维方式,并且肯定比他们中任何一个都要做得好。我们在这里看似花简为烦地把一个问题转化为了一系列单纯的推理步骤,并且涉及多个客体(我们暂时称为Agent,接下来我会另外讨论Agent的概念);这样我们可以用一段简单的程序来完成这些推理;但是更重要的是,这段程序在这个问题中的行为模式和人类是截然不同的。实际上程序能完成的仅限于将一个推理过程(或者一个可计算过程)应用到其适用的某一个状态空间中,而人类所完成的是真正的推理演绎。我们接下来将讨论这两者间的详细区别,包括这两者和已知的动物行为学之间的区别。
那么我在这里要说的是关于计算机程序的“行为学”,显然计算机不会和人一样自主思考,所以“行为学”只能打上引号了。我的目的当然不是证明计算机程序如何用六条腿行走(我读初中的时候曾经看过此类研究天牛行为的文章,写得理论有余,精彩不足),我只是希望引发读者对于计算机程序的“行为”模式的思考,然后进一步地,我们可以看到如何通过计算机程序的“行为”来解释它的思维,然后我们能够看到一些使得计算机能够“自主思维”的方法。如果您对于最后一点嗤之以鼻也没关系,计算机智能领域从来都是分歧严重的,所有的意见都仅供参考。
那么我们按照计算机教材的惯例,以一个小故事开始:这个故事是著名的泥巴孩子故事,如果您看过《Reasoning About Knowledge》这本书可以直接略过这段,或者到这里看另外一个故事:(另外一个Blog上不去,回头填一下)。
关于泥孩子的故事,大体上是这样的(摘自《Reasoning About Knowledge》):
假设有n个小孩在一起玩。这些小孩的妈妈告诫过他们如果把自己弄脏了会有很严重的后果。所以,每个孩子都希望能保持清洁,但是每个孩子又都希望看到别人弄
脏自己(小孩就这么阴险……)。现在这帮小鬼中的一些,假设有k个人,在玩的时候把泥巴弄到自己额头上了(以头抢地?)。他们中的每一个都能够看到别人头
上的泥巴,但是却看不到自己头上的泥巴。当然,他们不会说出来。然后他们的父亲来了,他说:“你们中至少有一个人额头上有泥巴。”这一点当然小孩们都已经
知道了(如果k>1)。于是父亲开始一遍又一遍地反复问如下的问题:“你们中的任何一个知道他自己的额头上有泥巴吗?”假设每个孩子都足够机敏、聪
慧和诚实,并且他们总是同时回答问题,那么结果会如何呢?
可以“证明”,在开始的“k-1"次提问中,所有的孩子都会回答“不”,而在第k次,头上有泥巴的孩子都会回答“是”。
“证
明”是基于k的推导。当k=1,结论是显然的:唯一的头上有泥巴的小孩看到别人头上都没有泥。由于他,知道至少有一个孩子头上有泥,他便可以归结出他一定
是那个头上有泥的。现在假设k=2。只有两个“泥孩子”a和b。他们第一次都会回答“不”,因为他们看到对方头上的泥。但是,当b说“不“的时候,a会意
识到自己也是个“泥孩子”,否则b第一次的时候应该会知道他自己头上有泥,并且回答“是”。于是a第二次就会回答“是“。而b也会经历类似的推理。现在假
设k=3,于是有三个“泥孩子”a,b和c。a会这样说:假设我头上没有土,那么,根据k=2的情况,b和c在第二次都会回答“是”。而当他们并没有这样
做,他(a)就意识到这个假设是错的,他是个“泥孩子”,于是他会在第三次回答“是”。b和c也一样。
我们可以对一般的情况使用相同的方法进行推论。
[/i]很显然,一台足够聪明的电脑就可以模拟每个小孩在这个推理中的思维方式,并且肯定比他们中任何一个都要做得好。我们在这里看似花简为烦地把一个问题转化为了一系列单纯的推理步骤,并且涉及多个客体(我们暂时称为Agent,接下来我会另外讨论Agent的概念);这样我们可以用一段简单的程序来完成这些推理;但是更重要的是,这段程序在这个问题中的行为模式和人类是截然不同的。实际上程序能完成的仅限于将一个推理过程(或者一个可计算过程)应用到其适用的某一个状态空间中,而人类所完成的是真正的推理演绎。我们接下来将讨论这两者间的详细区别,包括这两者和已知的动物行为学之间的区别。
相关文章推荐
- 计算机程序的“行为学”(二)——行为的因素和比较
- 微信小程序开发 [00] 写在前面的话,疯狂唠唠
- 为啥你的编译型程序和人家解释型一程序样慢?(一) ——写在前面的话——性能分析点。
- 计算机程序的“行为学”之三——行为的解构及传统方法的缺陷
- c++程序原理设计与实践----(1)写在前面
- 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
- 未在本地计算机上注册“IBMDADB2.1”提供程序
- 写在前面的话
- 写在前面
- 监控一个程序是否在运行和开关计算机
- 写在前面
- “安装程序检测到计算机重新启动操作可能处于挂起状态”的解决方法
- Javascript代码直接调用计算机中的程序
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 重装SQL SERVER,但是出现“以前的程序安装已经在计算机上”
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
- 也来说说关于未在本地计算机上注册“VFPOLEDB.1”的程序的解决方法
- “无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。”
- Windows 7 安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll。