第五章
进化学派:自然的学习算法

阅读 ‧ 电子书库

机器人公园是一个巨大的机器人工厂,被1万平方英里的丛林、城市等包围着。感觉那个丛林就是人类建造过的最高、最厚的墙,布满哨所、探照灯、炮塔。这堵墙有两个作用:把入侵者挡在外面,把公园的“居民”(数百万个为工厂生存而战、对工厂进行管理的机器人)保护在里面。获胜的机器人能够“产卵”,它们完成繁殖的方法就是通过对体内的3D打印机储库进行编程。慢慢地,机器人变得更智能、更快速以及更致命。机器人公园由美军运营,其目标是使终极战士进化。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

机器人公园现在还不存在,但有一天它可能就会出现。我建议把它作为几年前DAPRA(美国国防部先进计划研究局)研讨会的一个思维实验,而出席该会议的一位军队高层人士实事求是地说:“那个想法可行。”但如果这支军队为了训练士兵,已经在加州沙漠对阿富汗村落进行全面模拟,模拟中还包括村民,而且为了培养终极战士,几十亿美元也只是个小数目。想到这些,他这么爽快地认可这个想法,就不会觉得多么让人吃惊了。

人们已经开始向机器人公园迈出第一步。在霍德·利普森位于康奈尔大学的创意机器实验室中,奇形怪状的机器人正在学习爬行和飞行,可能正巧它们在做这些时,你也正读到这里。其中一个机器人看起来像胶块垒成的滑行塔,另外一个像装了蜻蜓翅膀的直升机,还有一个能变形的万能工匠。这些机器人并不是人类工程师设计出来的,而是进化而来的,和地球上生命多样性产生的过程一样。虽然机器人最初在计算机的模拟中得以进化,一旦这些机器人的技术达到熟练水平,足以在真实世界中运用,真实版的机器人就会通过3D打印机被制造出来。这些机器人还没有做好掌管世界的准备,但和开始时的“原生汤”模拟物相比,它们已经有了很大进步。

使这些机器人进化的算法,是19世纪由查尔斯·达尔文发明的。那时他不觉得这是一种算法,部分原因在于当时仍缺少一个关键的子程序。一旦1953年詹姆斯·沃森和弗朗西斯·克里克提供了该子程序,进化就会进入第二个阶段:该进化是在计算机中而不是在活体中进行,而且会比活体进化快10亿倍。该子程序的提倡者是一位面色红润、永远面带微笑的中西部人,名叫约翰·霍兰德。

达尔文的算法

和许多其他早期的机器学习研究者一样,霍兰德开始时研究的是神经网络,但他的兴趣使情况发生转变。在密歇根大学读研究生时,他阅读了罗纳德·费雪(Ronald Fisher)的经典著作《自然选择的遗传理论》(The Genet: Cal Theory of Natural Selection)。在该著作中,同时作为现代统计学奠基人的费雪,提出了关于进化的第一套数学理论。虽然这个理论很妙,但霍兰德认为它遗漏了进化论的精华。费雪孤立地看待每个基因,但是有机体的适应度就是它所有函数的复值函数。如果基因都是独立的,它们变量的相对频率会快速收敛至最大适应点,然后从此保持均衡。但如果基因相互作用,进化(追求最大适应度)就要复杂得多。如果有1000个基因,每个基因有两个变量,那么基因组就有21000种可能的状态,宇宙中没有哪个星球可以大到或者古老到能够一一尝试这些可能。但是在地球上,通过进化可以得到适应力很强的有机体,而达尔文的自然选择理论至少从数量上解释了怎样找到这样的有机体。霍兰德决定将其变成一种算法。

但他首先得毕业。他谨慎地为其论文选择了一个更为保守的主题——布尔周期电路,1959年他获得了计算机科学领域的首个博士学位。即便如此,他读博士期间的导师亚瑟·伯克斯激发了霍兰德在进化计算领域的兴趣,并帮助他在密歇根找到了教师工作,还让他避开那些不把进化计算归入计算机科学的资深同事。伯克斯本人思想很开明,因为他之前就已经是约翰·冯·诺依曼的亲密合作伙伴。冯·诺依曼证明了自我再生机器的可能性。的确,自从1957年冯·诺依曼因为癌症逝世后,完成这个工作的重任就落到了伯克斯肩上。在当时遗传学和计算机科学的原始水平下,冯·诺依曼能够证明这种机器的存在,这已经很了不起。但他的机器人智能仅能复制和自己一模一样的副本,要制造出进化版的机器人,还得由霍兰德来完成。

随着霍兰德的创作渐渐为人所知,遗传算法的关键输入就是一个适应度函数。给定一个待定程序和某个设定的目标,适应度函数会给程序打分,反映它与目标的契合度。在自然选择当中,适应度是否能这样解释,值得怀疑:虽然翅膀对于飞行的适应度很高,这个说法很直观,但整个进化过程却没有已知的目标。即便如此,在机器学习中,掌握诸如适应度函数这样的事情还是很容易的。如果我们需要一个能够诊断疾病的程序,如果一种算法能够正确诊断我们数据库中60%的病人,这样的算法就比准确率仅为55%的算法要好,所以可行的适应度函数能够帮助准确诊断。

