进化算法_差分进化算法图解

进化算法_差分进化算法图解神经进化正在复兴。主要的人工智能实验室和研究人员正在试验它,一丝新的成功点燃了更多的热情,能对于深度学习产生影响的新机遇正在出现。也许你在深度学习所有的激动人心的时刻并没有听到过神经进化,但它只是潜行

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

神经进化正在复兴。主要的人工智能实验室和研究人员正在试验它,一丝新的成功点燃了更多的热情,能对于深度学习产生影响的新机遇正在出现。也许你在深度学习所有的激动人心的时刻并没有听到过神经进化,但它只是潜行于表面之下,作为一个小的热情的研究社区的课题存在了几十年。现在它正伴随着大众对于它的潜力的了解而开始获得更多的关注。

简单来说,神经进化是人工智能和机器学习领域的一个分支。它力图触发一个和产生我们人类大脑类似的进化过程,只不过这个过程是在计算机里实现的。换句话说,神经进化试图开发通过进化算法去寻找进化神经网络的方法。

当我在上世纪九十年代末期第一次开始人工智能的研究的时候,关于可以在计算机里去进化大脑的想法和我想冒险的感觉产生了共鸣。在当时这还是一个不寻常的、甚至是很含糊的领域。但我对这个思想非常好奇而且也很有亲切感。结果就是我生命里的20多年都在思考这个主题,并和杰出的同事一起开发出了一系列的算法,比如NEAT、HyperNEAT和新颖性搜索(novelty search)。在本博文里,我希望能带给你神经进化的一些激动人心的部分,并对这个主题给出一些洞见,但不会有科学文献里那些让人头晕的术语。我也会部分采用自传回顾的视角来把我在这个领域里摸爬滚打的经历讲述一下。我希望我自己的故事能为更多的读者打开一扇探索在计算机里进化大脑的窗户。

深度学习的成功

如果你最近一直在跟踪人工智能或是机器学习领域,你可以已经听说了深度学习。要感谢深度学习,计算机已经在诸如图像识别和控制无人驾驶汽车(甚至是控制电子游戏的角色)这样的任务上接近或是有时超越人类的表现。这些成就已经帮助深度学习和人工智能从默默无闻的学术期刊里一跃出现在大众传媒上,并激发了公众的想象力。那么在深度学习的背后是什么使这一成功成为可能?

实际上,在深度学习的表面下是一个已经有几十年历史的技术的最新形式,它就是人工神经网络(ANN)。与很多AI领域里的思想一样,ANN也是来自生物学的灵感。对ANN来说,它是模拟人类的大脑。我们之所以选择大脑作为AI的灵感来源,是因为大脑是迄今为止唯一明确的智能载体。当我们想实现人工智能时,在某种程度上,模仿大脑应该是一个讲得通的思路。大脑的一个关键组件就是神经元。它是一个很小的细胞,可以通过连接想其他的神经元发送信号。当非常多的神经元彼此连接形成一个网络(正如大脑里就是这样),我们称之为一个神经网络。因此,一个ANN就是试图模仿类似神经元这样可以相互间发送信号的组件的集合。这就是在深度学习里面的“深度网络”背后的机理。

ANN的研究人员通过程序来模拟这些神经元以及在他们中间传输的信号,获得了一个比较模糊的模拟大脑里发生的事情的过程。当然,这两者间是有着非常多的不同的。但真正的挑战是,仅仅只是简单地把一堆类似神经元的元素彼此相连并让他们相互间共享信号并不能产生智慧。相反的,智慧是精确地来源于神经元是如何连接的。

例如,一个神经元强烈地影响着另外一个神经元被称为有一个很大的权重连接到它的伙伴。在这里,这个连接的权重决定了神经元是如何彼此影响的,从而产生了一个神经网络里神经激活的特定模式,来响应到达神经网络的输入(比如,来自眼睛的输入)。要想得到一个智能的网络,相应的挑战就变成了如何决定网络连接的权重的问题。

通常,没人会通过手工计算得出连接的权重(考虑到现代的ANN一般都有上百万个连接,你就能明白为什么手工的方法不现实了)。相反的,为某个任务找到正确的连接权重就被看成了一个学习的问题。换句话说,就是研究人员花费了大量的精力去发明让ANN自己去为特定的任务学习最佳权重的方法。最常见的学习权重的方法就是把ANN的输出(比如,那个看着像是条狗)和标准答案去比较,然后通过特定原则里的数学公式来改变权重,从而使下一次输出正确的可能性更大。

