3、为原文添加了大量的评论,东方和尚的评论和张江老师的评论都会标注出来,另外,因为这本书是冯·诺依曼的助手 Arthur W. Burks(遗传算法之父 John Holland 的博士生导师),所以在框中的文字是编者加的注解。大家要注意分辨。
自动机的构建
Arthur W. Burks:冯·诺伊曼只是简单地提了一下他打算使用的原件的种类。这些零件McCulloch-Pitts 的神经模型很像。有些零件是“除了在两端之间建立刚性的几何连接以外没有任何功能的”;另一种零件被称为“运动组件”,起到“类似肌肉的作用”,这种零件在受到刺激时长度会收缩为零;还有一种零件遇到脉冲就“建立或者断开一个连接”;他说至多只需要十几种这样的零件就足够了。由这些零件所组成的自动机能够自动地捕捉偶然撞上来的零件:“我们可以发明一种装置”使它能够识别出捉住的零件类型。 在 1948 年 6 月,可能是为了准备 9 月份的希克森会议,冯·诺伊曼在普林斯顿的高等研究院(IAS)给他的一些朋友讲了三堂有关自动机的课。据我所知,这几堂课包括了冯·诺伊曼对于自复制自动机的最详细的分析。因此,编者做了一番努力,尽量从听课的笔记和与会者的记忆中拼凑出关于零件以及它们的功能的细节,兹叙述如下:冯·诺伊曼描述了八种不同的零件,并用直线来代表它们,且标出了位于中间或者两头的输入和输出端子。自动机在离散的时间下运行,每个零件都要用一个单位的时间做出反应。我们不知道由八种零件构成的这个列表是否完成了冯·诺伊曼的意图,但编者猜想,就此问题,他还没有最后得出结论。 有四种零件是用于处理逻辑和信息的:应激零件(Stimulus organ)是用于接收和发出刺激信号的,并且接收这些信号是相分离的,也就是该零件的真值函数相当于“p 或 q”。合并零件(Coincidence organ)则实现“p 与 q”这个布尔函数。抑制零件(inhibitory organ)则实现“p 与 非 q”布尔函数。激发信号产生器(stimuli producer)则起到刺激信号源的功能。第五种零件是刚体零件(rigid member),这是一种刚性的组件,被用来当作自动机实体的结构骨架。刚体零件不接收任何刺激,它对于信号是绝缘的。刚体零件可以同其它的刚体零件组合起来,也可以用来架设其他的零件。另有一种连接零件(fusing organ),当它受到刺激的时候会把两个零件“焊接”在一起。编者认为连接零件的工作方式如下,假设一个结构上的 A 点将要和另一个结构上的 B 点焊接在一起,这时候连接零件上面活动的输出端子就会同时与 A 和 B 接触,在 t 时刻向连接零件发送一个刺激信号,于是导致 t+1 时刻 A 和 B 两点就会被焊接在一起。然后连接零件就可以离开现场。此外还有切割零件(cutting organ),受到刺激的时候,切割零件就会把连接切开。 第八种零件称为肌肉零件(muscle),可以用来产生运动。肌肉零件一般是刚性的,可以连接到其它的零件之上。如果在 t 时刻肌肉零件受到刺激,在 t+1 时刻它就会收缩到零长度,并保持之上的所有连接。只要刺激信号不消失,肌肉零件就一直保持收缩。编者认为肌肉零件这样工作:比如肌肉零件 1 把一个结构上的 A 点和另一个结构上的 B 点连在一块,肌肉零件 2 又把 A 点和一个连接零件的输出端子 C 连在一起。然后一旦肌肉 1 和 2 都受激发,它们就会收缩,从而把 A、B、C 三点凑在一起,这时候激发连接零件,A 和 B 点就会被焊接起来。最后,当肌肉上的刺激消失之后,它们就会恢复到原有的长度,肌肉1上至少有一个端子也会同 A、B 点分开。至于一开始肌肉和其他零件的连接是怎样实现的,后来又是怎样断开的问题,冯·诺伊曼似乎没有提到。
漂浮着机器零件的池塘(译者加)丨摘自 Gene Pool 人工生命软件
按照冯·诺伊曼的设想,自动机按照以下的方式制造其它的自动机:在一个平面上漂着母自动机,周围是无穷无尽的零件海。母自动机在存储器中包含有将要制造的子自动机的描述。并按照描述,捡起所需的零件装到正确的位置上去。要做到这点,母自动机必得包含一个能够抓住并且辨认零件的装置。在 1948 年 6 月的课上,冯·诺伊曼对这个问题只是稍微提了几句话:两个激发零件从母自动机上像触角一样伸出来,当它们碰到其它零件的时候,就可以通过激发一个信号去测试所遇零件的性质,如激发零件能够传送信号,而结构零件就不能;肌肉零件受到刺激则会收缩等等。 冯·诺伊曼在他首次的设计尝试中,忽略了能源和能量的问题。他打算之后再考虑这个问题,比如把电池作为一种新的基本零件引入进来。除此以外,冯·诺伊曼的这个早期自复制模型处理了以下的几何动力学问题:包括运动、接触、定位、连接、切断;但是没有考虑真正机械和化学意义上的能量和力的问题。因此把这个模型叫做自复制的动力学模型(kinetic model);本书的第二部分介绍的是冯·诺伊曼之后提出的自复制元胞模型(cellular model),读者可以对比此两者。 在 1948 年 6 月的课上,冯·诺伊曼提出了动力学自复制模型是否需要三维空间才能实现的问题。他怀疑只有在三维空间或者黎曼曲面(多连接的复数平面)上才能实现该模型。但在本书的第二部分中,二维平面已经足以实现自复制的元胞模型了。这似乎说明,二维平面也足以实现动力学自复制了。 让我们继续回到伊利诺斯的讲座中:冯·诺伊曼讨论了自复制自动机的一般设计方法。他说,在理论上只要有足够的时间和原材料,就可以建立一个能够复制任何机器的车间。这个车间中有一台具备如下能力的机器 B:对于任何一个结构或者机器 X,则机器 B 会自动扫描 X,并把 X 上面的所有零件,以及这些零件的相互连接方式都列成表格,从而得到 X 的完全描述。再根据以上的描述,机器 B 就可以把 X 同样地复制出来。“这同自复制已经非常接近了,因为我们可以把 B 喂给它自己从而得到自己的一个复制品” 但是,相对说来比较简单的,而且同样可以实现最终目的的做法是,不去直接建立能够复制任何给定结构或者样本的自动机,而是去做一个能够根据逻辑描述来组装目标的自动机。因为,按照任何可设想的方式,复制一个对象都必定分成两步,先是从具体实物抽象出描述,然后再从这个描述到具体实物。因此,先做后面这步会比较简单一些。 要做到这件事,我们必先得有一个自动机的公理化描述。如我们所见,我的做法和图灵的通用自动机很像,都是从一个理想机器的通用描述开始。我之前比较含糊地提到过,我们一共有大约十几种基本零件,如果把它们的细节都具体写出来的话(估计两页纸就够了),我们就可以得到一套刻画自动机的无歧义的形式语言。现在,我们可以把这些形式记号转变为二进制,并记录在打孔纸带上面。因此,任何自动机的描述都可以记录在打孔纸带上。我们可以不描述对自动机每一个零件以及这些零件之间的连接方式;而是直接描述这个自动机是如何被一步一步组装出来的,后者会比较方便一些。
要给出一个完全的公理化描述体系并不太困难,由此我们可以把任何可设想的自动机用二进制代码表示出来。任何这样的描述都可以用类似上图的一串零件来代表。假设自动机 X的符号串是Φ (X)。接下来,我们可以设计一台通用构造器(Universal constructer)A,当我们把Φ (X)喂给 A 的时候,它就能够逐步地利用悬浮在周围的零件,把 X 一点点的组合出来。实际设计工作当然是很麻烦的,但是理论上却是可以办到的。因为这个过程可以归纳为形式逻辑的分步推理,从性质上说,这和通用图灵机并无区别。 还有一件事要说,我之前提到过,要制造一台能够直接复制任何自动机的机器是比较复杂的。所以最好是从要复制的机器的描述而不是从机器的实体来进行复制。但是我想补充一点,存在着某复制机器可以直接拷贝线性的刚体零件链,这是很简单的。因为导致实体复制困难的真正原因是,实体自动机的结构同我们串行的思考习惯完全不同,各种各样的零件朝着各个方向相互连接。仅仅是把已经扫描过的零件排除在列表外,便是很麻烦的事情。但是拷贝一根长链并无这种困难。所以,我可以假设存在一台通用拷贝机器 B (copy automaton),当我们把任何描述输入 B 的时候,B 就会制造出同样的两份描述出来。 在完成以上两步之后,可能给人一种错觉,在此过程中复杂度衰退的原理似乎仍然没被打破。在表面上看,似乎在复制过程中,既没有产生更微妙的东西,也没有建立更多的联系。A 只能按照描述来制造 X。而按照对于复杂度的一般认识,X 的复杂度是和 X 的描述相等的。另一方面,B 拷贝得到了两份Φ (X),但是两个同样的事物放在一起,没有理由说它们作为整体的复杂度要高于其中一个的复杂度,并且,我们还需要额外的机器 B 来完成复制。但实际上并不是这样的。 现在我们可以做下面这件事,我们可以把机器 A 和 B 组合在一起,并给 A+B 添加一个控制器 C。C 按照下列方式对 A 和 B 施加控制:C 先命令 B 拷贝两份描述Φ (X);然后再命令A 按照Φ (X)来实际制造 X,并把其中的 1 份Φ (X)拷贝去掉;最后,C 会把 X 和剩下的那份Φ(X)捆在一起,并把它们从机器 A+B+C 的组合中间分离出去,这样一来,我们就制造出了 X+Φ (X)这样的组合。 按照以上原理,如果我们用(A+B+C)来代替X,并进行上述同样的操作的话,那么(A+B+C)+Φ (A+B+C)的自动机组合,就可以制造出自动机组合(A+B+C)+Φ (A+B+C)出来。因此,自动机自复制得到了实现!
Arthur W. Burks:
这个过程的细节如下:
1、 现有自动机(A+B+C),并附有它的描述Φ (A+B+C)。
2、 从(A+B+C)+Φ (A+B+C)开始复制流程。
3、 C 控制 B 拷贝两份描述,得到:(A+B+C)+Φ (A+B+C)+Φ (A+B+C)。
4、 C 命令 A 按照Φ (A+B+C))来实际制造出 A+B+C,
得到(A+B+C)+( A+B+C)+Φ (A+B+C)+Φ (A+B+C)。
5、 最后 C 把新得到的自动机 A+B+C 和它的描述Φ (A+B+C)捆在一块,并把自己和新自动机分开,这就得到 2 个(A+B+C)+Φ (A+B+C);复制完成。
这个过程并不是循环论证:我首先把 A 和 B 做了清楚的定义。在我提到 X 之前,我已经说明,C 可以适用于任何形式的自动机 X。接下来定义了一个变量 X,它描述了 C 将要怎么做,然后,我再让这个变量 X 和 C 产生联系。所以,A、B 和 C 的定义是完全独立于 X 的,在此之后,我再让这个 X 指代 A、B 或者 C。因此,整个过程并非循环。 以上的通用构造器(general constructive automaton)A 具有一定意义上的创造力,也就是说,A 可以从抽象的描述来“制造”出实体的机器来。同样的,通用拷贝机 B 也有一种能够把一份描述变成两份的“创造能力”。但 A 和 B 都不具备自复制能力,此外,控制器 C 也远远没有具备任何形式的创造或复制能力,它唯一能做的就是刺激其它的两个组件去做一些事情,把一些东西连接在一起,或者把一些东西从原来的系统中分割出去。然而,一旦 A、B 和 C 组合在一起,它们作为一个整体却能够复制自身。故而我们可以把一个自复制系统分割成不同的部分,每一个部分虽然都不能够复制自身,但对于自复制机器整体却又都是必不少的。
自复制自动机的进化
我们还可以做另外一件事,让 X 代表 A+B+C+D,这里 D 代表任何自动机。那么(A+B+C)+Φ (A+B+C+D)就可以制造出(A+B+C+D)+Φ (A+B+C+D)。换句话说,我们的自复制机器不仅仅有复制自己的能力,还可以顺便生产出其他的组件 D 的能力。这就是任何自复制生命都具备的功能:在复制自身的时候,它还会创造出副产品。 作为一个系统,(A+B+C+D)可以发生类似变异的过程。在定义“自复制”究竟是什么意思的时候,我们会遇到这样的困难:有些结构,比如晶体的生长的确也是在复制自己。但是我们都觉得把晶体称为自复制,显然是名不副实的。有一个办法可以绕过这个困难,就是把发生变异的能力,以及制造类似却不等同于母体的生命的能力包括在“自复制”的定义中间。 现在考虑(A+B+C+D)+Φ (A+B+C+D)这个自动机。“变异”是指中间有一个零件发生随机的变化。如果是 A、B 或者 C 的一个零件发生了变化,那么系统通常就会失去自复制的能力。比如 C 的一个零件被修改以后,C 很可能就不能在正确的时间上给 A 和 B 发射刺激信号,或者无法在需要的时候进行连接和分割,这样的变异就是致命的。 但是如果变异发生在描述Φ (A+B+C+D)上面,那么系统制造出的就不再是它自己,而是修改后的自己,下一代自动机能否继续复制取决于变异发生的具体位置。如果 A、B 或者 C发生了变化,那么子代自动机就会“绝后”。但是如果变异发生在 D 的描述上,那么除了 D变成了 D’之外,变异的子代同母体系统完全相同。之后的子代会把这个变异 D’继承下去。这就是可遗传变异的基本过程。 总之,虽然这套系统还非常原始,但它已经具备了可遗传变异的基本特性。大多数随机变异都是致命的,但是也可能偶尔会发生非致命乃至是可遗传的变异。这是遗传所特有的性质,这套系统也同样具备了。
侯世达:《哥德尔、艾舍尔、巴赫》,商务印书馆,1996;R.M. Smullyan: Diagonalization and Self-Reference,Oxford University Press, 1994。
“后ChatGPT”读书会招募中
2022年11月30日,一个现象级应用程序诞生于互联网,这就是OpenAI开发的ChatGPT。从问答到写程序,从提取摘要到论文写作,ChatGPT展现出了多样化的通用智能。于是,微软、谷歌、百度、阿里、讯飞,互联网大佬们纷纷摩拳擦掌准备入场……但是,请先冷静一下…… 现在 all in 大语言模型是否真的合适?要知道,ChatGPT的背后其实就是深度学习+大数据+大模型,而这些要素早在5年前的AlphaGo时期就已经开始火热了。5年前没有抓住机遇,现在又凭什么可以搭上大语言模型这趟列车呢? 集智俱乐部特别组织“后 ChatGPT”读书会,由北师大教授、集智俱乐部创始人张江老师联合肖达、李嫣然、崔鹏、侯月源、钟翰廷、卢燚等多位老师共同发起,旨在系统性地梳理ChatGPT技术,并发现其弱点与短板。本系列读书会线上进行,2023年3月3日开始,每周五晚 19:00-21:00,欢迎报名交流。