← 数字生命:从第一性原理出发

02:数字生命意味着什么?

如果数字生命是可能的,为什么假定它必须长得像生物生命?本书的思想宪章:名称不是证据,生物学是证据而非规格书,每一个论断都必须经住对照。

假设生命在软件中是可能的。

我们实际在找什么?

诚实的回答是:我们还不知道,而这正是本书存在的原因。

我们当然可以造出看起来活的东西:一个图形生物、一个动画智能体、一个个性驱动的助手。那不是实验。更难的问题是:一个计算系统能否经由自身的运行,产生配得上我们与生命相连的那套语言的某些属性。

是产生它们,而不是宣告它们。

这听起来简单,直到我们试着说清那些属性是什么。

我们立刻伸手去拿一套熟悉的词汇——不是一份需求清单,只是生物学教会我们注意的那些属性:

结构
存续
响应
适应
修复
记忆
繁殖
遗传
演化

这些词有用,也是一个陷阱。因为构建看起来像数字生命的东西,最容易的办法就是把生命词汇直接写进程式。我们可以写:

class Metabolism:
    ...

class Memory:
    ...

class Reproduction:
    ...

class Organism:
    ...

一下午就能拿出无可辨认的生物启发式软件。

而我们仍然不知道:这些生物学词语描述的是系统的属性,还是程序员的决定。

把一个方法叫做 reproduce(),并不确立繁殖。

把一个数字叫做 energy,并不确立代谢。

把状态写进磁盘,并不确立记忆。复制一份构型,并不确立遗传。跑一个优化器,并不确立演化。

名称是我们的。

证据必须来自系统。

本书从这里开始。


生命的货物崇拜

货物崇拜(cargo cult)复制某种东西的可见形态,却没有复制让原物成立的机制。费曼借这个意象形容那种有科学之形而无科学之实的科研。[1]

人工生命有这个问题的典型版本。我们可以借用生物学的词汇——细胞、生物体、能量、适应度、出生、死亡、记忆、遗传、演化——然后构建顶着这些名字的软件结构。结果可能很复杂,可能很美,甚至可能有用。

但术语什么也证明不了。

所以我们将在一条更严格的规则下工作。

我们不能仅仅因为实现了一个同名的东西,就宣称一种类生命属性。

存续必须被测量。

损伤耐受需要损伤:扰动系统,然后测量过程接下来做了什么——并且在判定是否恢复了任何东西之前,先与一个未受损的副本比较,度量它。

学习需要经验带来性能上可测量的变化。

遗传意味着有某种有用的东西存活进了延续或后继之中。

繁殖要求的比"早先结构与后来结构在视觉上相似"更多。必须有证据表明,早先的组织在产生后来的组织中起了因果作用。

演化施加最难的标准。我们需要辨认:什么在变异,什么在存续,什么被选择,以及跨世代或随时间改变的是什么。

命名这些属性很容易。证明它们才是工作。


但还有第二个陷阱

避开生物学词汇还不够,因为反方向也有一个错误等着。

我们可以预先决定生命必须包含什么:

边界
代谢
死亡
繁殖
遗传
选择

然后用本书剩下的篇幅逐个制造这些属性。

那会比拿它们给类命名好一些,但仍然偷运进一个假设:

数字生命必须以与生物生命相同的方式,解决相同的问题。

凭什么?

生物有机体存在于非常特殊的约束之下。它们占据物理身体。重排物质很贵。复制一个生物体又难又慢。身体会退化。个体会死。后天知识只能部分传给后继。谱系分支,一般不再合并。

计算基底的可能性集合不同,代价集合也不同。复制可以近乎免费。状态可以做检查点存档并恢复。一个进程可以在机器之间迁移。两个谱系可以分叉,稍后再合并。后天信息原则上至少可以直接传递。一个组织可以分布在许多位置。一个数字系统可能只是生长,根本从不繁殖。

这些都不意味着计算不受约束。恰恰相反。它意味着:如果数字生命可能,它的重要约束可能是计算性的,而非生物性的——我们不该预先判定那些约束会是什么。

所以本书不会以一张叫作 REQUIREMENTS FOR LIFE 的清单开场。

我们不知道需求。

我们甚至不知道"需求"是不是思考这个问题的正确方式。一张生物学清单可能让我们对生物学没有现成类比的现象视而不见。

发现什么能存活下来,就是实验。


生物学是证据,而非规格书

几个世纪以来,人们看鸟,试图理解飞行。

鸟有羽毛、翅膀、中空骨骼、飞行肌肉、扑翼动作。所有这些都值得研究,研究它们才让问题变得可处理。但成功的飞行器并不要求我们制造一只人造鸟。重要的发现藏在解剖之下:

