碳基生命有没有可能是被设计出来的?

这篇文章是对知乎高赞回答《人类有没有可能是被设计出来的?-无fa可说的回答》的反驳。这里我偷换了标题,把“人类”换成了“碳基生命”。之所以换,是因为原文的前一部分通过科学研究的证据完美阐释了——人类是经过漫长的时间,从原始生物连续进化而来,不是被设计出来的。针对这一点,原文中也给出很多有趣的例子,有些让人大开眼界,有些让人大跌眼镜,有些让人拍案叫绝。

既然人类不是被设计的,那么我要反驳的观点, 是原文中间引用的一个读者的提问,一个“真正直击灵魂的问题”——即进化论只解答了生命的演化,没有解释生命的起源。事实上,一颗砂子想要演变成一个细胞,其难度要远远大于一个细胞进化成人类。为此,原文援引了生命游戏,试图说明“复杂而有秩序的系统可以自发产生”。然而,事实并非如此。

那么,碳基生命有没有可能是被设计出来的?不仅有可能,而且可能性很大。我们从生命游戏说起。

生命游戏

这个游戏全称是Conway’s life game。它不是个传统意义的“游戏”,而是一个根据特定规则模拟的“世界”。这是个无限大的二维的网格世界,每个格子中要么有生命,要么没有生命。

规则很简单,生命的存活与否,取决于它周围一圈8个格子中的生命:

  • 寂寞致死:如果一个生命周围的生命<2个,它会因寂寞死去;
  • 拥挤致死:如果一个生命周围的生命>3个,它会因拥挤死去;
  • 继续生存:如果一个生命周围恰有2或3个生命,那么它可以继续生存;
  • 新生诞生:一个没有生命的格子,如果周围恰好有3个生命,则会诞生出新的生命来。
Gospher’s Glider Gun 滑翔机枪,向右下方发射“滑翔机”
图片来自 http://www.conwaylife.com/wiki/Gosper_glider_gun

怎么玩?

最粗犷的方式是,先随机在网格中布置一些生命——随机布置被称为一锅汤——然后看生命的自生自灭。这样一来,你马上会发现生命收敛成了一些有规律的图案,最常见的是静止图案和周期变化的振荡器。一些情况下,你会看到一个不断向一个方向移动的图形,称为“太空船”。

如果人们精心排布整个网格的起始状态,则可以产生非常复杂的系统。例如,使用滑翔机可以构建出与、或、非门,这是计算机中的基本门电路。进而可以构建出全加器,最终构建出图灵机。事实上,人们甚至成功的用生命游戏构建了一个更大尺度的生命游戏。由生命游戏构建出的神奇世界,可以参见《生命游戏的奇葩玩法》。

生命游戏构建的时钟,图片来自 https://codegolf.stackexchange.com/questions/88783/build-a-digital-clock-in-conways-game-of-life/111932

然而,应该注意到,所有这些金光闪闪的结构,离不开四个字:精心设计。比如说,构建逻辑“电路”所需要的基础模块是“滑翔机枪”,它用来发射“滑翔机”,“滑翔机”相当于电路中电流。这个基本结构需要36×9的空间,即324bit的信息量。如果靠随机量碰巧构造一个滑翔机枪,那么需要尝试的次数超过可见宇宙中的原子总数!

事实上,2004年德国数学家Achim Flammenkamp 对180万锅汤进行了模拟,出现的图形大多是静止图形、周期性的振荡器,偶尔有孤零零飞行的“太空船”。没有产生机枪或更复杂的结构。

因此,生命游戏说明:简单的规则可以支撑复杂的系统,但并不能自发产生复杂的系统。而细胞正是这样一部复杂的机器。

细胞是一部精心设计的机器

生活中常见的动物和植物,都是由细胞组成的。细胞里有个细胞核,里面存着DNA。这些DNA记录着细胞乃至整个生物体的全部遗传信息。

DNA是双链组成的螺旋结构,一侧的链上是一排顺序的“数据单元”——碱基。数据采用4进制存储,分别是A、T、G、C这四种碱基,即每个碱基有2bit的信息量。另一侧的链是冗余的数据,其上的碱基恰好和第一条链互补对应。这样一方面便于DNA的复制,另一方面起到了校验的作用。

DNA中的数据需要经过“转录”和“翻译”后,制造出具有实际功能的蛋白质,这就是基因的表达。表达过程中,每3个符号为一个“密码子”,对应于一种氨基酸。随着基因的表达,这些氨基酸按顺序形成一个长链,随后自然折叠后,形成了具有功能的蛋白质。细胞就是一部“数字化蛋白质合成仪”。

mRNA密码子阅读框架,对应于DNA则是U换成T
图片来自https://en.wikipedia.org/wiki/Genetic_code

有趣的是,这部“数字化蛋白质合成仪”本身,也是通过DNA的转录和翻译产生的。这有点像我们可以用一台3D打印机,打印出另一台3D打印机所需的零件,然后组装成一台新的3D打印机。DNA就像存储的3D打印指令文件的U盘,你只要有了第一台3D打印机,就可以持续不断地制造出更多的3D打印机,甚至是功能更加强大的新型号机器。但如果没有第一台机器,你便无法开始。