就这一点而言,遗传算法就有点像选择育种。达尔文在《物种起源》开篇时就谈到这个问题,层层深入,解释较难理解的自然选择概念。现在我们自然而然地认为,经过驯化的动植物就是一代一代经过选择和交配的结果,是最能让我们达到各种用途的有机体:果实最大的玉米、最甜的果树、毛最多的羊、最强健的马匹。遗传算法也会做同样的事情,它产出的是程序而不是活的生物体,而一代对它而言是几秒的计算机时间,而不是生物的一生。

适应度函数将人在这个过程中扮演的角色概括化了。但和人的角色相比,更为微妙的部分是自然的角色。开始,是一群适应力不那么强的个体(可能是完全随机的个体)遗传算法得找出变量,然后这些变量依据适应度而被选择。自然怎样做到这一点?达尔文不知道。这就是遗传算法的一部分。DNA依据碱基对的序列对有机体进行编码,同理,我们也可以依据一串二进制数字对程序进行编码。DNA的4个基本组成单位,不是0和1,而是4个基本碱基,包括腺嘌呤、胸腺嘧啶、胞嘧啶、鸟嘌呤,但这仅仅是表面上的差异。变量,无论在DNA序列中,还是在位串中,都可通过几种方法产生。最简单的方法就是点突变,即随意翻转位串中的一个比特值,或者改变一段DNA中的单个基本碱基。但对霍兰德来说,遗传算法的真正威力在于更为复杂的东西:性。

把外衣脱光,只剩下基本部位(请不要笑出声),有性生殖包括在父亲和母亲的染色体之间进行材料交换,这个过程称作染色体交叉。这个过程会产生两条新的染色体,一条染色体交叉点的一边是母亲的染色体,另外一边则是父亲的染色体,另外一条则相反(见图5–1)。

阅读 ‧ 电子书库

图5–1

遗传算法通过模拟这个过程发挥作用。它为每一代中两个适应力最强的个体进行配对,通过随机交叉父母位串中的一点,让每对父母生出两个后代。将点突变应用到新的位串后,算法让这些点突变在其虚拟世界中释放。每个点突变都会反馈适应度得分,然后重复这个过程。每一代都会比前一代的适应度更高,当达到理想的适应度或者时间用尽时,这个过程就会结束。

例如,假设我们想对一个规则进行进化,用于过滤垃圾邮件,结果会怎么样?如果有1万个不同的词出现在训练数字中,每个待选规则会用一条由2万个比特组成的位串来表示,每两个比特就是一个单词。与单词“free”(免费的)相对应的第一个比特就是1,条件是包含“free”的邮件允许与规则匹配;与单词“free”相对应的第一个比特就是0,条件是包含“free”的邮件不允许与规则匹配。第二个比特则相反:结果就是1,条件是不包含“free”的邮件允许与规则匹配;否则结果就是0,且不允许与规则匹配。那么如果两个比特都是1,邮件不管是否包含“free”都允许与规则匹配,而且规则实际上对那个词不设条件。另外,如果两个比特都是0,那么没有邮件会与规则匹配,因为总有一个比特会发生故障,而且所有邮件都会通过过滤器。总的来说,一封邮件只有在其出现和不出现的单词模式都经过规则允许时,才能与规则匹配。一个规则的适应度就是规则正确分类邮件的百分数。从一堆随机的字符串开始,每个位串代表一个包含随机条件的规则,通过不断重复和改变每代中的最匹配位串,这时遗传算法就可以进化出越来越好的规则。例如,如果当前包含这些规则:如果邮件包含“free”,那么它就是垃圾邮件,如果邮件包含“easy”(简单的)那么它就是垃圾邮件。将这两个规则交叉可能会产生适应度更高的规则:如果邮件都包含“free”和“easy”,那么它就是垃圾邮件,前提是交叉点不落在与这些词(free、easy)相对应的两个比特中间。它也可能会产生这样的规则:所有的邮件都是垃圾邮件,这样的规则是抛弃所有条件后得出的,但它在下一代中不太可能产生很多子规则。

既然我们的目标是尽可能设计出最好的垃圾邮件过滤器,和老老实实模拟真正的自然选择相反,我们可以大大方方地作弊,方法就是通过改变算法来适应我们的需求。遗传算法能够频繁作弊的方法,就是允许有永不灭亡的东西(现实生活中却不存在,太糟了)。在那种方法中,适应力很强的个体不仅会在它那一代中为了繁殖而竞争,还会跟它的“儿子”“孙子”“重孙”等竞争,只要在群体中还保留有其中一个适应力最强的个体。相反,在现实世界中,适应能力强的个体能做到最好的,也就是将其一半的基因传给许多孩子,而每个孩子的适应能力可能不会那么高,因为遗传了父母另外一方的基因。不朽性避免了这样的倒退,而且如果幸运,能让算法更快地达到理想的适应力。当然,既然历史上最适合生存的人类都是通过其后代的数量来衡量的,比如成吉思汗(当今200个人中就有一个人是他的后代)。现实世界中没有永生这一说,也许也没那么糟糕。

