• 精选
  • 会员

27 让电梯实现自动控制,机器取代人类的逻辑

2021年9月26日  来源:直觉泵和其他思考工具 作者:[美] 丹尼尔·丹尼特 提供人:zhaotou97......

在离开这段有关计算机的插曲之前,我还想再多介绍另外几个有用的概念——源代码、注释和目标代码,它们对于我们探索“大脑怎样产生意义”这个问题有很重要的作用。一般来说,比起直接去解决一个智力难题,先研究透彻一个简单纯粹的相关实例、抓住概念的一些实质对我们来说可能会更有帮助。在人工智能领域,这种简单实例叫作“玩具问题”。先解决掉玩具问题,顺势再让我们去处理现实中那些恼人的大问题吧!下面所讲的是一个有关升降机操作员如何被计算机芯片取代的故事,我是为了简单纯粹才编造了这个故事,但这一点儿也不影响它的现实性。

在我年轻的时候,那时候升降电梯里还需要有操作员,他们每天的工作就是跟随电梯上上下下,在需要的楼层停下机器,让乘客们出入。在那个年代里,他们操作的是一根很奇怪的手柄,手柄以顺时针或者逆时针方向转动,这样就能使电梯上升或者下降。能让电梯准确地停靠在某一楼层是需要技术的,那时的电梯总是停得要比楼层地面高出或者下陷三五厘米,所以在乘客们出入时,操作员不得不提醒大家要多注意脚下。先到哪一层,到了要说些什么,还有怎样开电梯的门等等,这些都是有规矩的,操作员们要接受训练,记住这些规矩,不断地练习操作,直到把这些规矩都彻底变成了他们的第二天性。规矩本身是发明者们在设计过程中经过多年的苦思冥想才制定出来的,期间还会进行大量的微调和改进。我的设定是这样的:这种电梯的设计已经基本固定,设计师们留下了一本详细的操作手册。无论什么人,只要按照手册正确操作就一定能成为优秀的电梯操作员。

现在,让我们来想象一下,要是操作员所有的工作都能由一个简单的计算机程序来完成,情况又会是怎样?事实上,随着各种自动机械的发明不断出现,纯技术性工作已经开始与人工操作发生分离,我们想象的这种情况也早已逐步实现,但现在我们的设定是,电梯从人工操作到彻底地实现计算机系统控制是一步到位的。

我们猜想,电梯制造商们会召集一批软件设计师,也就是程序员,把操作员一直使用的操作手册交给他们:“这里有我们想要的产品规格。请根据书中的操作规则设计一个电脑程序,我们要求它能实现最棒的人工操作员所有的操作。”程序员们开始仔细对照这本操作手册,并列出了一个包括所有操作的清单,以及在哪些情况下操作必须执行或者禁止执行。在这个过程中,程序员可以避免手册中出现的那些不规范的情况。举个例子,如果给电梯安装上传感器,那么它以后就会在需要的层面准确地停下来,再也不需要操作员们像以前那样要根据不同的情况说“请向上迈步”或“请向下迈步”,升降机每次只需要简单地播放一句录音“第××层到了,请注意脚下”即可。那么接下来,需要程序员们去做的是要用一种名为伪代码的语言写出这个程序的草稿。伪代码是介于人类日常语言和更严格、更系统的源代码语言之间的一种混合语言,一串伪代码写出来大概是这个样子:“如果呼叫楼层>所在楼层,那么上升,直到呼叫楼层=所在楼层即停止;开门。等待……”

如果伪代码条理清晰,能够达到想要的操作效果,那么就可以把它转译成源代码了。源代码是一种更加规范严密、更加结构化的操作体系,而且,它还包含了各种术语的定义,例如变量、子程序等等。人类其实可以轻松地破译源代码,毕竟源代码也是我们写成的。一旦找到突破口,你就会发现,电梯操作手册中的那些规定和术语在源代码里表达得清清楚楚。而且,源代码下面的这两个特点还会让这个过程变得更加简单:一、变量和运算的名称直接显示它们自身的作用,例如呼叫楼层(callfloor),总重量(weightsum),报楼层(tellfloor),等等;二、就像我们在第24章中已经说过的,程序员们可以为源代码添加注释,这些附加说明能让其他人明白他们写这些代码的目的,弄清楚代码各个部分的功能。你在编写一个程序的时候也应该添加一些注释,防止自己忘记当时设计这串代码时的用意,在重新对程序进行纠错时,这些注释也会相当有用。