我们再看看如今的冯诺依曼体系计算机,看看它和一个细胞有怎样奇妙的对应关系。

首先,计算机中有一块连续的存储空间——内存,这就像DNA一样,只不过我们采用的是2进制,而不是4进制。软件程序的代码被存储在内存中,这些数据可以被分成一个个机器指令,每个机器指令通常8bit至32bit不等,就像DNA密码子一样。这些指令被机器按顺序执行,目的是操作内存空间中的其它任意的数据。这就像DNA密码子被顺序地组成蛋白质,再作用于细胞的其它部件。

早期IBM计算机的程序卡片。现在的计算机则把程序保存在内存中。

值得一提的是,根据DNA生产的蛋白质,是可以反过来修改和剪切DNA本身的。而在冯诺依曼计算机中,软件程序也可以像修改数据一样修改程序本身,从而改变程序本身的功能。这种技术目前在机器码的层面已经很少使用了, 但在高级语言、解释型语言中仍在使用,例如monkey patch技术。

更有趣的是,在一些病毒的DNA中,会出现这样的情况:同一段DNA,通过错一个氨基酸的位置来翻译,可以产生截然不同的两种有效的蛋白质。如果用中文举个形象的例子,就是“禾灿邻晴”四个字,把每个字拆开重新组合,也可以被读作“秋岭阳青”。(这个例子来自中译本《GEB》。)

在计算机领域中,也有个类似的技巧,叫做指令重叠(overlapping instructions),通常被用作迷惑反向工程工具,在早期存储器空间受限时,也用所缩小程序的体积。例如下图中所示的一段X86机器码。 这样的精妙结构,让人无法不相信出自精心的设计或高级的压缩算法。

一段使用了重叠指令的X86汇编代码。其中的0x000C位置的跳转指向了0x0002位置。
来自 https://reverseengineering.stackexchange.com/questions/1531/what-is-overlapping-instructions-obfuscation

人工设计的计算机和碳基生命的细胞,在信息的存储和指令的解析方面竟然有如此多相似之处,让人怀疑是不是计算机的设计借鉴了细胞的原理?事实上,DNA的双螺旋结构是1953年才刚刚提出,而现代计算机的开创者阿兰图灵逝世于1954年。如果图灵先生能活到今日,也一定会惊讶于自己的设计与生命的基础多么相似。

生命大概率是被设计出来的

既然没有任何证据能证明复杂的细胞可以在自然随机条件下产生,而它的工作原理又和人工设计的机器有如此多的相似之处,那么完全可以合理地假设,生命是被设计出来的。这里,我给出两种我认为合理的设计论假设——实验和模拟。

至于为什么说设计论成立的可能性更大?举个例子,天然珍珠非常稀少,但自从人类掌握了人工养殖的方法之后,珍珠产品就变得普及起来。现在,你去市面上买珍珠产品,几乎不可能遇到天然珍珠。类似的,如果启动一个实验、或者一次模拟,对于高等生命来说的成本很低,那么我们自己碰巧不在实验或模拟中的可能性,就像遇到天然珍珠一样低。

可能性1:生命的目的是一个实验

碳基生命可能是高等生命设计的一个实验。就像人们自己尝试让计算机具有“人工智能”一样,高等生命可能也在探索,如何制造一个有智能的机器,而碳基生命就是这个机器的原型机。

注意,这里并不是说人类是原型机,而是碳基生命。在高等生物看来,人类只是自己设计的机器产生的一种合理演化结果,而任何一种地球上的生物都是一个演化结果。人类只是目前实验中演化程度最复杂的一种。

为此,高等生命可能设计了一种DNA编程语言,比如叫做LifeScript,可以通过高级语言来描述一个基本的细胞的功能,然后编译后形成一串4进制的序列,保存在DNA中。程序员都知道,如果把高级语言代码编译成机器码,反向工程的难度非常大。类似地,人类试图反向工程通过LifeScript编写的DNA代码,难度更大!毕竟生命的复杂度绝不亚于人类的计算机。

病毒,是高等生命设计的热更新补丁,在细胞系统设计出来的早期,用来更新系统中的个体。毕竟这是一个分布式的系统,所有个体形成之后,基因在物理上是相互隔离的,因此需要一种具备传染性的方式来发布热更新。

如果这真的是一场实验,那么其架构设计之宏大令人叹为观止。想想看,只要在一个环境适宜的地方培养一个细胞,它就可以自我迭代,改造环境,产生智能生命,并制造出现在人类的一切——建筑、机械、计算机等等。这些都可以看作是这场实验的产出。而所有这些的源头——细胞本身,其实并不具备任何“智能”,它只是具备了强大的演化出智能的潜力。

可能性2:我们的世界是模拟的

我们的世界也可能完全运行在一个软件模拟器中。