在经过这样无数次的比对样例(可能会有上百万个)的训练后,神经网络就开始能够分配正确的权重来准确地回答各种各样的问题了。经常性的,神经网络的能力甚至能泛化到可以回答它没有碰到过的问题,只要这些问题和之前训练里看到的问题差别不那么大。到此为止,ANN基本上学会了去应对特定的问题了。一种常见的调整权重的方法就是随机梯度下降法,它是之前提到的深度学习里面非常流行的一个组件。最近几年的深度学习的实现基本上是对由非常多层的神经元(这就是为什么叫“深度”的原因)构成的ANN进行海量的训练。这也得益于近年来出现的强大的计算硬件的帮助。

但这里有一个我还没提到的问题,即我们首先如何决定谁连接到谁?换句话说,就是我们的大脑不只是由连接权重决定的,它还是由大脑内部的结构决定的。随机梯度下降甚至都没法去解决这个问题,而只是尽力去优化给它的连接。

这些连接是怎么来的?在深度学习里,答案就是:它们基本是由研究人员基于一定程度的经验来决定整个网络的架构是什么样的。与之相对的,自然界的大脑的结构则是通过进化形成的。我们人类大脑里的100万亿个连接的架构是来自于数百万年的优胜劣汰的自然选择过程后进化来的。

我们大脑的架构是超级无敌。毕竟毫不夸张地说,人类的智慧都集中在那里。这实际上就意味着自然界里的大脑的进化是迄今为止唯一已知的产生强智慧的过程。神经进化学的目标就是在计算机里触发一个类似的进化过程。从这个方面讲,神经进化学是人工智能专业里唯一的一个有着实际的概念证明(大脑确实是进化来的)的分支。我们知道这是一条可以产生智慧的道路。

说的更清楚点,深度学习传统上关注于对ANN编程来学习,而神经进化则侧重于大脑网络自身的原始架构。它可以包括谁和谁来连接、连接的权重以及(有时)这些连接如何允许被改变。当然,这两个领域是有一些交叉的。比如ANN依然需要为特定任务进行学习,无论是否进化过。有可能进化得到的ANN可以利用深度学习里的方法(比如随机梯度下降)来获得恰当的权重。实际上,深度学习甚至可以被认为是神经进化的一个兄弟。它研究的是如何对于一个ANN(无论是进化来的还是预先定义)的架构来学习连接的权重。

但是,学习机制自身是可以进化的观点也是可能的,从而让神经进化有着能超越或是更详细地说明传统的深度学习的潜力。简而言之,大脑(包括它的架构和如何学习)是自然选择的产物。而神经进化可以探索大脑出现的所有因素,或是借鉴深度学习的某些方面而让进化来决定其他的部分。

神经进化是怎么工作的

现在我们对于什么是神经进化已经有了初步的概念,现在可以聊一聊它是怎么工作的。第一代的神经进化算法出现在上世纪80年代。在那个时候,一小批研究人员认为对于传统ANN里的训练算法(反向传播,随机梯度下降的一种形式)的一个可替代方案就是神经进化。在早期的系统里,神经进化研究人员会(就如今日的深度学习里那样)决定神经网络的架构,即哪个神经元连哪个。然后简单地让进化而不是随机梯度下降来决定权重的大小。因为整体的网络架构不能由进化来改变,这种方法被叫做定拓扑神经进化。

这样的系统和自然界里的神经系统有一些不一样,因为定拓扑神经进化里的ANN的基因已经编码了它们的权重,从一“出生”就固定了。用这种方法,ANN一出生就知道了它们将会知道的事情,而不能在随后的“生涯”里进一步学习。这个场景有一点让人困惑,因为我们通常认为我们会在生命过程里学习一些新的东西。但是如果你仔细想想,在这些系统里的繁衍过程其实就是在学习。因为当父母在生育能更好适应一个任务的后代时,在一代一代的繁衍过程中学习就在发生。

类似这样的系统是如何真正地被设定的?如何进化一个人工的大脑来解决一个问题?实际上,这些都非常像动物的繁衍过程。设想你想进化一个神经网络来控制一个机器人行走。对于这种类型的任务,我们通常已经有了很多的模拟器,因为神经进化会进行非常多的尝试,进行模拟会快很多且风险更小。因此我们将从一个物理模拟器里的机器人开始。

现在我们需要一些ANN来开始。在刚开始,我们并不知道如何解决这个任务。因此我们就先产生一个随机ANN的群体(比如100个)。就定拓扑ANN而言,这个100个预先定义的神经网络个体的每个的权重的都是随机的。现在我们仅仅是需要进行选择。这意味着选择更好的个体来繁衍后代。

