图 1:开放的环境与物种间的竞争是达尔文进化论中实现自然进化的两个重要的驱动力,而这两个驱动力在最近的 AI 模型演进方法的研究工作中却没有体现出来,在同一个世代中,更快的黑斑羚和更快的猎豹比它们更慢的同类更容易生存下来——由此进化出更快的黑斑羚和猎豹品种。基于基因和自然选择理论的这些原理可以帮助AI获得大的进步么?
一、简介
二、基因和自然选择
三、进化计算
进化策略
直接编码的基因算法
间接编码的基因算法
无限开放式进化(这是最有趣的部分)
本文未提及的其他方面
四、结论
五、参考文献
大概自 2012 年以后 [1],人工智能行业的爆发式增长几乎都是反向传播训练的(深度学习)神经网络模型所带来的。包括用于图形分类、自动语音识别、语言翻译、机器人以及能玩单人或多人游戏的自主智能体等领域的模型。
然而最近,研究者开始应用基于生物学进化机制的方法来构建模型。这种思路在深度学习时代之前就有了,但直到最近才发展到足以和反向传播训练的深度学习模型媲美的态势。
在这篇博客里,我们会聊到一些进化方法,对比它们与生物进化和有机发育的异同,并推断出他们最终将如何以甚至比传统深度学习模型更强大和更高效的方式推动 AI 模型的发展。
简单来说,达尔文理论认为,进化是机体特性经自然选择强化所发生的微小变化的结果。具有优势特性的有机体更容易繁衍下来,这样就淘汰了那些具有相对劣势特性的有机体。
达尔文当时并不知道这些特性是如何由父母辈遗传到下一代的(如果知道了这一点,他的发现就更加了不起),但我们现在知道有机体的基因型,以及它生存发展的外界环境共同决定了它的表现型(物理和行为特性)。一般来说,后代出现了新基因型是因为遗传自父母的 DNA 发生了随机突变,或是多个来源的基因混合(有性生殖),或是两者兼而有之。
受进化论的启发,科学家们对生物进化的理解迁移到了计算模型的优化上。其中最简单的方式是进化策略(evolution strategies),更大、更多样化的复杂模型则采用基因算法(genetic algorithms)。这两种方法都是通过优化适应度函数来显性地评估人工有机体在特定任务上的表现。另一种可替代的方法是,摒弃适应度函数,而选择利用丰富、开放的环境,让超过一个种类的多个智能体在该环境中为生存和繁衍而独自竞争,利用自然选择挑选出最终存活并繁衍下来的那个。
1、进化策略
进化策略是这样一类优化算法:在每一次迭代(代际传递)中,参数向量(基因型)都会受到扰动(突变),变化后的适应度函数会被再次评估打分 [2,3]。最高得分的参数向量会参与形成下一代的参数向量,不断迭代直到目标方程已被充分优化。
在协方差矩阵适应性进化策略中(Coveriance-Matrix Adaptation Evolution Strategy,CMAES),模型参数的分布会存储在协方差矩阵中。每一代中,每个样本的模型参数都取值于这个分布。协方差矩阵会根据获得最高适应度得分的样本参数更新矩阵。大家如果想看到这一过程的 2D 可视化效果,可参考 Otoro 的博客:http://blog.otoro.net/2017/10/29/visual-evolution-strategies/
尽管这一方法的原理很简单,它与相对现代、大规模,经过强化学习训练的深度学习模型相比仍十分有竞争力,OpenAI [4] 就体现了这一点,并且相关的文章(https://openai.com/blog/evolution-strategies/)中也对此有论述。
与强化学习方法相比,进化策略有一些非常好的属性,它在多核CPU 上更容易实现并扩展,还能快速地完成模型训练,并且这种方法没有借助梯度(使用梯度方法较难在离散输出结果上训练)。
图 2:上图演示的是OpenAI应用进化策略训练的3D小人学习行走的情况(视频来源于博客blog post)。优化后的训练结果,也就是优化收敛到的最小值呈现了较大的多样性。在本文后续会介绍到,训练得到的智能体的移动方式看上去都不太自然,它们无法像自然中的生物一样,在出生后不久就能习得诸如行走、奔跑之类的运动能力。
2、直接编码的基因算法
对于基因算法(Genetic Algorithm)这个术语,不同的研究者和实践者可以有很多不同的定义。我们这里采用最常见的一种是,在每代中,算法: 1)从一个规模 P 的种群中,基于适应性函数选出表现最好的 N 个智能体(N<P),2)让筛选出来的这些智能体通过自我繁殖(无性)或配对繁殖(有性)产生新一代智能体, 3)在繁殖过程中,后代的基因会因突变、交叉(父母辈基因的混合)或是两者的共同作用而产生变化。
进化策略与基因算法的另一个区别是在进化策略中,种群的基因组是用概率分布表示的。这也就意味着在指定某代的某个种群中的所有成员都落在参数(基因组)空间中的同一个类中,相反,在基因算法中就没有这种限制。而实际情况是,单个种群往往只进行其优势特性的进化,除非环境或者是有其他算法组分来推动种群的多样性(这种情况下,多个「种族」就会产生)。
而在基因算法的诸多应用中,基因型-表现型是直接对应的,也就是说每个基因都直接由智能体的模型参数进行编码。实际应用中,基因和它的外在表现型也是直接对应的,比如,深度学习模型中用数值表示权重或偏置项。因此,进化策略训练的模型可以直接编码。
相反,生物学是基于间接编码的。举例来说,由 DNA 组成的基因并不对大脑中神经元间的突触强度进行编码,而是对那些共同指导大脑(和它的突触)发育的蛋白质进行编码,并根据有机体的经验,学习选择强化或是弱化哪些突触的机制。我们会在后续的文章中介绍一些 AI 间接编码的例子。
2017 年,Ken Stanley 和 Jeff Clune 两位是长期推崇使用「神经进化主义」方法进化神经网络参数的倡议者,他们称直接编码的基因算法在很多 Atari 游戏中都有良好的表现,包括那些强化学习(Q-learning 或策略梯度)方法也难以玩好的游戏 [5]。他们的团队在 Uber AI 实验室使用了一个简单的基因算法,这个算法中,通过在母网络参数中加入高斯噪音,就可将基因突变引入自我繁殖后代进程中。
图 3:除了让智能体通过玩Atari游戏进行进化,Uber AI团队还让智能体试着完成相对初级的迷宫游戏,只不过是让一个智能体玩两个有不同陷阱的迷宫。应用进化策略ES训练的智能体被困在陷阱1里且没有继续进化。经过基因算法GA训练的智能体表现更好一些,但还是被困在了陷阱 2 里。当同时根据适应性得分和智能体所表现出的探索性行为(GA-NS)挑选可继续繁殖的智能体时,智能体很快进化出了解谜的能力。而应用强化学习方法(A2C和DQN)训练的智能体就没有习得解谜的能力。
Uber 团队还检验了奖励智能体(允许他们繁殖)的探索行为(Novel Behaviours)产生的效果。他们称,尽管智能体在传统适应性函数中都得分较低,但这个方法对整个种群的代际传递表现还是有帮助的。给行为的新颖度赋分的基因算法是一种质量多样性算法(Quality-Diveristy Algorithm)[6],该算法还是一个活跃的研究领域,它的理念是维持种群内行为的多样性,为新的、更复杂行为的出现提供了一个培养池,这有益于后代有机体的发展,尽管复杂行为在形成之前还会有更多得分很低甚至得负分的简单行为出现。(注意:这很大程度上是一种启发式策略,因为在代际传递中,自然力将如何推动这些保留下来的「无价值」行为表现型进行进化,还尚未明确。)
总之,Uber 团队使用了一种充满创造力的高效方法,来保存数以千计的智能体涵盖的大规模基因型(每个智能体有几百万个神经网络参数)。换言之,他们留存了这些创造了初代智能体和各种突变集的种子记录。因此,单个智能体就可以用一个种子向量实现再生,智能体也可以这种形式作为整体被保存下来,而不再直接以模型参数的形式储存。
3、间接编码的基因算法
一般来说,间接编码模型的基因算法在应用上还不如直接编码模型成熟(尤其在解决现代大规模的问题上)。然而间接编码模型在未来或许会被证明是一种非常有力的方法,因为它具有对复杂、繁琐模型编码的潜力。举例来说,有机体内的某个基因组一般是确定的,但基因的蛋白质产物可以在一段时间和空间(有机体内)中以组合形式进行交互,这就允许了无限种可能性的发生。下面我们重点说两个间接编码的例子。
HyperNEAT
之间谈到过的进化计算方法有一个固定大小的基因组,也就是说是一个有着固定架构的神经网络。基因决定了这个固定架构的参数值,但并没有规定其他的方面,因此该基因算法并没有规定神经网络长大、缩小或是调整架构的途径。2002 年,Stanley 和 Miikkulainen 引入了增强拓扑的神经进化方法(NeuroEvolution of Augmenting Topologies,NEAT)[7],NEAT 定义了基因与神经网络中的连接的映射关系,并支持通过加入定义新连接和节点的「新基因」来实现神经网络的进化。
图 4:除了定义网络权重和偏置项值,NEAT 还定义了基因与网络架构的映射规则。基因算法中,网络可以通过添加连接和节点发展。
然而,NEAT 是一种直接编码模型,每个基因定义两节点之间的连接权重。一些基因可能会表现出「残疾」的情况,也就是转码后的权重值为 0 的情形。HyperNEAT 于是应运而生。
在 HyperNEAT 中,NEAT 训练输出的网络定义了次级网络的权重。这个次级网络被用来运行相应的任务。在最简单的版本中,次级任务网络中的节点是落在二维空间中的,因此每个节点都可以用(x,y)坐标来定义。初始生成的第一个网络,被称为是复合模式生成网络(CPPN),需要四个输入值来定义网络中两个节点的位置(i 和 j):(xi,yi)和(xj,yj)。CPPN输出的则是网络中任意两点间连接的权重值。由此推之,NEAT方法可以通过进化CPPN网络,指导任务网络的“发育”。之后,适应性函数会对该任务网络而不是 CPPN 进行评估。
HyperNEAT 方法中,一个较小的 CPPN 网络就可以定义一个任意密度的复杂任务网络。作为 CPPN 的这种进化性的体现,已进化出可以生成复杂二维图片的模型。与进化任务网络总是落后于其他新近模型的情况不同,HyperNEAT 已被应用在训练模型玩 Atari 游戏上 [9](几乎是同一时期,DeepMind 也公布了强化学习方法训练的此类模型 [10])。
图 5:在这个 HyperNEAT 实例中,任务网络(右边)是一个双层网络,这个网络中的神经元在上下两层间建立了连接,但层内并没有任何连接。CPPN 网络(左边)在给定任务网络节点的基础上,定义了任务网络连接的强度。CPPN 是一个由 NEAT 基因-网络映射关系定义的神经网络,并可以根据适应性函数对给定 CPPN 实例进化出的任务网络的打分,应用基因算法进行进化。
有机体发育
生物学上的进化并不会直接建立成熟有机体的表现型。而是通过基因指导个体的发育间接地建立有机体的表现型(如胎儿期、婴儿期、青春期)。基因在成年期也会作用于个体对环境的反应(比如,在有机体由低海拔地区转移到高海拔地区时,有机体内会产生更多的红细胞)。然而,NEAT 神经网络群体在进化时,这些网络并不是由基因组「生长」出来的,相反,由于 NEAT 网络是直接编码,它的网络进化也是直接由范例定义的。
研究者如 Jordan Pollack 和他的前博士后,Sylvain Cussat-Blanc,共同发现了将有机体的发育阶段原理吸收进来的进化计算方法。在 2015 年的研究中 [11],他们应用近似于 NEAT 的基因算法进化出了基因调控网络(Gene Regulatory Networks,GRNs),GRNs 是一种通过基因(以及未组成基因的 DNA、RNA 和蛋白质)间的相互作用调控基因表达(转译蛋白质)的神经网络。不同的基因会在不同的发展阶段,在不同的环境条件中得以触发表达出来。因此,进化的不是有机体本身,而是有机体发育的方式。作者在文中表明了该算法相较于标准基因算法的优势。然而,由于该算法计算复杂度太高,导致其不太可能在现有硬件条件下,被应用到更大规模,更具挑战性的现代 AI 任务中。
图 5:相比于由基因组直接编码神经网络(比如NEAT),Pollack 和他的同事 [11] 选择应用可以调控神经网络发展的基因控制网络来调控网络的进化,这种方法更类似于生物学上的基因指导人类由胚胎期发育至成人期的机制。
最近,Miller 等 [12] 构建了神经网络中的神经元(组织细胞和它们的树突)发展模型。这个发展模型是由基因编程形成的计算机程序展现。基因编程与基因算法之间有很大的区别,这就留待各位读者之后再去查阅其他相关资料。尽管如此,Miller 和他的同事成功地应用进化计算方法创建了一种可以有效搭建神经网络的发展模型,这点毋庸置疑,该神经网络可以生成新的树突和神经连接来学习新任务。
4、开放式进化
到目前为止,我们讨论了应用适应性函数来给单个智能体的表现打分,并以此为依据来决定谁来繁殖后代的进化方法。很显然,自然界中没有显性的适应性方程(但,其实是有隐性逆向适应性方程的,如果有机体 X 繁殖了较有机体 Y 更多的后代,那么有机体 X 更有可能具备更强的适应性。)也就是说,自然界进化出了极其智慧的物种(人类),也进化出了具备其他独特迷人的物理特性以及天生行为特质的种群,而这一切都是在没有任何外在引导下完成的。
这项发现鼓舞了人工生命以及开放式进化的研究领域。人工生命学指的是在真实环境,或是在镜像还原了自然环境的人工环境中生存的人工有机体的研究。研究者们应用这种途径来研究我们已知的、或是未知但可能出现的生命形态。开放式进化研究通常都会考虑人工生命研究中的人工有机体,观察这些有机体如何在类似于产生其他生物进化的环境条件下进化,换言之,开放式进化的研究对象是在开放环境中直接进行的繁殖活动(寻找配偶,获取足够的食物以存活或繁衍,逃脱天敌的捕猎,等等),而不是基于显性的适应性指标。
与深度学习相比,开放式进化还属于一个较小的研究领域,但它其实已经是个相当古老的领域了,该领域的先锋学者如 Charles Ofria,Jordan Pollack,Risto Miikkulainen,以及他们的学生(其中有些已经是该领域的领头人)已经在这个领域里上花费了数十年时间。对开放式进化的发展和繁荣的更详尽描述,请参见 Lehman,Stanley,Soros 的博客(https://www.oreilly.com/radar/open-endedness-the-last-grand-challenge-youve-never-heard-of/),以及 Jeff Clune[13] 的这篇论文(https://arxiv.org/pdf/1905.10985.pdf)。
人工有机体在开放式环境中的进化机制可以帮助 AI 智能体发展取得进步么?
我们相信答案是「可以」,但有两个前提条件:(1)种类的共同进化和(2)在丰富、多样化、动态的环境中进行进化。(对此问题的不同的观点请参见 Lisa Soros 的博士论文 [14] :https://stars.library.ucf.edu/etd/5965/).
针对第一个条件,环境中必须同时存在不同种类,具有差异化的需求和能力的智能体,这种情况下,物种的共同进化可能会进一步引申出物种间的协作——这是进化出人类这种级别的智慧生物的先决条件。共同进化作用不仅可以进化出越来越快的猎豹和黑斑羚,同时还可以进化出狼群中的智慧社群行为,正如 BBC 节目《 coordinated hunting in packs 》中所展示的那样。
节目视频地址:https://youtu.be/8wl8ZxAaB2E
视频注:部分因为共同进化作用,狼进化出了社群智慧,这让它们可以通过群体捕猎捕获体型远大于它们自身的动物,获得的食物可以让整个群体受益。
最近 OpenAI 的一项研究发现经过强化学习训练的智能体之间会产生复杂的交互行为,尽管它看上去更像是个“营养不良”的奖励系统。众所周知,奖励是基于团队表现而非个人表现裁定的——就像一群狼会因完成一次大型的捕猎获得更多的食物。
OpenAI 相关研究的展示视频地址:https://youtu.be/kopoLzvh5jY
视频注:在一开始,智能体对如何完成最基础的捉迷藏都毫无头绪。团队间的竞争是激发团队协作行为的驱动力。值得注意的是,这些智能体是用强化学习而不是进化计算方法训练的,而智能体团队间的竞争仍可以催生出探索性的复杂行为。
强化学习与进化计算间有个很重要的区别必须要在这里提一下。本质上讲,强化学习模型是对动物如何在后天进行学习的模拟,当动物的某个行为获得奖励时(获得食物、住所或者配偶等等),它们更倾向于重复这个行为,期待获得更多的好处。
然而,动物的许多能力都是源自进化,并在胎儿期或是降生后不久就能表现出来这些能力。举例说明,人类天然具备「客体」的感知能力(但尚不具备对「客体永久性」的认知),婴儿不需要学习就知道在空间上近距离排列的「像素」(视网膜上的光子)更有可能同为某个物体的一部分。一个解释先天性的极端例子是,一些动物可以在出生之后(几分钟内)迅速掌握复杂的运动控制能力。生物有机体与生俱来许多能力。
深度学习模型则大多是从头开始训练(宛若一张“白板”),并且都是面向某个专门的应用进行针对性训练的。构建具备更为通用的、更接近真实世界所需能力的 AI 智能体,或许可以首先从进化出诞生之初就具备了基准知识体系(物理学、情绪、基础需求等等)的智能体开始。这些智能体可能会通过强化学习机制(理想情况下,该机制可能会进化为智能体一种先天能力,比如元学习能力)在「有生之年」继续学习如何完成特定的任务。
相关视频观看地址:https://youtu.be/rJJfigOA9zY
视频注:幼年羚羊在出生后几分钟内就具备了敏捷的肌肉控制和导航能力。进化赋予了它们对重力、物理、客体的先天意识以及高级的感觉运动控制系统。它们不需要强化学习系统来学习这些概念和能力。
正如前文指出的,进化出智慧智能体的第二个前提条件是丰富、多样、动态的环境。这样的环境包含了各种不同的时间和空间条件,某些基因突变会在恰当的生态条件得以留存下来,但当环境固定不变时,后续的世代中这些基因突变就会被淘汰掉。再进一步说,突变后的、有利的表现型可能不仅在某个环境中有优势,它可能在另一个恰当的环境中也是有优势的,出现这种有机体系的原因可以是智能体自主移动到了新的环境,也可以是智能体所在的环境发生了改变。这也和我们前面在基因算法中讨论过的质量多样性方法有类似之处。
5、本文未提及的其他方面
除了上述已经提及的内容之外,我在这里还列出了一些智能体和智能体环境以及我们推测能够推动智能体进化出超过当下 AI 模型能力的基因算法的其他相关观点。其中列出的一些智能体类别,在条件支持的情况下能够顺其自然地进化,但也可能被直接利用来加速实现通用人工智能的终极目标。
智能体与环境
培养与长期发展阶段:督促智能体更多地关心无助的、处于发育期的后代可能会促进一系列社会行为的发展,比如社会互动、沟通交流(语言)、协作(父母间的,父母与子女间的,或是无亲缘关系的父母和子女之间的——培育一个孩子是劳师动众的一件事情),等等。
个体意识:智能体应该具备识别同种类的其他个体的能力(通过一类智能体基因组表达出的「视觉上的」或是其他形式的特点)。如果智能体能够互相识别,它们就可以将个体的行为与其本身联系起来,这有助于信任、协作、看护等行为的进化。(但同时也会产生不信任、欺骗和合谋)。
沟通媒介:环境应当允许智能体具备一些可以发展出一套沟通方法(一种语言)的形态。它可以是听觉的、视觉的,甚至触觉的。这对智能体进化出复杂的社会交互或协作行为来说是必要的。
基因和基因算法
组合基因的间接编码:利用基因间的相互作用生产更高阶的产品(比如,蛋白质,或是调控蛋白质产物)使得结构紧凑但能够高度充分表达的基因组的出现成为可能,与每个基因值对应唯一一个模型参数或表现特质的基因模型相比,前者可以更高效的完成进化。除此之外,这种组合作用的方式还可以限制由于基因突变或偶发事件导致的后代完全无法自立生活(花在仿真/评估上时间被白费)的可能性。
指导发展的基因:与之前所提到的相关,编码指导有机体发育的基因,而不是最终的成年有机体可能是更加集约,且更具进化潜力的方式(正如 HyperNEAT)。如果发育同样还受到基因间的相互作用以及环境的驱动,这就给基因带来了额外的筛选压力,可以更好地推动进化。
可在规模上进化的基因组:与行为简单的有机体相比,行为上复杂的有机体还可能要求更多基因来定义它们的表现型(或是它们的发育机制)。然而,一个具有小型基因组的简单物种,可能会较一个具有大型基因组的简单物种更快进化出复杂的行为。面对单个基因的选择压力,具有大型基因组的简单物种更脆弱,因为单个基因突变对大型基因组有机体的行为改变作用微乎其微,这就拖慢了进化的进程。
结构化筛选繁殖和死亡智能体的机制:在应用了适应性函数的算法中,典型的筛选机制是挑选出表现最好的智能体进行繁殖,并淘汰同世代的其他智能体。然而,在这种机制下,刚突变的可以给智能体提供适应性上的好处的基因可能仍会由于物种间的遗传漂变丢失掉。最近的研究 [15] 表明在一个智能体繁殖时,有策略地选择哪个智能体应被淘汰(结构化的「进化图谱」有对这种筛选机制的图示)对新的有益处的基因在物种间的传递有「放大作用」,并可同时降低有利基因丢失的概率。在丰富、开放式的环境里,这种结构可能正是环境间接施加影响的方式。
最近几年深度学习对于 AI 领域取得巨大进展所起到的作用是毋庸置疑的,相信未来还会有更多突破。但同时我们认为,过去一直处于替补地位的进化计算方法,最终能够在提升 AI 能力上实现能够与深度学习相媲美的飞跃——无论是以深度学习已取得的成果为基础,还是不借助深度学习成果基础,独立发展为全新的方法。
最后,我们推测进化计算方法将会极大提高 AI 的运算效率。基于现有的硬件平台进行智能体的进化,并合理设计从基因到指令的映射关系,筛选出可加速完成任务的智能体,由此在该硬件平台上逐渐优化智能体的性能。
1. Krizhevsky, A., Sutskever, I., and Hinton, G. E. ImageNet classification with deep convolutional neural networks. In NIPS, pp. 1106–1114, 2012.
2. I. Rechenberg and M. Eigen. Evolutionsstrategie: Optimierung Technischer Systeme nach Prinzipiender Biologischen Evolution. Frommann-Holzboog Stuttgart, 1973.
3. H.-P. Schwefel.Numerische optimierung von computer-modellen mittels der evolutionsstrategie.1977.
4. Salimans T., Ho J., Chen X., and Sutskever I. Evolution strategies as a scalable alternative to reinforcement learning. arXiv preprint arXiv:1703.03864, 2017.
5. Felipe Petroski Such, Vashisht Madhavan, Edoardo Conti, Joel Lehman, Kenneth O Stanley, and Jeff Clune. Deep neuroevolution: Genetic algorithms are a competitive alternative for training deep neural networks for reinforcement learning. arXiv preprint arXiv:1712.06567, 2017.
6. Justin K Pugh, Lisa B Soros, and Kenneth O Stanley. Quality diversity: A new frontier for evolutionary computation. Frontiers in Robotics and AI, 3:40, 2016.
7. Stanley, K. O. & Miikkulainen, R. Evolving neural networks through augmenting topologies. Evol. Comput. 10, 99–127 (2002).
8. Stanley, Kenneth O.; D』Ambrosio, David B.; Gauci, Jason (2009–01–14).「A Hypercube-Based Encoding for Evolving Large-Scale Neural Networks」. Artificial Life. 15 (2): 185–212.
9. Hausknecht, M., Lehman, J., Miikkulainen, R. & Stone, P. A neuroevolution approach to general atari game playing. IEEE Trans. Comput. Intell. AI Games 6, 355–366 (2014).
10. Mnih, V. et al. Human-level control through deep reinforcement learning. Nature 518, 529–533 (2015).
11. Cussat-Blanc, S., Harrington, K. & Pollack, J. Gene regulatory network evolution through augmenting topologies. IEEE Trans. Evolut. Comput. 19, 823–837 (2015).
12. Miller, J.F., Wilson, D.G., Cussat-Blanc, S.: Evolving developmental programs that build neural networks for solving multiple problems. In: Banzhaf, W., Spector, L., Sheneman L. (eds.) Genetic Programming Theory and Practice XVI, Chap. TBC. Springer (2019).
13. Jeff Clune. AI-GAs: AI-generating algorithms, an alternate paradigm for producing general artificial intelligence. arXiv preprint arXiv:1905.10985, 2019.
14. Soros, Lisa,「Necessary Conditions for Open-Ended Evolution」(2018). Electronic Theses and Dissertations. 5965. https://stars.library.ucf.edu/etd/5965.
15. Pavlogiannis A, Tkadlec J, Chatterjee K, Nowak MA. Construction of arbitrarily strong amplifiers of natural selection using evolutionary graph theory. Communications Biology. 2018;1(1):71.
雷锋网 AI 科技评论编译。雷锋网雷锋网