《黑客帝国》只是给人们一种便于理解的场景,即软件模拟中的世界和外面的真实世界具有几乎相同的物理属性。而真实情况可能比它复杂很多。很多基础的物理参数很可能不过是模拟器的设定参数,包括:这个空间是3维的,这里有个单向、线性的时间概念。而模拟器外面的“真实世界”,可能维度更高或更低,或者根本没有时间的概念。

这些物理参数定义了我们的思维方式。所有地球上的生命都无法假想自己处在一个没有时间的世界,或者一个超过三维的世界。这就像《西部世界》中的机器人无法感觉到真实的人类一样。

模拟器可能还有别的参数设定,例如:这个宇宙中只有一个星球来模拟碳基生命。这就是为什么我们无论如何都找不到地外生命——因为碳基生命才是本次模拟的核心研究对象。别的生命都在其它的模拟器中运行着。

如果是这样,那么我们大可不必担心地球毁灭之类的问题,至少在人类具备星际迁徙能力之前不需要。因为我们有主角光环!

智能的层级

不论是实验还是模拟,都不妨碍人们按照这个世界的规则继续生活,继续探索智能的本质。那么,让我们类比一下人类的计算机和人工智能技术,距离地球上碳基生命今日的巅峰——人类自身所达到的成就,还有多远。

目前计算机的基础是冯诺依曼架构的CPU,它忠实地执行其存储器中的指令,丝毫不差。如前面所述,这一点类比于细胞质,它实现了DNA转录和翻译的基础环境。只是计算机硬件是额外单独生产的,而细胞质中的物质也是通过基因表达制造的(就像能打印自己的3D打印机)。

计算机硬件上直接跑的都是机器码,但如果仔细区分,会看到这里面的多个层次。操作系统的内核代码直接跑在硬件上,它决定着存储器中的哪些功能代码,应该在何时被执行。例如,它可以调度多个进程跑在同一个处理器核心上,每个进程分到一些时间片和资源。而每个进程本身,可能跑的是一个解释器(比如python虚拟机),用它再来解释执行另一种编码(比如python字节码)的软件。而这一堆python字节码,可能大部分来自你使用的Django框架,而框架本身,又像是一个操作系统一样给每个执行具体业务的python子任务分配资源。

这样一来,虽然机器码可以类比与DNA的密码子,但是人们如果只看到一串机器码,完全无法理解上面跑的这个web服务本身的功能,就像只看基因密码子,无法推出表达后的蛋白质功能。事实上,计算机软件的多层结构,可以类比为蛋白质折叠中的二级、三级结构。

至此,人类计算机的硬件加软件,在功能层级上,大致可以等同于一个单细胞生物。

计算机和智能生命的对比

值得称赞的是,目前的深度神经网络技术,可以看作是计算机体系架构向着硬件、软件之上的第三个层级进发的尝试。在硬件、软件完全相同的情况下,通过输入不同的训练数据,可以训练出截然不同功能的网络。而使用这些网络时,也仅仅是加载不同的网络参数。

我倾向于把深度网络的参数,看作是比软件更高一层级的东西,暂且叫“符号件”吧。传统的软件也可以通过配置文件来重新定义功能,例如Nginx。然而不论其可配置性有多强,都脱离不开它是个网络服务软件。而加载不同的“符号件”,甚至可以把一个美颜的网络,变成一个下棋的网络。这就是“符号件”可以被理解为一个独立层级的原因。只是目前的“符号件”并不能完全覆盖软件层,需要和软件协同工作。

再看碳基生命。单细胞生物之上的层次,是多细胞生物。通过细胞的分化形成器官,多细胞生物中的每个细胞各司其职,形成了一个有机的整体。我们每天身上都有无数个细胞死掉,又产生无数个新的细胞,但我们作为一个整体依旧健康存活。多细胞的整体中,也分化出了一种特殊的细胞,用来支撑智能的更高层次,它就是神经细胞。

单个神经细胞本身的功能特点是简单的,但大量的神经细胞,就组成了更高层次——思维概念或符号。注意,这还不是人类特有的东西。小狗高兴时摇尾巴,饿了找东西吃,这些都是神经系统中大量的符号组合触发的结果。这一点,类似于计算机智能中的人工神经网络,这也是“符号件”这个名字的由来。

神经符号再上一层,是完备的语言。这是人类具备思维能力和意识的独门绝技。有了完备的语言,就有了讨论各层次的智能的工具。它是具有自指能力的工具。不论是神经符号,还是神经元,都不能对它的下一层结构产生理解或说三道四。而有了语言,就可以谈论从细胞到语言自身的所有问题,还可以谈论已发生的事情或未发生的设想。这就是自我意识。

语言/意识层次之上,是多个个体的协作,即社会。人类的每个个体,都造不出高楼大厦,造不出集成电路。这些成果是人类社会合作的结果。社会的组织方式,是智能的最高层级。如《人类简史》中所述,无论是共同信奉的宗教,强大的帝国暴力机器,还是对金钱的信仰,都是在不断演进的促进人类社会合作催化剂。

反观通过跳步才勉强到达“符号件”层级的计算机系统,距离通用智能,路还很长。