为了进化我们的群体,我们首先取一个ANN,并让它来控制模拟的机器人身体。我们让ANN来指挥身体如何移动,这就是网络的输出。这个ANN也可能接收来自身体的反馈输入,比如感知到哪只脚触地了。然后计算机就仅仅是观察ANN的控制的表现。群体里的每个ANN都被用这种方法测试过,并基于它们各自的表现,给一个叫“适应”的分值。

很清楚的是,初始群体里这些随机产生的网络是不大可能有好的表现。他们可能像其他东西一样更喜欢打来打去(毕竟它们的大脑是随机产生的)。这也没什么,因为这里的关键不是让一个ANN非常好,而是发现一些比其他的要好,甚至只是好那么一点点即可。也许某个网络能比其他网络让机器人往前多挪一点。驱动神经进化进步的引擎就是选择那些比其他的稍微强一点的网络作为繁衍下一代的父母。算法将会通过稍微地修改这些ANN(比如稍微改变它们连接的权重)来产生它们的后代。虽然有一些后代会比它们的父母表现要差,但某些将会再稍微好点(比如晃的少一点)。那么这些就又成为产生下一代的父母,并按这个逻辑持续下去。用这个方法,整体的策略就是持续的选择更合适的个体作为父母。实际上,这个神经进化的过程是一个ANN自动繁衍的农场,计算机基于它们的适应性选择父母来产生后代。

整个神经进化的核心思想是很简单的:它就是繁衍后代。但基于此之上的事情就变的有趣得多了。在第一代定拓扑神经进化算法出现后的几十年间,研究人员不断地被现实所打击。尽管这些算法可以产生新的可能性,它们进化出来的大脑与自然进化的相比还差的非常远。这个差距的原因有很多,但是这个领域令人着迷的一面就是经常会出现对自然进化的新洞察,并带来神经进化算法的大幅度提升。很常见的是这些洞察一般是反直觉的,推翻了之前的一些假定并展现了自然界的神奇之处。伴随逐步地揭开这些秘密,我们发现了如何为进化大脑来设计更厉害的算法。

复杂性增加

在神经进化学里取得进步意味着什么呢?一般而言,是意识到可进化的ANN的复杂性的局限,然后发明一个新的方法来客服这个局限。例如,上世纪八九十年代里的定拓扑算法的一个清晰的局限就是它与自然里的情况明显不一致:这些算法进化的ANN永远不能变大。相反的,自然界里的大脑在尺寸和复杂性上都可以沿多个谱系来增大。我们祖先大脑的神经元数量比我们现有的100万亿个神经元要少非常多个数量级。很明显,如果ANN的拓扑在一开始就固定了,这样的复杂度是不可能进化出来的。

因此,研究人员开始试验让ANN的拓扑和权重都进化(TWEANN,拓扑权重全进化人工神经网络)。在这个更灵活的变形版本里,父母ANN的架构(拓扑)可以在它们的后代上被稍微地改变,比如新增一个连接或是一个新的神经元。尽管这个思想是很简单的,但它带来的意义是巨大的,因为这意味着大脑可以进化的更大了。多种TWEANN算法在上世纪九十年代出现,尽管它所试图去解决的问题依然相对简单,比如对简单的数学或是控制问题给出正确的答案。但这个时代的令人兴奋之处并不是它解决的问题本身,而是发现人工进化类似大脑的架构和权重的无限潜力。这种系统的局限当时尚未被发现,因此一切看起来皆有可能。

下面给出一些这个时代的ANN试图去进化并解决的问题。一个流行的基准问题就是所谓的杆平衡问题。这个问题是要控制一个模拟出来只能往两个方向运行的小车。小车上通过铰链和一个杆子相连。由ANN控制的小车能越长时间的控制杆子不倒,它的适应得分就越高。这个问题就类似于试图去平衡一个竖在你手掌里上的铅笔,它需要仔细地协调和快速的反应速度。随着学习方法的不断进步,ANN已经可以解决更加困难版本的杆平衡问题,比如同时平衡两个杆子。解决这样问题的成果标志着这这个领域的进步。研究人员可以宣称他们的算法是首个解决了一种或另外一种变形的杆平衡的方法。

如果你对这一时期的算法的技术细节感兴趣,Xin Yao的这篇精彩的1999年神经进化算法的回顾论文是好的文献。大部分这个时期的创新工作都来自Stefano Nolfi和Dario Floreano。他们在2000年的经典著作《Evolutionary Robotics》(进化的机器人)里介绍了其中大部分的最佳思想。在世纪之交的另外一本让进化神经网络流行的著作是由Fogel写的经典:《Blondie24: Playing at the Edge of AI》,Morgan Kaufmann出版发行。其中讲述了神经进化算法通过和人类比赛西洋棋来学到大师级水平的故事。

