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).