如果我们想对一整套而不只是一个垃圾邮件过滤规则进行进化,我们可以用含有n×20 000个比特的字符串(每个规则有20 000个,和之前一样,假设数据里有1万个不同的词)来代表有n个规则的规则集。有些词会用“00”来表示,那些包含这些词的规则实际上会从规则集中消失,因为这些规则不会和任何邮件相匹配,这和我们之前看到的一样。如果一封邮件和规则集中的任何规则都匹配,那么它就被分类成垃圾邮件,否则就是合法邮件。我们还可以把适应度当作正确分类邮件的百分数,但为了防止过拟合,我们可能想从这个百分数中扣除与规则集中和活性条件相称的处罚比例。

我们甚至可以做得更好,方法就是允许过渡概念的规则进行进化,然后将这些规则在运行时串起来。例如,我们可以对这样的规则进行进化:如果邮件包含“贷款”一词,那么这是一封诈骗邮件;如果这封邮件是诈骗邮件,那么它就是垃圾邮件。既然一个规则的结果不再总是“垃圾邮件”,这需要引入规则字符串中的额外比特的信息来代表它们的结果。当然,计算机不会按照字面引用“诈骗”这个词,它只会找出任意的比特串来表示这个概念,但这对实现我们的目标已经起到很好的作用。霍兰德称类似这样的规则集为“分类器系统”,是他建立的机器学习部落中的一匹“驮马”:演化新论。和多层感知器一样,分类器系统会面临赞誉分布问题——过渡概念的规则适应度是什么?另外,霍兰德设计出所谓的“桶队算法”(bucket brigade algorithm)来解决这个问题。即便如此,分类系统和分层感知器相比,其应用范围要窄得多。

和费雪梳理的简单模型相比,遗传算法有了很大的进步。达尔文悲叹自己的数学能力不行,但如果他晚生一个世纪,他可能又会希望自己有很强的编程能力。的确,通过一组方程来充分体现自然选择很困难,但将自然选择表达为一种算法又是另外一回事,而且这样还能阐明许多其他棘手的问题。为什么一些物种会突然出现在化石记录中?能够证明这些物种是渐渐由早期物种进化而来的证据在哪里?1972年,尼尔斯·埃尔德雷奇和史蒂芬·杰伊·古尔德提出进化过程由一系列“间断平衡”组成,长期的停滞与短暂的快速变化相互交替,就像寒武纪爆发那样。这个问题引起激烈的讨论,“间断平衡”理论的批评家将其命名为“跳跃式进化”,而埃尔德雷奇和古尔德则反驳称,渐进主义就是“匍匐式进化”。遗传算法的经验会对支持“跳跃式进化”的一方有利。如果你运行10万代遗传算法,然后每隔1000代观察群体的数量,那么适应度与时间的曲线图可能看起来会像高低错落的楼梯,图形突然上升,然后是随着时间慢慢变长的平台期。要弄明白为什么也不难。一旦算法达到适应度的局部最大值(适应度中的峰值),算法会在这一点停很长时间,直到某次幸运的变异或者交叉,让处于坡上的个体等到更高的峰顶,在这一点上该个体会进行大量繁殖,然后和过往的每一代来爬上这个坡。当前的峰值越高,该过程发生前的那段时间就越长。当然,自然选择比这还要复杂:一个原因就是,环境可能会变化,要么是自然上的改变,要么是因为其他有机体自身进化了。另外,处于峰值的有机体可能会突然发现,对于再次进化,它面临巨大的压力。因此,虽然有用,当前的遗传算法还远远不是故事的结局。

探索:利用困境

我们应注意遗传算法和多层感知器的差异程度。反向传播会在任何给定时间坚持单一假设,而且这个假设会渐渐改变,直到其适应某个局部最优值。遗传算法会在每一步中考虑整个群体的假设,而由于交叉行为,这些假设可以从这一代跨到下一代。将初始权值设为小的随机值后,反向传播才会确定继续进行下去。相反,遗传算法则充满随机选择:该使哪些假设成立并进行交叉(适应度更高的假设更有可能成为备选对象),该在哪里对两个字符串进行交叉,该使哪些比特的信息发生突变。反向传播为了预先设定的网络结构掌握权值;密集度更大的网络更为灵活,但掌握起来也更困难。除了通用式以外,遗传算法不会对它们即将学习的结构进行预先假设。

因为这个原因,和反向传播相比,遗传算法陷入局部最优值困境的可能性较小,而且原则上也更有可能找到真正新颖的东西,但遗传算法分析起来也要难得多。我们怎么知道,遗传算法会得出有意义的结果,而不是像众所周知的酒鬼那样到处晃悠?问题的关键在于要从构建模块的角度去考虑。字符串比特的每个子集都可能会对有用的构造块进行编码,当我们将两个字符串进行交叉时,这些构造块会聚集到一起,形成一大块构造块,反过来这个大构造块又会变成“磨坊中的谷物”。霍兰德喜欢用警方提供的画像来解释构造块的力量。在计算机还没出现的年代,警局的拼图师能够很快将嫌疑人的画像拼在一起,方法就是在采访中让目击者从画有典型嘴型的一组纸带中挑选嘴巴,然后用同样的方法选出眼睛、鼻子、下巴等。只有10个构造块,每个构造块有10个选择,这个系统会虑及100亿张脸,比地球上的总人口还要多。