在1999年,作为德州大学Austin分校的Risto Miikkulainen教授的研究组里的一个低年级博士生,我开始严肃地思考研究神经进化这个课题。几个重要的定拓扑算法已经在这个研究组里被发明出来,比如David Moriaty和Faustino Gomez与Risto Miikkulainen发表的SANE和ESP。这些算法都已经很聪明了,已经在探索网络里的单个神经元可以在它们自己的子群体里和其他的神经元合作并进化,然后和其他子群体里的神经元共同形成一个更大的有用的网络。这个想法通常被称为“合作协同进化”。

当时我正是处在这些思想发展的中间,我被大脑的进化可以在计算机里发生这个想法深深地吸引。我非常欣赏和理解通过进化ANN来解决问题的重要性,但是我真正的兴趣是在用进化可以增加复杂性这个想法上的。我希望能开发出一种算法,它能让ANN在计算机内部探索复杂性,就如同自然界里的大脑所发生的进化那样。因为某些原因,甚至是已有的TWEANN算法也能通过对ANN的进化来改变架构。不过它们看起来还是缺乏我想得到的让复杂性显著增加的能力。

我用了很多时间来研究已有的TWEANN算法,并思考为什么它们并没有达到如它们可能有的表现。一些问题是已知的。比如竞争协定问题。它是指很难合并两个父辈ANN来产生一个后代,这个操作叫“交叉”。更具体一点,不同连接权重组合出来的网络可能有着相同的功能,这使得很难了解如何合并父辈ANN才能获得好的后代。

我很快就碰到了另外一个问题,但当时并没有被发现。比如在一个群体里,新架构在尚未发现它的潜能之前就趋向灭绝。这种情况下,从上一代改变架构得到下一代所带来最初的影响通常可能是负面的,虽然可能在经过多代的进化后,最终进化的结果是可以利用新得到的权重的。

在我的博士导师Risto Miikkulainen的帮助下,我搜寻一个更好的TWEANN算法的结果就是一个叫增强拓扑的神经进化算法(NeuroEvolution of Augmenting Topologies,NEAT)。这个算法很快就在神经进化界得到了认同并被广泛采用。NEAT算法吸引人的地方就在于它通过一系列的创新回避了TWEANN算法的一些问题,并能通过进化来提升ANN的复杂性。一些早期的算法(比如Inman Harvey的SAGA算法)已经提供了复杂性是可以进化的线索。而NEAT算法的亮点就是它给当时的神经进化所碰到的问题提供了明确的解决方案。例如,NEAT用一个叫“历史标记”的东西来标注基因,来确保交叉后的结果一致。它还实现了一个专门为TWEANN算法设计的特性,来让创新性的新架构有更大的繁衍机会,从而对从群体里灭绝一些未成熟的架构进行了优化。

NEAT算法获得了破纪录的杆平衡得分。但更重要的是它给出了通过进化在一代一代后获得从简单到复杂的潜力。这是这个算法的商标,并激发了我远超打破杆平衡纪录的想像空间。尽管NEAT算法是在“深度学习”这个词出现之前就已经被发明了,但它有着吸引人的可以进化出越来越深的网络的能力。

NEAT算法已经被我自己和其他人应用在了无数的应用里(包括控制机器人和控制电子游戏代理)。它还被发现了在计算性创新里的一方天地。例如在中佛罗里达大学我自己实验室里的例子,它进化出的网络变成了艺术品(比如这个Picbreeder)和音乐(比如这个MaestroGenesis)。对它创新性的应用还扩展到诸如Galactic Arms Race这样的电子游戏。它的存在迫使这个游戏开发商去开发新的内容。

在它诸多重要的影响里,NEAT一个值得骄傲的应用就是被作为优化的方法来在Tevatron粒子加速器上去发现迄今为止最精确的夸克的质量估计(这里可以查看主要结果,这里是对NEAT应用的更多细节)。这个由YouTube明星Sethbling最近录制的视频帮助教育了超过四百万观众。它通过进化一个超级玛丽游戏的控制器来介绍了NEAT的内部工作机制。

间接编码

