| 查看: 456 | 回复: 2 | |||
| 当前主题已经存档。 | |||
gggwww荣誉版主 (著名写手)
|
[交流]
从计算机的底层结构看思维
|
||
|
从计算机的底层结构看思维 1、问题的产生。以前,见到一些网友说,计算机的本质就是逻辑和计算,因此用它无法模拟人类灵活的思维。我总是感觉不对劲,忍不住对这种观点反驳几句。最近翻出我早期玩计算机的纪录,又有了更多的依据。 实际上,这些依据也是促使我觉得一定能够构造成强人工智能的依据。它帮助我用比较的方法认识了大脑的思维活动。 有一个时期,我对DOS中的调试程序DEBUG着了迷,用它进行了一系列试验,足足与它打交道二年多。现在,与先进的编程语言和调试程序来说,DEBUG低级的无法言状。但是它是可以直接与计算机的底层打交道的。它与计算机的交往甚至比汇编语言还直白。 我这里不是要大家都来重新回到用DEBUG编写程序的时代,只是想通过对底层程序的分析帮助大家认识计算机与人类大脑操作的共同点。 2、第一个底层语言程序实验。在下面的叙述中,我将提到一些计算机底层的词汇,看帖者不知道也没有关系,现在反正大多数人已经用不到它们了。有时,我为了让人们看懂,向大家做一个解释,但是绝没有普及计算机底层知识的意思。您一看一乐就是了。 这次我在我的就记录中找到三个实验资料。在重新翻看它们前,我已经把它们忘了,在重新看到它们时,我才知道,它们已经渗透到我的潜意识之中,成为我产生构建智能系统思想的直觉基础。 第一个实验是这样的:把一个数据从四个寄存器中挪来挪去。整个程序只有四句,只用到一个汇编指令:MOV(移动数据指令)。DEBUG是一个调试程序的程序,可以用它的跟踪指令(T)一条条的运行上述程序。并可以看到数据在各个寄存器间的转移结果,可以看到各个寄存器的变化。 如果不是后来想看看它在DOS下的运行结果,这个实验就不过是个小把戏而已。后来我为这四句程序起了个名称(A.COM)并把它存入磁盘中,并企图在DOS中运行它。结果,这个在DEBUG中运行没有问题的程序(它没有任何循环会造成死机),在DOS中竟然一运行就死机。 为了找出死机的原因,我查阅好多资料,费了好几天的时间。最后的结果竟然是(!!!)程序中缺少一个返回DOS的指令,程序运行后不知道下一步该如何运行。重新编写,在程序后面加一个返主指令(RET),或加一个返回DOS指令(INT 20),就不会死机了。但是不死机是不死机,也看不出程序执行的结果。 这个实验就到这儿结束了,但是它给我很深的印象和影响。 我本来以为,打开计算机,由键盘向它输入文字,由显示器屏幕显示我们输入的文字和程序运行的结果,由磁盘调出文件,向磁盘存入文件,都是计算机天经地义该做的事,而上面那个小小的程序实验告诉我“我错了”。 计算机硬件什么也不会做。我编的程序里没有写由键盘输入的内容,计算机就不知道让我从计算机输入。我在程序中没有编让显示器显示的内容,计算机就不知道在显示器上为我显示些什么。甚至于我没有写让它返回DOS的指令,它就徘徊不前,造成死机。 经过了这个小实验,我才明白了什么是裸机,裸机就是仅有硬件没有程序的计算机,这种裸机如果有程序驱动,可以干很复杂的事情,如果没有程序驱动,它只能一动不动。 而我们现在接触的计算机,都不是裸机,它主板上起码有一个BIOS程序包,可以完成系统启动时的自检,并且预置了许多可供编程者与键盘、显示器、磁盘打交道的基本程序,当我们编程者用程序进行BIOS调用时,就可以使用那些人们预先编好的程序,与计算机打交道了。在高级计算机语言中,需要调用一些库函数,它们与BIOS调用类似,但是这些库函数大多使用BIOS调用为它们的基础。 我们接触的计算机,还有操作系统,它也是别人为我们预先编好了很多程序,使我们不必自己编写程序,就能够用计算机做很多事情。现在计算机上的视窗,就是这样的系统程序。 计算机没有底层程序毫无作为,但是我们也可以通过底层程序改变高层操作系统对我们的限制,使计算机作出从高层程序看来不可能做到的事情。这也就启发我的思路,告诉我摆脱高层程序的限制,一定能够构造出人类的智能系统。 3、第二个向计算机输入字符的实验。我在前面已经说道,计算机底层并不像有些人想象的那样,已经具备有多么强的运算能力和逻辑能力,CPU中的逻辑运算指令和算术运算指令功能很弱。例如一个64位机,它的运算指令就只限于二进制的64位,更高位的运算就要靠编程来实现。乘除法的功能就更差,余数就保存在寄存器中,需要通过编程才能进行处理,经过处理后才能够得到小数。当然,很多人都和高级计算机语言打交道,在高级计算机语言中,人们已经编制了很多程序,使你不必再为这些简单的事情编写程序了。但是这些功劳是计算机底层程序的功劳,而不是计算机底层硬件的功劳。 我在学会用底层程序为计算机解决进入程序工作和返回DOS的工作后。开始学习编制与键盘和显示器打交道的程序。在计算机裸机中预置的BIOS(程序包)中,有一些编制好的与键盘和显示器打交道的程序。你只要按BIOS调用的要求,编制好程序,就可以与键盘和显示器打交道了。 与高级语言不同,用调用BIOS的方法从键盘得到的是键盘输入字符的十六进制码(这个十六进制码还是DEBUG给翻译过来的),而且后面不连接与显示器打交道的程序,这就意味着,你在键盘上的输入在屏幕上不会有任何显示。而且这些键盘输入码只能有一个保留在寄存器中,你如果输入很多字符,寄存器中只保留最后一个,其余的全部丢掉了。因此,还要在键盘接受程序段后面连接两个程序段,一个是通过BIOS调用,把输入字符送到显示器上显示,另一个是把输入字符码由寄存器送到内存中保存。 这样,我们要编写一个像普通计算机一样有键盘边输入字符,屏幕上边显示输入,并且能够把输入字符完整保存起来的完整程序,就需要有三个程序段:接受键盘程序段、屏幕显示程序段、存在保存程序段。 在了解了上述情况后,我编写了一个有几十字节的小程序,它运行以后,我就可以用自己的程序向计算机输入字符,并可以从屏幕上看到它了。好了!我们终于可以像现在计算机一样边由键盘输入字符,边从显示器上看到字符了!并且知道字符码保存在内存的什么地方。 我忽然发现,在完成这些工作时,我们根本没有用到什么计算机的运算功能和逻辑功能。只是在做一种把字符码从键盘存储器、显卡存储器、CPU寄存器和内存之间移来移去。我由此看到计算机工作的本质,也由此联想到大脑思维的本质。 我用的是计算机的底层程序为例子,用DEBUG作为编程工具,编写汇编语言程序。我想通过这个事情向大家说明的是,那些认为计算机一定是按逻辑工作的,有强大计算能力的观点是错误的。计算机的本质,或者说基本工作能力,是把一些代码在存储器、寄存器之间移来移去,并且通过这种对代码的移动实现一些功能。例如把一些代码调到寄存器中,计算机就会按这个代码向键盘接收输入数据(不是数字含义的数据,而是代码含义的数据)。 其实在图灵提出他的自动机理论时,只赋予了自动机能够通过编程实现一些功能的要求。并没有要求自动机一定要能够计算和有逻辑。使自动机(图灵机)具有计算能力和逻辑功能的是程序。 即便是现在的高级计算机,一台裸机也是什么能力都没有的,他的所有能力全是靠软件给它的。我们把这种现象可以叫做裸机脱离软件的无能性。 在计算机依靠软件已经非常方便的现在,我们重提计算机的脱离软件无能性,就是为了让我们在研究人工智能的时候,不要被现有软件的能力迷住了眼睛。开阔思路来构建人工智能。特别是打破那种计算机一定是具有强大计算能力,是按照逻辑运行的观点。 4、第三个实验——计算程序的编写。 其实计算机裸机并不具有强大的计算能力。计算机的计算程序是靠编程获得的。我下面的实验就是编写计算机进行四位数十进制数字加法的实验。人们一定奇怪,那有什么可介绍的?这在现在计算机上是不值得一提的事情。就是自己编写程序,也不过是几个语句就搞定的小货色。然而你不要忘了你用的是高级计算机语言,那里已经为你预备好很多现成的小程序。其中与加法对应的运算,就是人家已经编写好的程序。这使我又想起在我提到我想先用教计算机学会加法运算来检验计算机自编程序能力时,网友们鄙视的情况。这就是因为大多数人没有用底层语言编写运算程序的实践,他们只知道调用别人编好的程序的方便,不知道编写计算程序有多么复杂! 计算机使用的二进制语言,它不懂得十进制数字。DENUG程序为了书写方便,采用了十六进制数字,在转换为计算机指令语言时,DEBUG自动把十六进制数字翻译成二进制数字。至于把十进制数字翻译成十六进制的工作就要由我们编制程序实现了。这是我们要做的一项工作,需要十几个语句以上的子程序。 然而问题还有更麻烦的地方,我们键入计算机的只是数字字符,你即便键入的是二进制数字,计算机也还是认为它是字符。所以我们首先不是做进制转换的工作,而是做翻译字符为数字的工作。这里面首先把一个个字符翻译为数字,然后把各位数字按相互关系进行运算,产生它实际表示的数字。这又需要几十个语句。 人们也许以为,下面就只剩下算了,简单了吧!不然。我当时用的CPU是十六位的,它每次只能处理十进制256以下的计算,而我们要进行的是四位十进制数字计算,需要分两次处理(可以想象编写更多位数字加法会更复杂)。因此要把第一次运算的结果移出,保存,再做第二次运算,再把两次运算结果合成。才能得到结果。又要十几个语句。 这回完了吧?没有。想象力丰富的人马上会根据前面的叙述想到,运算只得到的是数字,显示给人们在屏幕上看的是字符,于是又要编写与输入相反的程序,把二进制数字翻译成十进制数字字符。又是十几个语句的程序。 按上面的流程,我是完成了四位数加法的运行程序编制,那已经是一个又大几十个语句的“简单程序”了。不过由于基层程序占用存储少,这样的程序仅用不到1K字节。 我再次指出,我们这里介绍计算机的底层计算程序,不是为了向大家普及计算机底层程序知识,而是想向大家证明计算机裸机和底层并不具有强大的运算能力和逻辑能力。在我们上面的实验中,我们可以看出,CPU的加法运算指令只能处理265以内的加法,大于这个数就要依靠编程来进行运算。现在的计算机CPU处理数据的位数已经远远超过十六位,因此CPU直接运算的数字也大一些,但是还是要受计算机处理数据位数的限制。还得要依靠编程来处理更大的数字。一个加法尚且如此,乘法和除法就更不用说了。 那么我们证明计算机本身不依靠程序操作的无能目的是什么?就是要我们摆脱对计算机运算能力的错误认识。以使我们对智能的模拟有一个开阔的思路。 5、计算机还有不依赖CPU中运算指令的计算方法。 由于人脑头脑中形成一个计算机本身一定有强大的计算能力的错觉,因此人们很少考虑计算机是否能够有其他方法进行数字运算。同时人们也由此产生对计算机的始祖——图灵机的误解。在图灵的自动机理论中并没有为图灵机定义任何计算功能,很多人是利用反推法得出错误的结论的。他们的推理方法是:计算机是以图灵机为基础的,计算机的功能是计算,图灵机的功能也一定是计算。然而事实却不是这样。下面我从一个电子文件上摘录一段关于图灵机的材料,它算不上原文级别的,但是可以算是教材级别的. 定义二:图灵机 —— 图灵机是英国数学家阿兰·图林(Alan Turing)于1936年提出的理论模型,它被视为无限状态计算机的原型。 图灵机被假定连接到一条无限长的纸带上,此处,“无限长”被认为“无限制的长”,或潜在的无限长,而不一定意味着真实的无限长。 图灵机的纸带被等量划分为“方格”的基本单元。图灵机能够在每一单位时间里扫描纸带一次,这个操作做且仅做下面五件事之一: ①写入一个符号到一方格; ②读出一个它写上纸带的方格上的符号; ③它能记忆它所读出的纸带上的符号; ④它能擦去它所写在纸带上的符号; ⑤它能向前和向后移动纸带一个方格的长度。 (注:上面⑤个操作之一被考虑在一个离散时间单位里完成的) 因为纸带被假定有无限长,故图灵机的能力大于任何一个有限计算机。图灵机能做的事之一就是模拟任何一个有限状态计算机。这是因为,任意一个有限状态计算机的程序都能够被编成有限数量的代码,这些代码可被写在纸带上,图灵机使用它们进行计算,就如它所模拟的有限状态计算机那样执行此程序以响应外界环境对它的刺激。于是,这个“计算机”就以一串“数字”的形式存在于图灵机里,因而被称为“虚拟计算机”。这个虚拟计算机是实世界计算机的最完全的模拟。此种完全的模拟称为“仿效”emulation。除了模拟简单计算机以外,大部分实际计算机模拟其它计算机都不是仿效,这是由于受到容量与速度的限制。可是,所有的实际计算机都能被图灵机仿效。 从上面一段关于图灵机的文字看,图灵机本身也没有定义运算功能,它的运算功能也是由程序确定的。从这一点看,认为图灵机是为运算设置的观点是错误的。正因为图灵机不是为运算设置的,所以图灵本人才坚持认为人工智能是可以实现的,并为此提出图灵检验。 而现在实际应用的计算机在其CPU的指令中增加了一些计算功能,但是这些功能都是可以被图灵机仿效的。因此现在的计算机是功能不高于图灵机的计算机。 那么在计算机上能否甩开它固有的计算指令,用其它方法编写计算程序呢?答案是肯定的。我们寻找一种甩开计算机CPU的计算指令进行计算的方法,可以为我们研究用计算机模拟人类智能打开更广阔的思路。 6、如何不用计算机CPU的计算指令编写计算程序? 这里,我们提出一个不用计算机的运算指令编写的计算程序,也是为了证明计算机要进行计算,不一定需要其硬件具有运算能力。 先看计算机如何进行加法运算。整个程序分几个部分,第一部分,两个十以内加数加法,它需要我们在程序中建立一个十以内加法的加数于和的对应数据库。这是一个很小的数据库,十以内的加法可以通过检索这个数据库实现。它与人脑通过背诵掌握十以内加法完全一致。第二部分,十以内加数加法的再加一。这是为了给多位数加法做准备,由于两个十以内加法的和最大是18,再加1也不会有进位,因此只要在个位进行运算就可以了,而个位数运算中的再加一,就可以调用第一部分的程序实现。第三部分,多位数加法。它分成个位数加法,进位(如果有的话),移位进行高一位加法,高一位加法由两个十以内加数加法和再加一(如果有进位)实现,可以调用第一、二两部分程序实现。这样一步步移位做加法一直到最高位。就可以完成任意位数的两个加数的加法。重复调用任意位数两个加数的加法,就可以实现任意个数加数的加法。从第二部分到第四部分,实际是对加法算草运算的模拟。 以上还只是编制了整数加法。但是我们已经可以看出,在程序中我们没有用到任何计算机运算指令,只凭一个十以内加数于和对应数据库就实现任意个数、任意位数整数的加法。这表明没有计算机运算指令,我们一样可以通过程序进行数字运算。如果继续编写小数和分数加法,还需要编写更复杂的程序,但使用计算机运算指令进行小数运算也需要编写复杂的程序。而且用计算机运算指令目前不能进行分数运算(其实只要为之编写程序,也能算分数),模拟通分可以直接编写不用计算机运算指令的分数加法运算程序。 我们这种程序是否比利用计算机运算指令复杂呢?与我们前面介绍的用十进制数字进行整数加法运算的底层程序相比,我们的程序只稍微复杂一些,并不是复杂很多。从运行速度看,对于大数字,由于用计算机运算指令需要反复进行位数处理,我们这个程序只是按位数渐次进行计算,两个程序不会向差多少。对于小数字,还是用计算机运算指令快一些。 依照同样的方式(即模拟人的算草运算),我们也可以编写不用计算机运算指令的减法和乘、除法,乘方和开方,由于计算机的乘法指令是把乘法变成加法来算,把除法变成减法来算,因此其乘、除法运算的速度与我们用查乘法表和模拟算草运算也相差不多。但是我们这里甩掉了计算机的运算指令。 上面对加、减、乘、除运算的讨论,也表明计算机的运算指令并不是必需的,也不是最快的。 我们进行这样的介绍,并不是号召人们抛弃现在的数字运算程序,都来使用不用计算机运算指令的数字运算程序。我们只是要向人们表明,计算机的硬件中运算指令不是必需的,计算机的运算能力也不是天生的。这样就可以开阔人们思考强人工智能的思路。 7、对计算机底层计算能力的总结。 对于计算机的计算功能,我们做了如下几项分析: 第一、我们回顾了用计算机底层指令语言如何编写计算程序,它表明了计算机本身没有很强大的计算功能,强大的计算功能是通过各种程序实现的。计算机的计算功能如此,它的逻辑功能更是如此,它有“与”“或”“非”“异或”等一些逻辑指令,但是仅能对二进制码进行操作,在程序中往往用来对数码的某些位进行比较和检索,而不是用来思维的。因此计算机强大的逻辑功能也是靠编程实现的。 这样我们从计算机底层语言的角度否认了计算机本身具有强大的计算能力的说法。 一般搞计算机的人都是与计算机高级语言打交道,在高级语言中,人们用程序编写了一些运算程序,尽管从应用上看还不够复杂,还需要人们利用这些程序作为可调用函数组成更复杂的程序。但是它使人们看不到计算机底层语言计算能力的不强大。至于不用深入软件的用户来说,他们更多是在使用各种现成的程序,因此在他们眼中计算机的强大运算能力(这里的运算能力已经可以包含数据处理),更是软件所为。 第二、我们又回顾了图灵对自动机的定义,即图灵机,计算机的老祖宗。在图灵的定义中我们也看不到图灵赋予自动机以计算能力,因此我们可以搞清一个许多人都那样认为的错误:图灵机是建立在计算基础上的数学模型。这种错误认识应该换成这样的认识:图灵并没有把它的自动机建立在计算基础上,而是把图灵机建立在编程的基础上,用编程来实现计算功能。在计算机发展上,有人曾经具体作过对图灵机编程实现计算的工作,可能是由于方法太古老了,我没有见到有关资料。引用它可能更能够有利于纠正人们的错误认识。 现在人们接触的计算机书籍,越来越现代,对于原始态的计算机理论讲述得越来越少。因此很多人处于知道图灵机是现代计算机的老祖宗,但是不知道它的内容,凭想象认为它一定有强大的运算能力。于是错误便产生并流传开了! 第三、我们又设计了一个不用计算机底层运算指令的加法计算程序,这个程序表明,没有计算机底层的计算指令,仅仅机依靠编程,计算机也可以具有各种计算能力。可能有些人会认为,我们编写的程序会比用计算机运算指令编写的程序运行速度慢。实际上未必。由于计算机底层运算指令在计算中依赖的是全加器和逻辑指令(它们都由电子线路实现的),减、乘、除、都要转化为加法进行,采用的是一种远比算草运算笨的方法计算,只是因为计算运行速度快,才掩盖了这种笨方法的缺点。把算草运算进行编程,是采用人类比较聪明的计算方法,从过程中比一一相加简便很多,运算速度反而会更快。 由于计算机已经有了运算指令和相关的程序,又由于计算数字已经不是计算机的主要任务,所以人们不再从不用计算指令会如何的方向考虑问题。我们这里也不是要人们都来研究这类落伍的问题,只是通过这种程序的设计,证明没有底层计算指令,计算机也可以产生很好的计算功能。 以上三点主要是打破人们对计算机计算能力的崇拜。而这种崇拜如果仅仅是崇拜,我们打破它并没有多大意义。可是有些人偏偏因为计算机的计算能力否定计算机可以模拟智能,另一些人又想依赖计算机的计算能力模拟智能,他们的崇拜转化为对智能模拟思路的强烈干扰,不打破它就很难前进。我在网上遇到很多对计算机模拟人类智能的质疑,大多问题产生于上述两个方面。 第四、计算机的硬件功能于计算机的软件功能的区别。 在讨论中我们还看到一些人把计算机的硬件功能与计算机的软件功能混为一谈。 计算机的硬件功能是为计算机的软件提供工作可能的。它的中心目的是提高计算机运行的速度。图灵机是一个既没有电子结构有没有计算功能的自动机,图灵本人之对它进行了理论证明工作,没有具体把它变成实体。后来有人用纸带实现了图灵机的编程计算,那当然是慢不可言的。既然图灵机没有电子结构也可以实现编程运算,那就是说:电子结构不是计算机工作的决定因素,它的出现的主要任务就是加快运行速度。因此从原来的电子管电子计算机,到现在大规模集成电路的超大型计算机,硬件的主要目的就全是加快速度。 有人可能会说,不对,硬件还在不断提高功能,例如增加了许多新指令。其实图灵机能够用没有电子设备的纸带机进行编程计算,就表明从基本原理上讲,任何其他指令都是多余的,图灵机只需要读、写、抹、移动等几种操作就可以了。增加指令的目的也是为了加快运行速度,不是缺了这些指令计算机就不能起作用了。而且老一代计算机没有这些指令也能正常工作的事实也表明增加指令仅仅是为了提高运行速度。 在明确计算机的电子化以及将来还有可能光字化、量子化,都仅仅是为了提高计算机的速度以后,我们就会看到,如果计算机的依靠编程来工作的基本形式不改变,那么硬件无论多么高级,硬件一旦离开软件,也会变得毫无所能。也就是说没有软件,硬件的任何功能都不会自动反映到计算机的性能中去。因此把计算机硬件的功能作为计算机的性能的看法是错误的看法。 这种说法可能很难为电子计算机的爱好者们所接受,因为在他们的头脑中已经根深蒂固的认为,电子计算机是因为有电子,所以才能计算或干些其它工作。说那不是计算机的必要条件,实在想不通,然而这是千真万确的。 [ Last edited by 幻影无痕 on 2006-10-16 at 10:00 ] |
» 猜你喜欢
存款400万可以在学校里躺平吗
已经有15人回复
拟解决的关键科学问题还要不要写
已经有6人回复
Materials Today Chemistry审稿周期
已经有6人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
推荐一本书
已经有13人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
» 本主题相关商家推荐: (我也要在这里推广)
gggwww
荣誉版主 (著名写手)
- 应助: 1 (幼儿园)
- 贵宾: 3.65
- 金币: 4183.1
- 散金: 9
- 帖子: 1173
- 在线: 77.5小时
- 虫号: 23846
- 注册: 2003-09-26
- 专业: 固体力学
|
8、底层傻计算机的学习。 由于一个底层语言程序功能特别低下,你不编写任何程序它就不能进行任何操作。因此它就是一个很傻狠傻的计算机,这种状态的计算机虽然能做的事情不多,但是可以使我们方便的观察计算机有傻到聪明的变化状态。 我们先为它编写了一个很小的程序,它可以在中文系统的支持下接受中文字符的输入并且能够按数据库的存储数据输出中文字符。数据库分成问题栏和答案栏。程序结构是这样,运行后把数据库调入内存,并等待输入。接受输入字符后,先检索问题栏,如果有,便调出相应的答案作为输出字符输出。如果没有便显示“对不起,我不知道!”并接受后面的输入,把它保存在相应的答案栏。这个小程序的初始状态是一个空数据库,因此刚开始运行时它什么都不知道。每次运行结束后,它要先把扩大的数据库保存到磁盘,再返回操作系统。这样每次运行后数据库里便边积累了新的知识。整个程序只有几K字节。 第一次运行时,它什么也不知道。例如你输入:1+1=?,它就显示:对不起,我不知道!你再输入:2。再次输入:1+1=?时,它就会显示:2。你也可以问:你是谁?在它显示:对不起,我不知道!后,你再输入;计算机。它也可以回答出它是计算机。这个程序由于结构简单,也会作出可笑的回答。例如你问,计算机是谁?它回答:对不起,我不知道!你再输入:你。你再次问:计算机是谁?它的回答是:你。显然由于我们没有编写相应的程序,它不会完成人称的转换。 但是这并不是问题。因为我们只要继续完善程序,就可以使它具有转换人称的能力,甚至可以使它具有在问“你是谁?”时,能够完整地回答:“我是计算机。”(需要具有用替代法组成语句的能力)。这一切全靠你把简单的程序变得复杂一些,使它的能力完善一些。 显然,我们这里的傻计算机学习还只是一种对于知识的学习,而且它的学习能力完全是靠人编程序实现的。 就是完成这些程序的编写实验后,我开始看到模拟人类智能的新途径。 9、一些脱离计算机传统思想的产生。 在本文的开始我就说明了,这只是大约十年前我的一些实验的总结。现在看上去,都是些陈糠旧谷子。不能用它们编写强人工智能程序。但是现在把它们介绍给人们看,是想用这些比较容易懂的例子,帮助人们突破对计算机的认识上的误区。为人工智能软件上的突破铺平道路。 而且,人们常说实践出真知,正是因为大约十年前我在底层程序上作了大量程序实验,因此我才对人们常说的,“计算机是具有强大计算能力的”“计算机是以来强大的楼记基础的”“计算机一定要有数学模型”等等产生怀疑,我才去重新翻阅图灵对自动机、对算法、对图灵检测的原始论述,并且从基础理论上坚定了我的看法。坚定了我推翻计算机传统软件模式,提出一个模拟智能的新思路的想法。 这种想法可归纳为几点: A、智能程序不需要依赖计算机的计算能力。 B、智能程序不需要依赖什么计算机的逻辑功能。 C、智能程序的算法概念应该应该还原为图灵定义的算法,即用有限步骤完成指定的任务。而不是一定要由数学公式和证明来确定的算法。 D、智能程序不应该被数学模型所局限。可以为智能程序提出模型,也可以叫它们为数学模型,但是这种模型应该是与现有数学没有对应关系的。因为现有数学还没有一个理论能够描写智能。与其勉强使用,不如重起炉灶。 E、由于裸机很傻,智能系统的初始状态也就可以很傻。(至于它需要不需要由很傻作为初始条件,应该有智能理论确定)。 这样一些突破传统的思想,后来与智能理论相结合,使我坚定不移地确定了强人工智能的基本方向。 10、思维是什么? 有人说,思维是联想,只要有了联想功能,那么思维就好办了。可是计算机的联想程序编出那么多年了,思维还是那么糟糕! 有人说,思维是对信息的处理。这话说得倒是不假,可是说法也太泛了,泛的使人无从下手考虑。 有人说,思维太复杂了,复杂得一句、两句话说不清楚!这也是句实话,可也是一句废话,我们能够用说不清楚来模拟思维吗? 在有了编写计算机底层程序的经历后,我忽然产生了一种想法:思维是什么,思维不就是在大脑中把信息移来移去么? 思维那么复杂,你怎么能够说它“不过是”把信息在大脑里移来移去呢?然而,难道不是吗? 我们看看推理,比如说三段式推理(当然推理不仅是三段式一种形式),不就是把表示大前提的信息移到(移来)相应的位置(当然是大脑中的我们看不见的位置),把表示小前提的信息移(移来)到另一个相应的位置,然后经过一些信息整理(移去),得出结论的吗? 再看看分类,不就是按某些规则,把一些信息从原来位置跳出来(移来),再把它们保存在同类信息之中(移去)吗? 再看分析,不就是把一大块信息群调出来(移来),然后把它进行分割,然后在一一保存起来(移去)。而综合呢?不就是把一些分散的信息集中起来,结果整理得出较少的一些信息吗? 因此我们可以确信,思维不过是把信息在大脑中移来移去的这样一种操作。移动的原则不同,就形成不同种类的思维操作。 那么,这种说法不泛吗?应该说也泛,但是它有一个好处,就是与计算机的基本操作方式,也就是把信息在存储(如果把CPU中的寄存器也看作是一些存储的话)移来移去对应了起来。因此就表明用计算机绝对可以模拟各种思维。 11、“移来移去”也是图灵机的基本功能。 下面我们再来看看图灵的自动机会不会干这种移来移去的事情。我们再一次引出图灵机的叙述: 图灵机的纸带被等量划分为“方格”的基本单元。图灵机能够在每一单位时间里扫描纸带一次,这个操作做且仅做下面五件事之一: ①写入一个符号到一方格; ②读出一个它写上纸带的方格上的符号; ③它能记忆它所读出的纸带上的符号; ④它能擦去它所写在纸带上的符号; ⑤它能向前和向后移动纸带一个方格的长度。 (注:上面⑤个操作之一被考虑在一个离散时间单位里完成的) 图灵定义的自动机部正也是把信息(符号)移来移去的吗?因此我们从图灵的原始定义中不仅看不到图灵机强大的计算能力,而且正好看到它的把信息移来移去的特征。我认为,图灵正是看到图灵机与思维这种“把信息移来移去”的本质相同点,才坚信人工智能可以成功的。也因此才满怀信心地提出图灵检验的。 12、如何用计算机的“移来移去”模型模拟思维?(一) 乍一看,用移来移去的方式模拟思维几乎是一种笑谈,但是我们仔细想一想,它与我们在一张纸上清理我们的思路没有多少区别。当我们考虑一个问题考虑不清的时候,往往拿出一张纸来,用简单的语句(或符号)表示我们思考的内容,用一些排列方式或连线表示思考的顺序。 有些人会说,那能够叫思维吗?那不过是一些思维的清单。不过我们看看图灵的自动机定义,那也不叫计算,只是一个简单的读写机构。但是图灵可以在这种自动机的结构上证明它与任何一种结构的自动机等价,现在最高级的电子计算机的性能也不会超越图灵机。由于我们不能把所有的(逻辑除外)思维方式用数学模型表达,因此我们还不能证明这种移来移去的方式可以模拟所有思维,但是我们可以据图灵自动机的证明,做一种猜想:这种把信息移来移去的方式与所有的思维方式等价。 现在让我们重新比较一下模拟计算的思路和模拟思维的思路。 模拟计算并不是首先提出一个计算的模型,而是首先提出一个比模拟计算强的自动机(即图灵机),然后在探讨由自动机编程模拟计算的可能。 模拟思维也就不应该首先提出一个思维的模型,,而是首先提出一个比思维强的“移来移去”模型,然后探讨有“移来移去”模型变成模拟思维的可能。 我们由底层分析计算机,甚至追朔到图灵机,就是为了表明这一点:仅仅考虑具体形式的思维,结果是只能得到那种形式的狭义的思维,不能模拟人类的灵活多变的广义的思维。 当然,我们这个思路的缺陷在于,我们还不能像图灵证明自动机那样证明“移来移去”模型对思维的完备性。因此我们还无法确认“移来移去”模型是模拟思维的最好模型。但是作为一个思路,我以为它会为我们打开模拟思维接近人类的僵局。 13、如何用计算机“移来移去”模型模拟思维?(二) 我们也可以从思维的具体情况看这种“移来移去”是否真实。 例如思维中的分类,就是把需要分类的事物调出来(移来),把应该分成一类的事物放到它们相应的类别中去(移去),这样一直到把调出的事物移动完毕。 再比如分析。就是把一个需要分析的东西调出来(移来),太复杂的东西还要借助于文字,然后分出一个个小部分,加以抽象,把抽象得到的东西整理好(移去),就完成了分析。 再看推理。以演绎推理为例,不过是按推理的规则把相应的依据(大前提、小前提等)从资料中找出来(移来),再按规则得出结论。把合乎逻辑的推理过程保存起来或表述出来(移去)。 好了,不多举了,以此方法大家也可以想象得出其它思维操作是怎样把资料在大脑中移来移去的了。 14、最后总结。 此篇文章并没有全面的讨论如何完整地实现类似人类的智能的模拟。完整的模拟我们将在模拟智能的基本思路中介绍。 本文的重点在于解决人们对计算的一些误解,例如计算机的基础是强大的逻辑性,计算机的基础事情大的计算能力,等等。 持有上述看法的人对模拟人类智能又有两种态度。一种人是坚决反对。他们的观点五花八门,从不同方向反对模拟人类智能。例如有些人认为,计算机必须遵守逻辑规则,这些逻辑规则又会限制计算机的能力,因此计算机是无法模拟人类智能的。另外一些人认为,人脑是不识数的,因此用具有强大计算能力的计算机模拟人类智能是走错了路。还有人认为,计算机的强大逻辑功能是死板的,因此它永远不能模拟灵活的人类智能等等。 显然上述种种反对意见,都是建立在认为计算机是具有强大计算和逻辑能力的机器的基础上的,而我们从计算机的底层看到,计算机硬件并不具有强大的计算和逻辑能力,上述反对意见也就无法成立了。 还有一些人并不反对计算机模拟人类智能,只是悲观的认为,具有强大计算能力和逻辑能力的计算机不适合模拟人类智能,因为它们在原理上与大脑相差太多。我们从底层,从图灵机讨论计算机裸机并不具有强大的计算能力和逻辑能力,就可以帮人们从悲观中解脱出来。而且我们从图灵机地把信息“移来移去”功能分析到大脑思维的把信息“移来移去”操作,也表明大脑和计算机在思维原理上是一致的。从而为计算机模拟人类智能扫清思想障碍。 |
2楼2005-06-08 12:02:53
1
|
3楼2005-06-08 20:32:47











回复此楼