在机器学习中,和计算机科学的其他领域一样,没有什么比得到这种对你有利而非有害的组合爆炸更好的东西了。遗传算法的灵活之处就在于,每个字符串都暗含指数数量的构造块,被称为“基模”,因此该研究比它看起来的还要高效得多。这是因为字符串比特的每个子集都是一个基模,代表可能合适的性能组合,而一个字符串有指数数量的子集。我们可以用这样的方法来代表基模,也就是用“*”来代替字符串中不属于该字符串的比特。如110这个字符串中包含以下基模:***、***0、1**、*10、11*、1*0,以及110。每选一个不同的比特,我们就得到一个不同的基模,因为每个比特我们有两个选择(包含或不包含),那么我们就有2n个基模。相反,在群体中,一个特定的基模可能由许多不同的字符串来表示,而且每当这时,这些基模都会受到隐式评估。假设在下一代中仍成立的概率与其适应度成正比,那会怎样?霍兰德表明,在这种情况下,和平均值相比,在某代中表示基模的字符串适应度越高——我们能期望的——在下一代中看到这些表示字符串的数量也越多。那么,虽然遗传算法暗地里对字符进行操纵,它也会找到基模更大的可能性。随着时间的流逝,适应度更高的基模会主导群体,所以不像醉汉那样,遗传算法能找到回家的路。

机器学习中最重要的问题之一(也是关于生命最重要的问题之一),就是探索—利用困境。如果已经找到能发挥作用的东西,你还会继续找吗?还是做新的尝试会更好,知道这样可能会浪费时间,但也许会找到更好的办法?你想做牛仔还是农民?想自己开一家公司,还是管理一家已经成立的公司?想用情专一,还是三心二意?中年危机意味着把多年的时间花费在利用某种东西之后,会极度渴望探索新事物。一时冲动之下,你飞到拉斯韦加斯,准备赌光你毕生的积蓄,变成百万富翁。你进入赌场,然后面对一排老虎机。你要在能给你平均回报最多的那台机器上玩,但你不知道是哪台。那么你就得每台都试,次数够了才能弄明白。但如果花太多时间来做这个,你就把钱浪费在会输的那台机器上。相反,如果操之过急,选了一台前几轮碰巧让你手气不错的机器,但实际上并不是让你获得回报最多的一台,那么今晚剩下的时间你就会把钱浪费在这台机器上。这就是探索—利用困境。每次你玩的时候,要么你就选择重复目前为止发现的最好的一把,这样就能给你最好的回报,要么就试试其他几把,这样能够让你知道怎样才能赢得更多。利用两台老虎机,霍兰德表明最优策略就是每次抛一个偏币,在这个策略中,随着你进行这些步骤,和原来的硬币相比,这时的硬币会呈指数偏倚(如果这种方法对你不起作用,别指控我。记住最后赢的总是赌场)。一台老虎机看起来越好,你就越应该玩它,但也别完全放弃另外一台,毕竟另外一台也有可能会让你赢得更多。

遗传算法就像一群赌徒中的元凶,同时在市里的每个赌场玩老虎机。如果两个基模包含相同的比特量而且至少有一个比特的值不同,那么这两个基模就会互相竞争,例如*10和*11,而n个互相竞争的基模就像n台老虎机一样。每个互相竞争的基模集都是一个“赌场”,遗传算法会同时弄清楚每个“赌场”中会赢的机器,依据的是最优策略:以成倍增长的频率去玩看起来赢得越来越多的机器。太聪明了!

在《银河系漫游指南》中,外来种族为了回答终极问题,造了一台巨大的超级计算机,过了很长时间,计算机吐出“42”这个数字。但这台计算机还指出,外星人不知道问题是什么,所以他们又造了一台更大的计算机来弄明白这个问题是什么。这台计算机(也称“行星地球”)很遗憾地在持续了几百万年的计算,即将完成的几分钟前,被摧毁了,因为要为空间高速公路让路。现在我们只能猜那个问题是什么了,可能会是:你打算玩哪台老虎机?

程序的适者生存法则

在开始的几十年,遗传算法的阵营主要由约翰·霍兰德、他的学生、这些学生的学生组成。大约在1983年的时候,遗传算法解决的最大问题就是学会控制天然气管道系统。不过,大概同样的时间段,神经网络回归了,人们对进化计算的兴趣也开始浓厚起来。关于遗传算法的第一次会议于1985年在匹兹堡举行,遗传算法的寒武纪大爆发也正在进行中。其中的一些变体尝试更加接近地模拟进化(毕竟基本遗传算法仅对进化进行了非常粗略的模拟)而其他变体则从不同方向模拟,利用让达尔文困惑的计算机科学概念来跨越进化论观点。