听起来NEAT像是神经进化的最终结果了。但这个领域的魅力之一就是每次重大的突破经常会伴随着发现之前不知道的局限或缺陷。而这些局限的发现相应地又带来了新的问题并促成了新一代的算法,这个循环一直在继续。事实上,久而久之我们一步步地揭开了一些大自然的秘密——大脑是如何进化出来的。这一过程充满了无尽的惊喜。

例如,逐步占据我大脑的NEAT算法的一个局限就是它使用了一种叫做直接编码的“人工DNA”。这意味着ANN里的每个连接都被基因组里的一个单独的对应基因所描述。在你只有百这个数量级的连接的时候,这没什么事。但如果你想得到的是更大的大脑,它就开始变得不易操作了。举个例子,人类大脑里有100万亿个连接,在NEAT里就需要有100万亿个基因来编码。换句话说,尽管NEAT确实能通过进化增加连接和神经元数量来扩展ANN的尺寸,增加100万亿个连接意味着进行100万亿级别的变形。即使能想办法来每秒进化一次增加一条连接(意味着每秒繁育一代),在100万亿级别的大脑可以被进化出来很久之前,太阳就已经湮灭了。因此,NEAT算法必定是忽略了一些自然界里存在的特性。这些特性导致了能在相对短的时间里进化出巨大的脑结构。

为了应对这个挑战,神经进化研究人员已经探索了另外一类不同的基因编码方法,叫做间接编码(相对于直接编码)。用这种方法,基因的数量可以比神经元和连接的数量少很多。换而言之,DNA是大脑的一种压缩表现形式。由Josh Bongard、Greg Hornby和Jordan Pollack等开创的间接编码(包括对ANN和实际大脑的编码)工作帮助展示了间接编码能进化出令人印象深刻的更像自然界中的大脑结构的威力。这些工作包括:进化出来的人工创造物展示了自然界有机体所有的规律响应性(Bongard的一些作品展示在这里),以及一系列来自Brandeis大学的Hornby和Pollack创造(论文在这里)的令人惊奇的进化出来的带有有趣结构模式的桌子(那种带有抬高的平面结构)。间接编码里最能捕获眼球的(在此之前是在神经进化领域得到关注)展示是Karl Sims的虚拟创造物。这里是20年前拍摄的视频,但依然极具震撼和令人难忘。

相比于NEAT算法这种直接编码,神经进化里的间接编码(现在专注于编码ANN)已经让能进化出更大的ANN成为可能。最流行的间接编码算法之一是被叫做组合型模式生成网络(compositional pattern-producing networks ,CPPNs)。它是在我所在的实验室——中佛罗里达大学的进化复杂性研究组发明的,用来应对类似NEAT这样的直接编码的局限。CPPN基本上是采用规则性和对称性来把一个模式压缩成相对小的一个基因集合的方法。这个想法是容易理解的,因为自然界里的大脑就有着大量的规则的模式(像重复的图案),比如在视觉大脑皮层上的接收区域里。CPPN网络可以编码相类似的连接模式。

使用CPPN来生成进化中的ANN的连接模式所用的算法(也是来自我所在的实验室)就叫做HyperNEAT(基于超立方的NEAT算法,Hypercube-based NEAT,由我和David D’Ambrosio和Jason Gauci共同发明)。之所以叫超立方,是因为按照一种数学性的解释,CPPN可以被理解为对于代表一个ANN的连接性的超立方的内部进行描绘。利用这一技术,我们开始可以进化具有几十万到几百万连接的ANN。经过间接编码的ANN已经被证明是有用的,特别是对于进化机器人的步伐。因为他们的规则性的连接模式更容易去支持涉及走和跑的移动的规律性。其他实验室也探索了神经进化领域的间接编码技术,比如Jan Koutník、Giuseppe Cuccu、Jürgen Schmidhuber和Faustino Gomez研究的压缩网络方法。

新颖性搜索

现在你已经开始看到神经进化思想发展的轨迹了。神经进化这个领域从定拓扑网络开始,走向了复杂化的网络,然后开始关注于间接编码的网络。这些视角和能力的跃进将会伴随着我们对复杂性的进化获得更多的洞察而继续下去。另外一个近年来具有影响的思想(同样是来自于我们的实验室,同时也从Jean-Baptiste Mouret和Stéphane Doncieux的有影响的研究中得到了响应)就是父母不应该总是按照它们的客观表现来被选择,而是应该基于它们的新颖性来被选择。换一种说法,有时可能有些令人惊讶,仅仅只是基于父母当前的适应性来选择对长远的成果其实是有害的。例如,考虑进化一个ANN来用于机器人行走。你可能会认为为了得到最好的行走者,目前表现最好的行走者应该被选为产生下一代的父母。但是,事实上却不是这样的。