升力
阻力
推力
稳定性
操控性

鸟是飞行可能的证据,而不是工程规格书。

生命可能类似。

生物学给我们一个极其成功的实现,也是目前唯一可检查的实现。但生物体是一个被其材质塑造的解,而它最熟知的许多特征,可能只是那种材质的后果,而非组织化存续在别处采取任何形态时的普遍需求。

所以本书的任务不是:

造一只数字动物。

而是:

发现数字生命的动力学。

哪些机制真正要紧?哪些属性会自行出现?而我们以为基本的东西中,哪些其实是生物学为"在物理世界中活着"这个具体问题找到的解?

这些我们都不该预先回答。


不要信任看起来活的东西

还有一个问题,它不在软件里,在我们身上。

一副复杂的仿真可以摄人心魄。我们可以生成一段美丽的动画,立刻感到某种深刻的东西正在发生。可能吧,也可能不是。随机噪声可以看起来复杂。一个短命的瞬态可以在消失前一刻看起来非凡。一个周期系统如果我们看的窗口太小,可以看起来混沌。一个模式可以像生物体,而除了几何形状一无所有。

惊讶很廉价。

而人类极擅长把运动变成名词。

我们看到形状移动,就说它旅行了。看到一个形状变成两个,就说它繁殖了。看到几个结构一起移动,就说它们群集了。升级在一秒之内完成,发生在任何测量之前。

这些词最终可能是正当的。动画证明不了它们。

所以本书始终坚持一个容易陈述、难维持的区分:

现象与我们对现象的解释不是一回事。

在新的基底中,连定义都必须配得上。在我们把什么称作记忆、繁殖或个体性之前,必须说清:什么样的观测算支持它的证据,什么样的算反对它的证据。那个操作性定义是实验的一部分,不是词汇免费赠送的。

这给出第二条规则:

先看。然后试着摧毁自己的解释。


连我们的小词也必须配得上位置

这适用于小词,一如适用于响亮的词。

假设一个模式穿过晶格(lattice)时存续。它是对象吗?也许。再假设可见模式消失,一个等同的模式在别处重现。它还是同一个对象吗?也许不是。

假设两个不连通的区域参与一个延续的因果过程。它们是两个东西,还是一个分布式的东西?

再假设两个结构看起来完全相同,却有完全独立的历史。它们是同一类对象,但几乎肯定不是同一个个体。

我们会从简单的几何定义起步,因为它们可测量,也因为总得从某处开始。但应当松松地拿着它们。

模式的可见边界,可能不是数字个体的真实边界。

存续有另一种弱点。程序可以靠什么都不做而无限存续,所以时长本身几乎说明不了有没有事情发生。

繁殖值得第三种怀疑。生物学让它看起来不可避免,因为生物体会死,谱系经由后继延续。数字过程可能只是继续。繁殖可能要紧——但基底必须向我们展示为什么。

演化继承了所有这些,再加一个。在生物学中,过去抵达未来的通道又窄又清楚。在计算基底中,它可能是后天状态、学到的参数、外部记忆或被修改的代码,我们不能预先假定其中哪个在起作用。

所以更宽的问题是:

历史如何能在计算系统能做的事情上,产生累积的、可测量的变化?

生物演化是一个答案。

我们还不知道别的答案。

可见对象可能不是重要的单元。历史可能要紧,而没有任何我们认得出的记忆。繁殖可能根本不是基础。

这些是实验的问题,不该用选对词汇来裁决。


本书如何查明

剩下一个实践问题。如果词汇不可信,需求不能预设,我们怎么知道该找什么?

从可观测的出发。视觉系统给出假设,实验决定什么存活。

所以同一循环贯穿全书:

看到某种现象
↓
命名假设
↓
定义什么算作证据
↓
测量它
↓
构建对照
↓
寻找混杂因素
↓
构建更好的对照
↓
只保留存活下来的东西

后面的章节会一次次回到这个序列,因为流程本身是仪器的一部分。

问题会变,流程不变。

循环中有三段做主要工作。

**干预(intervention)。**相关性容易得到,难解释。如果我们认为一个机制产生一种能力,最强的可用招数就是移除或破坏那个机制,测量什么变了。如果能力不依赖那个机制,解释就是错的,无论它看起来多么令人满足。

**对照(control)。**单个数字几乎说明不了什么。一个 0.74 的连贯性分数令人印象深刻还是平平无奇,完全取决于未受扰动的系统得多少分、打乱的过程得多少分、匹配的比较得多少分。所以本书的每一个对照都存在,因为有一个我们试图排除的具体替代解释——而第一个对照常常不够好。