源代码必须严格按照语法编写,所有的构成元素和标点符号都要写在正确的位置。只有源代码书写格式完全正确,编译器才能读录,然后将它们以目标代码的形式转化成基础的操作序列,供实体机或是虚拟机执行。我们不能要求编译器从源代码中揣测程序员的意图,源代码必须让编译器准确知道该执行什么操作。不过,编译程序有能力利用多种途径去执行操作,它还会根据具体情况选择最有效的一种。编译器也有好有坏,如果将同一个程序的源代码输入到两个不同的编译器中,它们得出的目标代码程序很可能就会以不同的速度在计算机上运行。

举个例子:你编写了一个下棋的程序,然后将它的源代码输入到两台不同的编译器中,得出了两个版本的操作程序。将这两个程序输入同一台电脑让它们对抗。你会发现,尽管这两个程序“按照同样的顺序做着同样的思考”(当然会这样,因为它们源自相同的源代码),但也会分出胜负,因为两者的速度不一样,快的一方使用的基础计算周期较少,在有效的时间内它能预想得更多、更周全。

回到我们的电梯上来。编译器编译出目标代码以后,就生成了一个可执行文件,文件名中通常有扩展名“.exe”。这个文件就可以在虚拟计算机上运行了。也许还需要几经调试,比如回到源代码进行微调,甚至重写,它才能最终成为“完成”版的程序。我们将这套目标代码“烧”到一块小芯片的只读存储器上,而这块小芯片上通常带有一个通用计算机及其之上的很多层虚拟机,然后,我们将这块芯片安装到电梯上。安装时芯片的输入端要与传感器连接,传感器能接受到按钮发送的信息和电梯测量到的乘客们的总重量等;芯片的输出端连接的是效果器,它可以指挥电机转动来开门闭门、升高或者降低箱体,更新显示器,播放录音等等。

再见了!机器已经彻底把真实的人类取代了,而不只是取代了一个我们塑造出来的小人儿,它们就跟人类操作员一模一样,遵守着同样的规则。真的是这样吗?果真如此?好吧,但事实并不如此。它们只是近似于遵守着同样的规则罢了。这是一种很经典的中间状况,它既不像人类那样,能够逐字逐句地把规则保存在大脑中,然后随时查阅那些规则从而指导自己行动;也不同于那些行星,总是能不紧不慢地“按照”设定好的轨道运行。我们人类也常常处于这种中间状况。有时,通过不断训练一些显性规则就会内化或者变成一种惯例,我们甚至都忘记了它们,不自觉地就把它们丢弃了。比如,一般来说英语单词中字母“i”都会位于字母“e”前,除了这两种情况:一种是,前面的字母为“c”;另一种是,在“neighbor”和“weigh”中,发音近似于“a”时。一些还处于调试阶段的规则也似乎是可以遵守的:例如英语的语法规则,它对语言学家们来说一直是一个挑战。时至今日,他们费尽周折也没能写出一本标准的规则手册让我们把英语说得更好,而事实上,几乎每个十岁大的母语是英语的孩子都能调试建立起一些相当不错的目标代码,供他们脑中的英语虚拟机使用。(43)

在结束这一章之前,我还想提醒大家一点:植入到源代码中的那些注释可以帮助程序员们去理解软件中相互啮合的各个部分的意图,但是,在我们为了方便描绘人类大脑所创作出的那些硬件、固件和软件中,它们却并不出现。自然选择在我们的大脑中安装的那些功能结构就像是一些没有注释的代码,这些功能是有目的的,但由于代码并没有对结构的目的有所注释,大脑也就无从理解这些意图了。(在第40章中,我们会有更详细的讨论。)在发育和学习的过程中也存在着未加注释的调整或者是未说明意图的调整。就像是语言学家们那样,我们还在奋力实施着逆向工程来破译所有那些“规则”和“程序”,虽然它会比用逆向工程目标代码来复原源代码更有难度,但理论上的确可行。

如涉及版权,请著作权人与本网站联系,删除或支付费用事宜。

0000