事实上,在早期进化行走能力时,控制行走者最好的ANN可能仅仅是依赖于不靠谱地向前一跳。可能其他的候选ANN干了一些有趣的事情,比如规律性地摆动机器人的腿。但假设这些有趣的机器人都摔倒了,按照我们的设定规则,我们应该会更选择那些走了更远的候选ANN,而把能摆动腿的排除出后续考虑。但问题是:有可能是更有趣的概念(比如摆动腿)比目前最好的策略(比如前跃)更有可能发展出行走的机器人。但是适应性并不偏好摆动,仅仅是因为在当前阶段它的表现不那么好。换一种说法就是,目前使用的评估最佳行走者的进阶石具有欺骗性。对上面的例子来说,从当前表现最好的里面选择父母ANN有可能把我们带进死胡同。

这一洞察(与其他考虑结合在一起)引导我提出了新颖性搜索这个思想(和我的博士学生Joel Lehman一起发现的)。新颖性搜索是一个选择模式,它选择最具新颖性的ANN作为父母而不是基于最适应的这一思想。

这一思想一开始可能听起来有些怪,因此我们先按下不表。在进化里,有两种主要的影响进化效果的因素:一个就是表现或是编码,这在自然界的对应物就是DNA。提升复杂性和间接编码的工作都可以落入这一类别里。另外一个大的影响因素是系统如何决定谁繁衍后代,即自然选择。几乎所有的进化计算学的选择的重点都放在基于适应性做选择。但这并不意味着我们必须或是仅仅使用它来选择,因为这会快速地榨干群体的多样性,但这也确实意味着更适应者比不太适应者有更多的机会获得繁衍。

新颖性搜索直接扭转了这个适应性驱动的范式,在它的选择模式里完全放弃了常用的适应性的定义(例如行为的质量)。相反的,现在计算机关注每个候选者(例如行走机器人)的表现,然后比较它们的行为和上一代的行为。在新颖性搜索里,如果一个新的候选者的行为显著地不同于它的前辈,它就有更多的机会被选来繁衍后代,而不管它的适应性如何。

这一思想带来了一些争议,因为大家更喜欢基于是否成功这个标准来选择,这可以用适应性来衡量。但很难忽略新颖性有时也能有用这一事实。即有时候你可以通过选择新颖的来比使用适应性在更短的时间里获得更好的解决方案。想一下行走机器人的例子。和基于适应性的进化不同,新颖性搜索更可能选择摆腿但摔倒的那个作为父母,这仅仅是因为它做了一些新鲜的东西。而基于适应的搜索则几乎一定会因为它很快摔倒而忽略它。但就如我们讨论的,事实是摆腿是让机器人能行走的一个本质的进阶石。因此,尽管是反直觉地(因为适应性的欺骗性),最好还是忽视你的客观而简单地选择新颖性而不是去提升客观表现。

这一洞察又一次跃升了我们如何思考神经进化,并引领了一个全新的研究领域叫“质量多样化”或者有时也叫“启示算法”。这一新类型的算法通常是由新颖性搜素演化出。其主要目标不是要发现一个单一的最优解,而是阐明针对一个任务的可能性的所有高质量的变化所带来的广泛的交叉部分,就如那些对于一个四足机器人有效的所有的步态。这种算法的其中一个(叫MAP-Elites,由Jean-Baptiste Mouret和Jeff Clune发明)出现在近期的《自然》杂志的封面上。因为它发现了非常大量的这样的机器人步态的集合。这些步态可以在机器人出现损坏的场景下被选择性地使用。

如果你仔细地想想这一切,新颖性并不是要去解决一个特定的问题,而是去发现搜索空间里所有存在的有趣的可能性。事实是它能否给你一个最前沿的解决方案仅仅是这整个过程里的一个吸引人的副作用。质量多样性算法(超越新颖性搜索的下一步)把适应性的定义又引入回来,但用的是一个非常小心的方法,从而不会损害对新颖性的探求。其结果就是一类算法,它们可以在搜索空间里发散开,同时还能找到可能最好的东西。

这个新方向对于神经进化很重要,但更有趣的是注意到这已经超越了神经进化、机器学习或甚至是计算机科学的范畴。思考一下:有时取得一些值得的东西的最佳方法是避免直接去获得这它们。这个原则是如此通用,以至于它可以被应用到我们的生活和社会里的很多方面。例如,最佳的提高学生成绩的方法可能并不是给予持续的考试。事实是这一来自神经进化的洞察具有如此潜在广泛的影响并不是偶然的——很自然(也很令人兴奋)的,大家协调一致地试图去增强算法的能力来探索所有可能性将会带来对于创新和进步的广泛的洞察。