霍兰德的学生中较为出色的是约翰·科扎。1987年,他在意大利参加会议,飞回加利福尼亚时,有一瞬间他突然醒悟了。我们要不要对成熟的计算机程序进行进化,而不是发展相对简单的东西,如“如果……那么……”规则以及天然气管道控制?如果那是目标,为什么还要继续用字符串来表示呢?程序就像是一棵子程序调用树,所以最好还是直接穿过那些子树,而不是将它们硬塞到字符串中,而且当你随机取点穿过这些子树时,会冒着将很好的程序摧毁的风险。

例如,假设你想进化一个程序,根据行星到太阳的距离D来计算该行星的运行周期T。根据开普勒第三定律,TD的立方的开平方,乘以一个常数C,该常数的值取决于你使用的时间和距离单位。遗传算法应该像开普勒那样,通过查看第谷·布拉赫关于行星运行的数据,就可以发现这个规律。在科扎的方法中,DC是程序树上的叶子,而将其结合起来的运算,比如乘法运算和求平方根运算,就是内部节点。以下程序树能准确计算出T(见图5–2)。

科扎称他的方法为“遗传编程”,在这个方法中,我们通过随机交换程序树的两棵子树,来对两棵程序树进行交叉。例如,将这两棵树的高亮节点交叉,就会产生能够计算出T的程序,这个程序为其中的一棵子树(见图5–3)。

阅读 ‧ 电子书库

图5–2

阅读 ‧ 电子书库

图5–3

我们可以测量程序的适应度(或缺乏适应度),方法就是通过其输出值与训练数据中的准确值之间的差距来判断。例如,如果程序说地球的周期是300天,这就意味着要从其适应度中减掉65。以一群随机程序树作为开头,遗传编程利用交叉、变异、生存来渐渐进化出更好的程序,直到满意为止。

当然,计算行星的周期是一个很简单的问题,仅仅涉及乘法和平方根运算。一般情况下,程序树包含全面的编程结构,例如“如果……那么……”陈述、循环、递归。更能解释“遗传编程用来做什么”的例子就是,弄明白机器人需要按照什么顺序来行动,以达到某个目标。比如我让办公机器人从走廊的柜子里拿一个订书机。机器人可进行大量的动作,例如,走到走廊中、开门、拿起某个物品等。这些动作反过来可以由各种小动作组成,比如机器人的手向物品移动,或者在各种不同的点抓住物品。每个行为是否可能会被执行,取决于之前行为的结果,也可能需要被重复多次等。这个挑战在于要组合这些动作和子动作的正确结构,以及每个动作的参数,例如,手要移动多长的距离。机器人的“原子性”动作以及每个动作的结合为开端,遗传编程能够组合一个复杂的动作,并达到理想目标。通过这种方法,许多研究人员已经为机器人足球运动员制定了策略。

对程序树而不是字符串进行交叉得出的一个结果就是,生成的程序可以任意大,这让学习活动变得更加灵活。然而,整体的趋势就是会变得膨胀,因为随着进化持续的时间变长(也称为“适者生存”),树也会越长越大。演化新论者可以从这个事实中获取安慰:人类编写的程序之间并没有什么不同(微软的Windows系统:4500万行的代码和计算),而且人造代码也不会允许这样一种简单的方法:将复杂性处罚添加到适应度函数中就可以了。

遗传编程的第一次成功是在1995年,也就是成功设计了电子电路。以一堆电子元件为开端,例如,晶体管、电阻器、电容器,科扎的系统为了一台低通滤波器,彻底改造之前的一个专利设计(这是一个电路图,其用途之一就是加强舞蹈音乐中的低音)。自那以后,他就开始对专利设备进行改造,成打地改造出其他设备。下一个里程碑于2005年到来,当时美国专利及商标局为一项专利颁奖,该专利根据遗传学设计,是工厂的优化系统。如果图灵测试愚弄的是专利审查员而不是谈话高手,那么2005年1月25日,就是一个可载入史册的日子。

科扎的自信在这样一个不以谦逊著称的领域显得尤为突出。他将遗传编程当作一台会发明东西的机器,当作21世纪的硅版爱迪生。他和其他演化新论者相信,它可以掌握一切程序,这让他们进入了终极算法的争夺赛中。2004年,他们创立一年一度的“人类竞争奖”(Humie Awards),来认可“人类竞赛”相关的遗传编程创作。迄今为止,已经颁发39个奖项。

性有何用