在自己的实验中发现混杂因素不是挫折。它告诉你:结果背负了不止一种可能的解释。

去掉一个,你才终于能看见剩下的东西。

**有界的论断。**比较:

系统会自愈。

与一句刻意有界的陈述:

在区域 R 施加扰动 P 之下,结构度量 M 与匹配对照相差 D,且该差异经住了对照 C。

第二句听起来不那么刺激,但它的边缘可见。我们知道什么被改变了,什么被测量了,它与什么比较过,结论在哪里停止。

一个后果必须直说,因为研究通常在这里走错。

证据标准不因假设变诱人而改变。它不因结果令人兴奋而放松,也不因结果不便而收紧。一段美丽的动画产生假设,从不确立解释。如果最诚实的强结论小于激发实验的那个想法,更小的结论就是结果。


预期我们会错

这值得明说,因为它不是免责声明,而是本书写作过程中实际发生的描述。

我们形成失败的假设,设计不够的对照,产出看似惊人的测量,然后在混杂因素出现时崩塌。有时我们发现,连问了三章的问题,其实是两个穿着一个名字的不同问题。

反复出现的形状大致是:

我们预期 X
↓
实验不支持 X
↓
别的东西出现
↓
我们追查它
↓
新解释也可能失败
↓
更小或更奇怪的现象存活

最后一行是重点。

这不是一本每章提出一个属性再成功证明它的书。

我们常常找一样东西,被展示另一样。

有时第一个解释失败,有时第二个也失败。偶尔要几个实验,才明白系统一直在向我们展示什么。

这引出研究的一条核心规则:

解释可以死,而现象不死。

失败的解释不要求我们扔掉杀死它的观测。有时观测本身就是发现。

把存活的测量与死去的解释分开,是大部分工作。

我们不是要证明数字生命存在。

我们要查明:攻击之后,哪些论断还站着。

我们会在途中遇到熟悉的属性——结构、存续、身份、损伤耐受、繁殖、遗传、适应。它们以实验问题的身份到来,而非成就,研究它们的顺序是穿过这场研究的一条路,而非通往生命的梯子。其中几个会在书末仍未配得上,一两个会被点名拒绝。

没有什么能为一个 ALIVE 标签加分。


我们实际在问的问题

到书末,我们可能仍然拒绝说我们造的任何东西活着。

那会是可接受的结果,甚至可能是正确的结果。

要紧的是我们能否说出这样的话:

这个结构在这些条件下存续

这个模式在这一扰动下失败

这个过程在失去部分物质后继续

这个后来的结构在因果上承自那个早先的结构

这个早先的状态可测量地改变了后来的响应

这个效应经住了这一对照

当移除这一混杂因素时,这个表面行为消失了

这些是朴素的句子,也是可立足的坚实之处,比我们出发时的多数词汇能给的都多。

也许空气动力学就从那里开始:不是从生命理论开始,而是从一张短短的测量关系清单开始,精确到在任何一般理论收容它们之前就能存活。至于本书是否组装出这样一张清单、清单有多短,是终章的问题。

如果足够令人惊讶的属性经住足够多的解释尝试,一个不同的问题最终不可避免。不是:

它看起来活吗?

而是:

这里实际是什么样的东西?

本书反复回到这个问题。

我们会一再请系统展示我们已有名字之物,有时它会。

有时它展示别的东西。

工作是注意到差别。


从哪里开始

要问这些,需要一个简单到能看清发生了什么的世界。

小计算系统——晶格、局部规则、时钟——几乎是理想的,不是因为它们像生物体。它们不像。有用是因为它们不给借口。如果有趣的事发生在一个非常大的模型里,解释可以消失在数百万参数中,再也找不到。在只有少数几种成分的系统里,我们可以检查每一个状态,重放每一步,翻转一位,跑反事实,比较相邻规则,精确测量扰动做了什么。

论断在那里失败时,几乎无处可藏。

这让这些系统值得作为起点。它们不是生命的模型。

它们是涌现(emergence)的实验显微镜。


下一章我们校准显微镜。

我们从丰富到让诱惑几乎无法抗拒的计算系统开始:移动、存续、碰撞、表现得像东西的形状。

我们允许自己看见生物。

然后开始拿走假设。

连续状态、丰富邻域、复杂规则,乃至"存续模式必须由同一物质从一刻构成到下一刻"这个想法。

当几乎什么都不剩时,我们已经遇到了驱动本书剩下部分的问题:

计算能在我们知道叫它什么之前很久,就产生值得解释的东西。


参考文献

[1] Feynman, R. P. Cargo Cult Science. Caltech commencement address, 1974. Reprinted in Surely You’re Joking, Mr. Feynman! (1985).