换句话说,当我们试图去揭开神经进化的谜题的时候,我们不仅仅是学习到了计算机算法,还了解到了这个世界是如何在深层次的基础层面上运作的。这就是我和合作者Joel Lehman要写《Why Greatness Cannot Be Planned: The Myth of the Objective》(为什么伟大不能被计划出来:客观的秘密)这本书的原因。我们希望通过这本书来和大众分享我们这个领域发展所带来的一些更广泛的影响。我们相信这些影响确实是对计算机科学界以外那些关注发明和创新的领域非常重要的。

复兴

我在这篇文章的开头宣称神经进化已经复兴,但这确切是什么意思?在现实里,这个领域从来没有真正地消失,很多主力研究人员都一直奋战在科研的第一线。然而,深度学习的兴起必然会把之前很多流失的注意力又带回了神经进化。现在这一切已经开始改变了。

深度学习取得成功的原因之一就是近几年计算机硬件处理能力的提升。ANN已经从能力在近期取得爆炸性增长的并行计算(比如在GPU上)里获益。很多人认为深度学习里ANN和强大的硬件的联姻是唯一且偶然的。其实在神经进化领域的某些故事也是处于这种情况的尖端。这就是,和传统的深度学习一样神经进化也是可以从海量硬件投资里获益,甚至是更多。与所有进化算法一样,神经进化的优点就是ANN的群体天然地可以被并行处理,而且很容易实现。如果你有100个ANN和100个处理器,你就可以同时评估所有100候选网络。所花的时间和评估一个是一样的。这一速度的提升可以急剧地提升和扩展神经进化这一方法的潜力。

一种结果就是那些能够使用大规模计算集群的实验室发现他们可能正坐在神经进化的金矿上面。这会带来新一代的研究人员和下一代的神经进化的试验,可能却是从在传统的深度学习上进行了投资的实验室里产生。实际上在这些实验室里已经存在着对于可能会错过一些重要的事情的担忧存在了

例如,Google Brain(谷歌大脑,谷歌内部的人工智能实验室)已经发表了使用几百个GPU去试图进化深度网络架构的大规模试验。其基本想法是神经进化可能可以进化出使用随机梯度下降训练法的最佳的网络架构。实际上,这个通过神经进化来进行架构搜索的想法已经在2016和2017年吸引了业界的主要企业的注意力,包括谷歌在内的Sentient Technologies、MIT Media实验室、Johns Hopkins大学、卡耐基梅隆大学,这个名单还在变长。点这里和这里可以查看这一领域的一些初期的成果。

另外一个神经进化复兴的领域就是增强学习。增强学习专注于控制问题和决策问题(比如让计算机去玩Atari游戏或是控制两足机器人)。近期OpenAI的一个团队报道了一个实验,实验对一系列的基准测试任务进行了比较,其中包括被广为报道的谷歌DeepMind AI智库最早用深度学习方法征服的Atari游戏。结果显示一个神经进化的变形方法取得了和基于传统深度学习的增强学习一样的表现。

神经进化领域也同样沿着它自己独特的路径前进着。例如,过去几年到现在的很多研究依然关注于如何进化可伸缩的ANN(Plastic ANN)。这些网络的连接权重可以在网络的生命周期里发生改变。即这种场景下的进化不仅决定架构和权重,还决定指导如何和何时权重发生改变的规则。这样产生的网络理论上更像是随着生命过程改变的生物大脑。我对于可伸缩神经网络的很多的想法都是受Dario Floreano的早期工作以及后来Andrea Soltoggio的神经调节思想的影响。神经调节允许一些神经元来调整其他神经元的伸缩性。

另外一个非常合适神经进化研究的有趣的也是我最爱的题目是开放式无结束的进化。即持续地进化来增加复杂性和有趣的行为而不结束。地球上很多有关的进化都是开放式无结束的,而从发生在计算机里的相似场景的视角去看则带来了独特的灵感。神经进化的一个伟大的挑战就是通过真正的无结束过程所产生的逐步增加复杂性的大脑的产物。如这里所述的,一个模糊但正在扩大的研究社区也正在推进无结束算法的边界。我感觉开放式无结束的进化将会和人工智能一起成为计算机科学界的最伟大的挑战之一。