尽管他们取得了成功,也对诸如渐进主义与间断平衡的问题发表见解,但遗传算法还有一个很大的谜团没有解开:性在进化过程中所起的作用。演化新论者非常重视交叉行为,但其他学派的成员认为没有必要如此麻烦。霍兰德没有哪个理论结果表明,交叉行为能起作用。经过一段时间,突变足以成倍地增加群体中最适合留下的基模的频率。而“构造模块”的直觉很吸引人,但很快就会遇到麻烦,即使用上遗传算法也没用。随着模块演变得越来越大,交叉行为也会越来越趋向于将这些模块解散。还有,一旦适应力强的个体出现,其后代很有可能快速掌管该群体,并有可能将更好的基模挤出,这些基模受到整体上不那么相配的个体的牵绊。这有效减少了研究适应度冠军变化的工作量。研究者已经找到许多方案,能够保存群体中的多样性,但研究结果还不确定。工程师们当然广泛应用构造模块,但将这些构造块结合起来就会在很大程度上涉及工程学的内容。这不是用旧办法把它们丢在一起那么简单,也不是明显的交叉行为就能取得成功的。

消除性别对于演化新论者来说,就只剩下变异作为其理论的推动力。如果群体的规模大体上比基因的数量大,很有可能每个点突变都已体现在其中,而研究就变成爬山法的一种:尝试所有可能的单步变种,挑选最好的一个,然后重复这个步骤(或者挑选几个最好的变种,这种情况就被称为“定向搜索”)。应特别指出的是,符号学派一直用这种方法来掌握规则集,虽然他们不把它当成进化的一种形式。为了避免陷入局部最大值的陷阱,爬山法可以通过随机性(以某个概率做下坡移动)和随机重启(过一会儿后,跳到随机状态,然后从那儿继续)来得到加强。这样做已经足以找到解决问题的好办法。为其添加交叉行为是否能证明额外计算成本的合理性,这有待回答。

没人知道为什么性别在自然界中无处不在。人们已经提出几个理论,但没有一个被广泛接受。这方面的领先理论是“红皇后”假说,马特·里德利在同名书中向人们介绍该理论。在《爱丽丝镜中世界奇遇记》中,红桃皇后对爱丽丝说:“全力奔跑,这样你才能留在原地。”依照这个观点,有机体和寄生虫就会永远处在竞赛中,而性可以保持群体的多样性,这样单一微生物就不会感染整个群体了。如果这就是答案,那么性就和机器学习不相关,这至少持续到掌握的程序因为处理器时间和内存而与计算机病毒进行抗战(有趣的是,丹尼·希利斯称,有意将共同进化的寄生虫引入遗传算法中,可以帮它避免局部最大值困境,方法就是逐步加大难度,但还没有人继续采用他的观点)。赫里斯托斯·帕帕季米特里乌和同事表明,性优化的不是适应度,而是他们所谓的“混合度”:当与其他基因结合时,一个基因表现出平均水平良好的能力。就像自然选择一样,当适应度函数要么不是已知,要么不是常数时,这个说法会起作用。但是在机器学习和最优化中,爬山可能会做得更好。

遗传编程的问题不会就此结束。的确,虽然它获得的成功可能不会像演化新论者希望的那样和遗传有很大联系。以电路设计为例,这就是遗传编程成功的典型。作为一种规则,即使相对简单的设计也需要大量的研究,而且也不知道,得出的结果多大程度上归功于蛮力强攻而不是遗传学智慧。为了回应越来越多的批评者,科扎1992年的书《遗传编程》(Genetic Programming)包含的实验表明,遗传编程在布尔电路合成问题上打败了随机生成备选项,但胜利的优势很小。接着,1995年在加利福尼亚太浩湖举办的机器学习国际会议(ICML)上,凯文·朗发表了一篇论文,论文表明爬山法在相同的问题上打败了遗传编程,而且胜利的优势很大。科扎和其他演化新论者已经不断尝试在ICML上发表论文,因为这是该领域的重要会议,但让他们越来越感到挫败的是,因为经验验证不足,他们不断遭到拒绝。论文被拒已经让科扎感到失落,看到朗的文章,更让科扎感到气急败坏。在短时间内,他以ICML的两栏格式,整理了一篇23页的论文,反驳朗的结论,并控诉ICML评审员的科学不端行为。他接着在会堂的每个位置都放了一份论文复印件。依据你的观点,不是朗的论文,就是科扎的回应成为最后一根稻草。不管怎样,太浩湖事件标志着演化新论者与机器学习阵营中其他流派最后的决裂。遗传编程员开始举办自己的会议,这些会议与遗传算法会议合并,成为“遗传与进化计算会议”(GECCO)。对于演化新论者这部分,机器学习主流学派已经很大程度上把他们忘记。这是一个悲伤的结局,但在历史上并不是第一次,性是决裂的原因。

性在机器学习中可能还未取得成功,但作为一种安慰,它已经在技术的发展中起到重要作用。色情描写是万维网中未公开承认的“杀手级应用”,更别说它在印刷、摄影、视频领域就更受欢迎了。振动器是第一台手持电子设备,预示着一个世纪之后手机的出现。小型摩托车在战后的欧洲,特别是在意大利受到欢迎,因为它们能够让年轻的夫妇离开家人。100万年前,当直立人发现火时,其中的一个“杀手级应用”当然是便于约会。同样肯定的是,“拟人化”机器人变得越来越真实,其主要推动力是性爱机器人行业的发展。性似乎才是最后的结局,而不是技术演化的手段。

先天与后天

演化新论者和联结学派重要的共同点是:他们都因为受到自然启发而设计了学习算法,不过后来分道扬镳了。演化新论者关注的是学习架构,对他们来说,通过参数优化来对演化的架构进行微调,这是次重要的事情。相反,联结学派更喜欢用一个简单、手工编写的结构,加上许多连接行为,然后让权值学习来完成所有工作。这就是机器学习版本关于先天和后天的争论,而且双方都有很好的论据。

一方面,进化已经产生许多神奇的东西,但没有什么比产生你更神奇的了。有或者没有交叉行为,进化结构都是终极算法的基本部分。大脑可以学习任何东西,但终极算法却无法使大脑进化。如果彻底了解大脑的结构,就可以将其运用到计算机硬件中,但我们还远远做不到这一点。通过计算机模拟进化寻求帮助是一件容易的事情。另外,我们也想对机器人的大脑、装有任意传感器的系统、超级人工智能设备进行进化。如果有更好的东西来完成这些任务,我们就没有理由继续使用根据人类大脑设计出来的设备。另一方面,进化的过程缓慢到让人难以忍受。一个有机体的一生只会产生一条与其基因组相关的信息:它的适应度,反映在后代有机体的数量上。这简直是在浪费大量的信息,神经学习会通过在使用的点上(可以这么说)获取信息来避免这个问题。正如联结学派的杰夫·辛顿指出的那样,基因组携带的信息没有什么优势,因为我们可以从感知中获取这些信息。当新生儿睁开眼睛时,感知世界会涌入大脑,而大脑只需组织这些感知。然而,基因组中需要确定的信息是,完成这些组织工作的“机器”的结构。

在先天与后天之争中,两方都没有完整的答案,关键在于找到如何将两方结合起来。终极算法既不是遗传编程,也不是反向传播,但它得包含这两者的重要部分:结构学习和权值学习。在传统观点看来,先天自然完成第一部分(进化大脑),后天培育再将大脑填满信息。我们可以在学习算法中重复这个过程。首先,学习网络的结构,利用爬山法(举个例子)来决定神经元之间如何连接:试着将每个可能的新连接添加到网络中,保持那个最能提高性能的连接,然后重复这些步骤。之后利用反向传播来学习连接权值,那么你全新的大脑马上就可以使用了。

如今在自然和人工进化中,都存在一个很重要的微妙之处。我们会为每个备选的结构而不仅仅是最终的那个,而一直学习权值,目的是为了明白这些结构在生存竞争(在自然情况下)以及训练数据(在人工条件下)中的表现如何。在每一步中,我们想选择的结构,是在掌握权值之后(而不是之前),表现最好的那个。因此,实际上,先天自然并不一定会排在后天培育之前。它们是互相交替的,每轮中的“培育”学习会为下一轮的“自然”学习做好基础,反之亦然。因为后天的培育,先天也会得到进化。皮质关联区域的进化在感知区域依赖于神经学习,没有神经学习,它就会变得毫无用处。小鹅跟着妈妈到处走(进化的行为),但得首先认识妈妈(通过学习掌握的能力)。如果它们孵化出来时第一个见到你,就会跟着你走,正如康拉德·洛伦茨明确表明过的那样。新生大脑已经对环境的特点进行编码,但不是很明显,进化过程会将大脑优化,从预期的输入信息中提取那些特点。同样的道理,在交替学习结构和权值的算法中,每个新结构都暗中成为前几轮掌握的权值的函数。

在所有可能的基因组中,很少有基因组和活性有机体对应。因此典型的适应度“地形”就由广袤的“平原”组成,偶尔有几座“尖峰”,这让进化变得十分困难。如果你从堪萨斯州出发,蒙住眼睛,你就不知道通往落基山脉的路在哪里,那么偶然撞上山脚并开始往上爬之前,你很长一段时间都是在晃悠。但如果你把进化和神经学习结合起来,有趣的事情就发生了。如果你在平地上,距离山脚不是很远,网络学习会帮你到达那里,距离山脚越近,它越有可能帮你。它就像有环视功能一样:在威奇托,它帮不上你,但在丹佛,你会看到远处的落基山脉,然后往那个方向走。丹佛现在看起来就比你之前蒙住眼时看起来的要适应得多了。净效应会将适应度顶峰加宽,这样你从之前艰难的地方出发,找到通往这些峰顶的路就成为可能,就像图5–4中的A点。

阅读 ‧ 电子书库

图5–4

在生物学中,这称作“鲍德温效应”,该效应是以J·M·鲍德温的名字命名的,他于1896年提出这个概念。在鲍德温进化中,初次掌握的行为,之后会变成天生的本领。如果像狗一样的哺乳动物能学会游泳,那么它们进化成海豹的可能性会比淹死的可能性更大。选择个体学习可以影响进化,不必依赖拉马克学说。杰夫·辛顿和史蒂芬·诺兰论证了机器学习中的鲍德温效应,方法就是利用遗传算法来进化神经网络结构,并观察到只有个体学习被允许时,适应度才会随时间增加。

谁学得最快,谁就会赢