电子游戏依然是一个流行的应用,不仅仅只是为了控制游戏里的角色,而是为了进化出新的内容。如果你思考地球上所有的生命的多样性,你可以发现进化算法能成为生成新的多样内容的自然驱动力。Malta大学的Georgios Yannakakis和纽约大学的Julian Togelius都是他们自己领域的先锋。在他们的新书《Artificial Intelligence and Games》(人工智能和游戏)里他们展示了很多应用神经进化(和其他人工智能算法)在游戏界里的综述。

参与进来

如果你有兴趣进化神经网络,好消息是从神经进化开始相对容易一些。有大量的软件可用(点这里查看),而且对很多人而言不用很高深的专业知识。繁衍的基本概念是符合直觉的,从而让掌握神经进化的主要思想比较容易。实际上,神经进化有着这样的荣誉,可以让很多业余爱好者在自己家里的电脑上成功地进行试验。如果你在YouTube上搜索“neuroevolution”或“NEAT neural”,你能看到很多这样的例子。另外一个例子,NEAT算法的最流行和优雅的软件包之一(“SharpNEAT”)就是由一个独立的软件工程师开发的。而他没有什么学术联系或是受过专业培训。

考虑到进化是迄今为止我们唯一知道的真正能产生人类级别智能的方法,神经进化领域未来发展的潜力是巨大的。而伴随着今日计算能力的增加,产生新洞察的潜力也是巨大的。

在这里可以下一份免费的报告来探索深度学习、无监督学习和其他人工智能的前沿成果。

This article originally appeared in English: “Neuroevolution: A different kind of deep learning”.

Kenneth O. Stanley

Kenneth O. Stanley是中佛罗里达大学计算机科学的副教授。在这里他领导着进化复杂性(EPlex)研究组。他也是Uber人工智能实验室的资深研究科学家。可以通过邮箱kenstanley001@gmail.com或是推特账号@kenneth0stanley联系到他。

转自:一个方向——进化算法   网址为: https://blog.csdn.net/yzxnuaa/article/details/79723737

此方向跟本人研究领域有关,本博客仅仅保存笔记,供日后研读,若有侵权,联系删除,谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167608.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ssrf漏洞利用

    0x00前言发现最近已经很久没更新文章了,这里就先来更新一篇ssrf,这个漏洞也是最近才研究的,以前没有去挖过此类漏洞,对此漏洞的认知也比较少0x01漏洞原理这个漏洞产生是因为服务器向外部去

    2021年12月11日
  • Python OSError: [Errno 22] Invalid argument:的出现和解决「建议收藏」

    Python OSError: [Errno 22] Invalid argument:的出现和解决「建议收藏」1、在学习从文件读取数据中,写了个示例代码,读取不在同一个目录的file.txt,运行后报这个PythonOSError:[Errno22]Invalidargument:错误:(1)、首先,在F盘的python_stu中新增了一个file.txt,同时在F盘的python_stu文件目录底下新增一个file文件夹,里面有个file_reader.py来读取python_stu文件目…

  • printwriter Java,java PrintWriter无法解析

    printwriter Java,java PrintWriter无法解析IhavenoideawhyIgetthemessage”cannotberesolved”onoutineclipseonthe11thlineimportjava.io.*;publicclassdriver{publicstaticvoidmain(String[]args){try{PrintWriterout=newPri…

  • 时钟模块ds1302的使用软件_ds1302时钟程序详解

    时钟模块ds1302的使用软件_ds1302时钟程序详解  刚刚学习了如何使用ds1302这个时钟芯片的使用,现在我把学习的过程分享出来,虽然整体的过程感觉不算难,但是仍然有难解之处至今未明,因为没有去实际验证,所以也不能确定到底是什么原因。  1.首先,查找ds1302手册,可以在21ic这个网站上下载。如果嫌英文版的自己翻译的很难受(这里还是建议大家硬着头皮看英文版的,毕竟是有好处的,你说呢?),可以在网上找中文版的。  2.通过手册…

    2022年10月29日
  • Amazon Elastic Compute Cloud(服务计费方式)

    Amazon Elastic Compute Cloud(服务计费方式)

  • 第一课 Delphi7完全自学教程「建议收藏」

    第一课 Delphi7完全自学教程「建议收藏」   首先声明,我会以delphi7教程为主,可能会在这方面用的时间比较多,废话不多说了,今天给大家带来delphi7中最基本的面向对象程序设计语言。delphi是可视化的编程语言,delphi利用提供可视的"组件",像组件里添加一些功能或命令,该程序就有了自己所拥有的功能,比如说给组件“Button1”添加双击事件,然后干什么了?给窗体起个名字,或给按钮起一个名字都可以。这就是可视…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号