进化寻求好的结构,而神经学习则填满这些结构:这样的结合是我们走向终极算法最简单的一步。先天与后天之争是无休止的波折,这个波折持续了2500年,且争论会越来越激烈,对于熟悉这一点的人来说,这可能就像一个惊喜。然而,通过计算机的眼睛来看待生命能够将很多东西进行分类。“自然”对计算机来说就是它运行的程序,而“人工”则是获取的数据。“这两个哪个重要”这样的问题明显有点荒唐。没有程序和数据,就没有输出信息,比如也没有这样的说法:60%的输出信息由程序得出,另外的40%由数据得出。熟悉机器学习,会让你摆脱这种线性思维。

另外,你也许想知道,都到这点了,为什么我们还没有完成目标呢?如果我们把自然的两个主算法——进化和大脑——结合起来,我们当然就可以这样问。遗憾的是,目前我们只是大概知道自然如何学习,对许多应用来说已经足够,但对于真实的东西来说,还只是灰蒙蒙的影子。例如,胚胎发育是生命的重要组成部分,但在机器学习中,就没有和胚胎对应的类似物:“有机体”是基因组非常简单的功能,而我们可能忽视了重要的东西。另一个原因就是,即使已经弄明白自然如何学习,我们也不会满足。一方面,这个过程太缓慢。进化需要数十亿年来进行学习,而大脑需要一辈子。文化会好些:我可以花一辈子时间来学习一本书,而你可以几个小时把它读完。但学习算法应该有在几分钟或几秒钟内掌握知识的能力。谁学得快,谁就赢了,无论是加快进化速度的鲍德温效应、语言交流促进人类的学习效果,还是计算机以光的速度发现模型。机器学习是地球上生命之间竞争的最新篇章,更加快速的硬件只是等式的一边,另一边是更加智能的软件。

最重要的是,机器学习的目标是尽可能找到最好的学习算法,利用一切可能的方法,而进化和大脑不可能提供学习算法。进化的产物有很多明显的错误。例如,哺乳动物的视觉神经和视网膜前端而不是后端相连,这样会引起不必要的(而且异乎寻常的)盲点,就在中心凹旁边,而这里是视觉最敏锐的地方。活细胞的分子生物学原理非常混乱,分子生物学家常常自嘲道,只有对分子生物学一点也不懂的人才会相信智能设计。大脑的构造很有可能有相似的错误(大脑有许多计算机没有的限制,比如非常有限的短期记忆),而且没有理由待在这些限制里。另外,我们听说过许多这样的情形,人类似乎坚持做错误的事情,正如丹尼尔·卡尼曼在他的书《思考,快与慢》里详细说明的那样。

与联结学派及演化新论者相反,符号学派和贝叶斯学派不相信“法自然”的说法。他们想从基本原理中找出学习算法该做什么,而且也包括我们人类。例如,如果我们学习如何诊断癌症,就说一句“这就是自然进行学习的方法,我们也照做”还不够。这其中有太多的利害关系,误差的代价就是生命。医生应该尽可能用最安全的方法来进行诊断,这些方法和那些数学家用来证明定理的方法相似,或者尽可能接近他们能掌控的水平(考虑到做到那样严谨有点不太可能)。他们需要权衡证据,目的是把诊断误差降到最小;或者更确切地说,误差的代价越大,他们犯错的可能性就越小(例如,未能找到确实存在的肿瘤,与诊断出其实不存在的肿瘤相比,可能要糟糕很多)。医生们得做出最优选择,而不是表面看起来不错的选择。

这是一个让人紧张的实例,贯穿科学和心理学的很多领域:是描述性理论与规范性理论之间的分歧,是“这就是它的样子”与“这就是它应该成为的样子”之间的分歧。然而,符号学派和贝叶斯学派想指出,弄明白“我们该怎样学习”也可以帮助我们了解人类如何学习,因为这两者大概不会完全不相关(远非如此)。特别指出的是,对于生存有重要意义、已经经历很长一段时间进化的行为应该就是最优的。我们不是很擅长回答关于概率的书面问题,但我们擅长快速选择手和手臂的动作来击中目标。许多心理学家已经使用符号学或贝叶斯的模型来解释人类行为的方方面面。符号学主导了认知心理学的头几十年。在20世纪八九十年代,联结主义者占支配地位,但现在贝叶斯学者的数量正在上升。

对于最困难的问题——我们真的想解决但没能解决的问题,例如,治愈癌症的问题——纯粹受到自然启发的方法要成功可能太无知,即使给定大量的数据也还是如此。原则上,我们可以掌握细胞新陈代谢网络的完整模型,方法就是结合结构研究,利用或者不利用交叉,通过反向传播来进行参数学习,但有太多不利的局部最优陷阱。我们得利用更大块的数据来进行推理,根据需要集合或重新集合这些数据,然后利用逆向演绎来填补空缺。要让这样的目标来引导我们的学习行为:以最优方法诊断癌症,然后找到治疗癌症的最佳药物。

最优学习是贝叶斯学派的中心目标,而且他们肯定自己已经找到了实现这个目标的方法。请看这里……