精华内容
下载资源
问答
  • 众所周知,微软在终端的影响力和覆盖能力是巨大的,当全面进入移动互联网以后,势必带来不一样的气息。预见到未来发展机遇的开发者们当然不会懈怠,很多应用已经在原有成熟的基础上开设Windows Phone平台产品,而...
  • 互联网广告表现形式有哪几种?

    千次阅读 2019-06-20 09:50:49
    网幅广告是最的互联网广告形式。它是以GIF,JPG,Flash等格式创建的图像文件,定位在网页中用来展现广告内容。网幅广告具有诸如通栏、旗帜、按钮、对联、浮动等表现形式。常见的横幅尺寸为:950 * 60通栏Banner,...

    随着互联网技术的发展,互联网广告已成为企业推广的重要途径,那么互联网广告的形式又有哪些?我们一起来看看!

    1、网幅广告(Banner)

    网幅广告是最早的互联网广告形式。它是以GIF,JPG,Flash等格式创建的图像文件,定位在网页中用来展现广告内容。网幅广告具有诸如通栏、旗帜、按钮、对联、浮动等表现形式。常见的横幅尺寸为:950 * 60通栏Banner,468 * 60全尺寸Banner,125 * 125方形按钮,120 * 90按钮,120 * 60按钮,88 * 31小按钮,120 * 240垂直Banner等

    我们可以将网幅广告分为三类:静态,动态和交互式。

    静态:静态网幅是网页上的固定广告图像。它的优点是制作简单;缺点不够生动,有些沉闷乏味。事实证明,静态广告的点击率和互动广告的点击率很低。

    动态:动态网幅广告具有各种动态元素,或移动或闪烁。它通常使用GIF动态图像格式或Flash动画格式。通过丰富多彩的动态图像,它可以向观众提供更多信息,并加深观众的印象。动态广告的点击率通常高于静态广告的点击率。动态广告在制作中并不比静态广告复杂得多,而且尺寸也很小,因此它是目前最重要的互联网广告形式。

    交互式:无论是静态广告还是动态广告,都还停留在让用户被动看的阶段。互联网相对于传统媒体的最大优势是互动,因此出现了对观众更具吸引力的交互式广告。交互式广告有多种形式,例如游戏,插播式,回答问题,下拉菜单,填写表格等。这类广告不再是让用户单纯地看广告,还需要用户参与到广告中来,甚至“玩”广告。这种广告比其他广告包含更多的内容,可以让用户在参与的过程中,对企业与产品有更深刻的认识和了解。

    2、文本链接广告

    文本链接广告是一行文字作为一个广告,点击进入相应的广告页面。这是一种对浏览者干扰最少,但却较为有效果的互联网广告形式。有时候,最简单广告形式效果却最好。

    3、富媒体广告

    在互联网发展初期,由于宽带原因,互联网广告主要基于文本和低质量的GIF和JPG格式图片为主。随着互联网的普及和技术的进步,出现了具有声音,图像和文字的多媒体组合的媒体形式,人们普遍把这些媒介形式的组合叫富媒体,以技术设计的广告被称为富媒体广告。富媒体广告形式多样,内容丰富,影响力强,但通常成本更高。

    4、视频广告

    视频广告是通着网络视频的发展而新兴的一种广告形式。它的表现手法类似于传统的电视广告,都是在正常的视频节目中插入广告片段。例如,在节目开始之前或节目结束之后播放广告视频。与插播式广告一样,它也是一种迫使用户观看的广告形式,但它比前者更友好。

    5、搜索引擎竞价广告

    竞价是搜索引擎广告的主要形式。这是一种根据最高支付原则对购买相同关键字的网站进行排名的方法。拍卖排名最重要的特征是按点击付费。如果用户没有点击,则不收取广告费。在同一关键词广告中,单次点击出价最高的广告排列在第一位,其他位置按照广告主出价不同,从高到低来一次排队。

    展开全文
  • 形式化方法

    千次阅读 2006-04-06 21:50:00
    转载自中科院张文辉老师的主页引言: 形式化方法可以分为形式化描述和建立在形式化描述基础之上的形式化开发。形式化的描述就是用形式化的语言(具有严格的语法语义定义的语言)做描述。形式化的软件开发,就是用形式...

    转载自中科院张文辉老师的主页

    引言:

     

    形式化方法可以分为形式化描述和建立在形式化描述基础之上的形式化开发。形式化的描述就是用形式化的语言(具有严格的语法语义定义的语言)做描述。形式化的软件开发,就是用形式化的语言来描述软件需求和特征,并且通过推理验证来保证最终的软件产品是否满足这些需求和具备这些特征。这样的验证当然得建立在严格的语法语义的基础之上的。在实际应用中,这是不容易做到的。形式化方法研究的目的就是希望能够提供更好的理论、方法和工具,扩大形式化方法的应用范围和使用价值。

     

    形式化方法的意义在于它能帮助发现其它方法不容易发现的系统描述的不一致,不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化方法是提***软件系统,特别是safety-critical系统的安全性与可靠性的重要手段.最早的形式化方法是逻辑与逻辑推理,它的目标是使推理机械化.从广义上讲,这一目标受到许多挫折.比如说逻辑系统的不完备性(incompleteness)、逻辑系统的不可判定性(undecidability)、自动推理的难处理性(intractability).但是在一些实际应用上,逻辑方法和自动推理还是起着非常大的作用.

     

    早期形式化方法在软件验证的应用是串行程序的验证,后来随着软件研究和应用的发展,逐渐多样化.比如用逻辑和代数方法描述软件,用逻辑推理来验证软件(即描述软件的这些逻辑公式)的性质.又比如用进程代数描述并发软件,用模型检测方法验证这些软件的性质.近年来,由于认识到形式化方法重视的是严谨性,而这些方法与常用的软件方法差别很大,逐渐有许多结合图形化软件方法、面向对象方法和形式化方法的工作.以上所述几个方面(即程序验证,定理证明,模型检测,图形化方法和形式化方法相结合)的内容虽然不尽一样,但密切相关.定理证明与模型检测互为补充,各有所长.对于复杂的软件系统的验证,最好是能够结合多种方法的使用.这些方法对***可信软件开发方法的探索和应用都极为重要。

     

    形式化方法与软件可靠性:

     

    随着软件的广泛应用,特别是软件在尖端领域的应用,软件可靠性成为一个非常重要的问***。软件的可靠取决于两个方面,一个是软件产品的测***与验证,另一个是软件开发的方法与过程。对简单的软件开发,我们的经验是先有对软件的要求,然后对软件进行设计,然后是编写程序,最后是对程序进行测***,如果测***出错则对软件进行修改,然后再测***,直至对程序满意为止。对复杂的软件系统,总的过程基本还是这样,只是各个阶段也相应复杂一些。比如说,软件的要求可能需要从多方面进行描述,软件的设计需要从多方面***虑,程序的编写需要分成多个单元,对于测***来讲也就有单元测***和总体测***的分别。有些软件的要求难以一开始就完全清楚,而更改软件要求会对软件设计以及其他大量已经完成或正在进行的工作产生很大的影响,因此有些软件开发方法和过程就需要提供反复修改软件要求的便利。

     

    形式化方法在软件开发中能够起到的作用是多方面的。首先是对软件要求的描述。软件要求的描述是软件开发的基础。比如说一般非形式化的描述很可能导致描述的不明确和不一致。如果描述的不明确和不一致导致设计,编程的错误,将来的修改所要付出的代价就非常大了。如果导致的错误没有被发现,则影响程序的可靠和使用。形式化方法则要求描述的明确性,而描述的不一致性也就相对易于发现。其次是对软件设计的描述。软件设计的描述和软件要求的描述一样重要。形式化方法的优点对于软件要求的描述同样适用于软件设计的描述。另外由于有了软件要求的形式化描述,我们可以检验软件的设计是否满足软件的要求。对于编程来讲,我们可以***虑自动代码生成。对于一些简单的系统,形式化的描述有可能直接转换成可执行程序,这就简化了软件开发过程,节约了资源和减少了出错的可能性。另外,形式化方法可以用于程序的验证,以保证程序的正确性。对于测***来讲,形式化方法可用于测***用例的自动生成,这可以节约许多时间和在一定程度上保证测***用例的覆盖率。

     

    形式化方法原则上就是用数学与逻辑的方法描述和验证软件。从描述上讲,一方面是系统或程序的描述,另一方面是性质的描述。这些可以用一种或多种语言来描述。这些语言包括命***逻辑,一阶逻辑,***阶逻辑,代数,状态机,并发状态机,自动机,计算树逻辑,线性时序逻辑,进程代数, π-演算, μ-演算,特殊的程序语言,以及程序语言的子集等。从验证来讲,主要有两类方法,一类是以逻辑推理为基础,另一类则以穷尽搜索为基础。逻辑推理有 natural deduction, sequent calculus, resolution 以及Hoare-logic 等方法。穷尽搜索方法统称为模型检测。这类方法与系统或程序以及系统性质的表示有很大的关系,比如说符号模型检测,其基本原理是用命***逻辑公式表示状态转换关系,用不动点算法计算状态的可达性以及这些状态是否满足某些性质。

     

    形式化方法的应用在电路设计和协议设计上都取得了很大的成绩。但是对于软件来讲还有很多没有解决的问***。软件的描述要比电路和协议复杂。一个软件描述所包含的状态空间通常来讲可以是无限的。因此验证的难度很大。逻辑推理的不足之处在于推理的难度。对于稍微复杂的系统,自动化的推理就难以胜任。人为的推理有很大的缺点,除了费时费力外,比如说一个定理推不出来,并不能说明这个定理不成立,很可能是推理方法和策略应用不当。模型检测的好处在于它有全自动化的检测过程,并且如果一个性质不满足,它能给出这个性质不满足的理由。我们即可据此对我们的系统描述进行改进。模型检测的困难首先是它所能检测的是有限状态模型。这样对于一般软件来讲,需要有一个从任意状态到有限状态的建模过程。并且这样的一个模型的状态空间会面临组合爆炸的问***。

     

    研究内容:

     

    形式化语言:怎样描述软件系统及其行为模式。

    更好地刻画软件系统的性质,比如说,通讯、分布、开放、移动。

    各种语言的应用、比较。语言与语言之间的转换。

    开发相应的软件工具。

     

    形式化验证:怎样验证软件系统符合给定的行为模式。

    更有效地验证软件系统的性质,比如说,自动化、速度快、内存需求少。

    各种方法的应用、比较。

    开发相应的软件工具。

     

    形式化方法的出发点是数学逻辑方法。其目的是开发可靠的软件产品。从软件开发来讲,形式化方法目前并非软件开发的主流。从软件发展看,早期的软件是用于数值计算,程序语言侧重于函数和算法的描述。后来数据库的应用和数据结构逐渐变得重要。现在的软件更为复杂,因此,对象、组件、接口、通讯、开放等成为非常重要的概念。从软件工程方法来讲,有一套描述这些概念的办法,比如说用图形、表格、逻辑、自然语言等,交叉使用以描述一个系统的各个方面。因此换一个角度来***虑,我们也可以以目前常用的软件开发方法为出发点,研究怎样将这些方法形式化,使软件系统的描述精确化,以减少可能的误解所带来的问***;或以目前常用的软件开发过程为出发点,研究怎样在软件开发过程中增加一些形式化方法的应用,以提***软件的可靠性。

     

     形式化方法的特点:
        从研究角度来讲,形式化方法是一个重要的研究领域,
        从应用角度来讲,目前能做的事有限,应用面窄、有较大局限性,比如:
        a. 形式化描述的困难
        b. 抽象度适当的形式化描述的困难
        c. 模型检测的局限
        d. 逻辑推理的困难和局限

    展开全文
  • 软件形式化方法概述

    千次阅读 2018-11-10 10:09:55
    软件形式化方法概述

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

           友情提示:本文理论性和专业性较强,如果木有接触过该领域,读起来可能会有一点点吃力,吐舌头!本文是Sunny结合多份资料综合整理而成,有点凌乱,见谅!

     

           软件形式化方法(Formal Method)在软件开发中一直都受到多方面的争议。持肯定态度的拥护者认为形式化方法会引起软件开发的革命微笑,另一些持否定态度者则怀疑甚至反对将数学引入软件开发过程中难过

           形式化开发方法的一些争议或缺陷主要体现在:

           (1) 形式化方法中所包含的数学理论,限制了大多数程序设计人员的学习和使用;

           (2) 认为采用形式化方法会延误项目开发周期、增加开发费用

           (3) 许多流行的形式化方法对于较小规模的项目是有效的,但却很难应用于一些大型系统

           (4) 形式化方法不能确保开发出完全正确的软件;

           (5) 缺乏对软件生命周期内各个阶段提供全面支持的形式化方法;

           等。

     

          从广义上讲,形式化方法是借助数学的方法来解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动。狭义的讲,形式化方法是运用形式化语言,进行形式化的规格描述、模型推理和验证的方法。就形式化建模而言,形式化表示必须包含一组定义其语法语义的形式化规则。这些规则可用于分析给定的表达式是否符合语法规定,或证明该表达式具有某种性质。

     

           难过关于形式化方法:悲观者的角度难过

           形式化方法是为数学家准备的

           形式化方法仅供从事形式化研究的人使用

           从事形式化研究的人仅使用形式化方法

           形式化方法的运用将延缓软件开发进度

           形式化方法的运用将提高软件开发成本

           形式化方法仅应用于开发安全要求极高的系统

           形式化方法仅被用于无关紧要的系统,且缺少工具支持

     

           微笑关于形式化方法:乐观者的角度微笑      

           运用形式化方法将开发出完美的软件

           形式化方法可以替换传统的软件工程方法

     

          形式化方法的出发点是数学逻辑方法,其目的是开发可靠的软件产品。从软件开发来讲,形式化方法目前并非软件开发的主流。从软件发展看,早期的软件是用于数值计算,程序语言侧重于函数和算法的描述,后来数据库的应用和数据结构逐渐变得重要。现在的软件更为复杂,因此,对象、组件、接口、通讯、开放等成为非常重要的概念。从软件工程方法来讲,有一套描述这些概念的办法,比如说用图形、表格、逻辑、自然语言等,交叉使用以描述一个系统的各个方面。因此换一个角度来考虑,我们也可以以目前常用的软件开发方法为出发点,研究怎样将这些方法形式化,使软件系统的描述精确化,以减少可能的误解所带来的问题;或以目前常用的软件开发过程为出发点,研究怎样在软件开发过程中增加一些形式化方法的应用,以提高软件的可靠性。

     

           形式化方法可以分为形式化描述和建立在形式化描述基础之上的形式化开发。形式化的描述就是用形式化的语言(具有严格的语法语义定义的语言)做描述。形式化的软件开发,就是用形式化的语言来描述软件需求和特征,并且通过推理验证来保证最终的软件产品是否满足这些需求和具备这些特征。这样的验证当然得建立在严格的语法语义的基础之上的。在实际应用中,这是不容易做到的。形式化方法研究的目的就是希望能够提供更好的理论、方法和工具,扩大形式化方法的应用范围和使用价值。

     

           形式化方法的意义在于它能帮助发现其它方法不容易发现的系统描述的不一致、不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化方法是提高软件系统,特别是Safety-Critical系统的安全性与可靠性的重要手段。最早的形式化方法是逻辑与逻辑推理,它的目标是使推理机械化。从广义上讲,这一目标受到许多挫折,比如说逻辑系统的不完备性(incompleteness)、逻辑系统的不可判定性(undecidability)、自动推理的难处理性(intractability)。但是在一些实际应用上,逻辑方法和自动推理还是起着非常大的作用。

     

           形式化方法在软件开发中能够起到的作用是多方面的。首先是对软件需求的描述,软件需求的描述是软件开发的基础。比如说一般非形式化的描述很可能导致描述的不明确和不一致,如果描述的不明确和不一致将导致设计、编程的错误,将来的修改所要付出的代价就非常大了,如果导致的错误没有被发现,则影响程序的可靠和使用。形式化方法则要求描述的明确性,而描述的不一致性也就相对易于发现。其次是对软件设计的描述。软件设计的描述和软件需求的描述一样重要,形式化方法的优点对于软件需求的描述同样适用于软件设计的描述,另外由于有了软件需求的形式化描述,我们可以检验软件的设计是否满足软件的要求。对于编程来讲,我们可以考虑自动代码生成。对于一些简单的系统,形式化的描述有可能直接转换成可执行程序,这就简化了软件开发过程,节约了资源和减少了出错的可能性。另外,形式化方法可以用于程序的验证,以保证程序的正确性。对于测试来讲,形式化方法可用于测试用例的自动生成,这可以节约许多时间和在一定程度上保证测试用例的覆盖率。

     

     

           形式化方法原则上就是用数学与逻辑的方法描述和验证软件。从描述上讲,一方面是系统或程序的描述,另一方面是性质的描述。这些可以用一种或多种语言来描述。这些语言包括命题逻辑,一阶逻辑,高阶逻辑,代数,状态机,并发状态机,自动机,计算树逻辑,线性时序逻辑,进程代数, π-演算, μ-演算,特殊的程序语言,以及程序语言的子集等。从验证来讲,主要有两类方法,一类是以逻辑推理为基础,另一类则以穷尽搜索为基础。逻辑推理有 natural deduction, sequent calculus, resolution 以及Hoare-logic 等方法,穷尽搜索方法统称为模型检测。这类方法与系统或程序以及系统性质的表示有很大的关系,比如说符号模型检测,其基本原理是用命题逻辑公式表示状态转换关系,用不动点算法计算状态的可达性以及这些状态是否满足某些性质。

     

           形式化方法的应用在电路设计和协议设计上都取得了很大的成绩,但是对于软件来讲还有很多没有解决的问题。软件的描述要比电路和协议复杂,一个软件描述所包含的状态空间通常来讲可以是无限的,因此验证的难度很大。逻辑推理的不足之处在于推理的难度,对于稍微复杂的系统,自动化的推理就难以胜任。人为的推理有很大的缺点,除了费时费力外,比如说一个定理推不出来,并不能说明这个定理不成立,很可能是推理方法和策略应用不当。模型检测的好处在于它有全自动化的检测过程,并且如果一个性质不满足,它能给出这个性质不满足的理由,我们即可据此对我们的系统描述进行改进。模型检测的困难首先是它所能检测的是有限状态模型。这样对于一般软件来讲,需要有一个从任意状态到有限状态的建模过程,并且这样的一个模型的状态空间会面临组合爆炸的问题。

     

           形式验证一般被称为形式化验证方法,是相对于传统的验证(模拟、仿真和测试)而言的。形式化验证方法的主要思路就是使用数学的公式、定理和系统来验证一个系统的正确性等。目前的形式化验证方法可以用于验证硬件系统、软件系统和其他系统,而且形式化验证的技术目前也已经发展到不但可以验证系统的功能正确性(有没有错误),而且可以验证系统的性能指标(功耗、散热、延迟等等)。形式化验证方法主要可以分为三种:定理证明、模型检测和等价性验证。定理证明的基本原理是选定一个数学逻辑体系,并用其中的公式来描述(如软、硬件)系统和系统性质刻画,然后在一定的数学逻辑(如hol逻辑)体系中依据此体系的公理、定理、推导规则和系统描述公式,看看能不能推导出系统的性质刻画公式,如果可以的话验证成功。模型检测的原理比较简单但是非常实用,它将(如软、硬件)系统建模成有限状态系统(一般成为keripke结构),系统的性质刻画用时序逻辑公式表示(CTL,LTL等),而后在此模型上来验证性质刻画的正确性,模型检测于定理证明相比是有很大优势的,他可以全自动地验证,不需要人工干预,而定理证明则在一些关键推导路径中需要数学家控制。还有一种是等价性验证,等价性验证其实是一种半形式话的技术,同前两种验证正确性的技术不同,它验证的是设计的一致性,即不同设计阶段的设计是否功能相同,这种技术中一般采用符号的方法和增量的方法,而且由于这种方法和硬件电路紧密结合,所以电路验证的一些传统方法也大量应用于此中方法中来,比如ATPG技术等。如大家使用的Synopsys的Formality本质上就是一个等价性验证器。形式化验证是非常有用的,只是国内作这一行的人太少。大家可以看看Synopsys和Cadence两家公司,它们都是从形式化验证起家的,然后转到目前流行的将设计和验证统一在一起,即“设计验证”领域。

        

     
      

           软件形式化方法研究内容:
        形式化语言(形式化描述、形式规约):怎样描述软件系统及其行为模式;更好地刻画软件系统的性质,比如说,通讯、分布、开放、移动;各种语言的应用、比较,语言与语言之间的转换;开发相应的软件工具。

        形式化验证(形式验证):怎样验证软件系统符合给定的行为模式;更有效地验证软件系统的性质,比如说,自动化、速度快、内存需求少;各种方法的应用、比较;开发相应的软件工具。

     

        具体来说,软件形式化方法包括以下几个主要研究方向:

        (1) 基础概念:复合、抽象、重用模型、数学理论组合、数据结构及算法。需要对如何复合方法、复合规格、复合模型、复合理论、复合证明等进一步的理解;需要开发出将整体特性分解为易于验证的局部特性的有效方法;实际系统在规格和验证之前都要进行某种程度上的抽象,需要研究出评判抽象层次合理与否的方法;重用不仅可以提高开发效率,而且可以提高软件的可靠性,应当研究可重用模型和理论;许多安全关键反应式系统是数字和模拟混合的,需要连续和离散两个范畴内数学基础支撑的混杂系统理论和技术支撑;大规模、复杂软件中搜索空间是巨大的,需要研究出新的数据结构和算法。

        (2) 形式化方法与面向对象方法的结合:这已经成为软件工程领域的一个研究热点,例如:Statecharts、Petri网、Z语言、VDM等,以及与面向对象方法结合产生的Objectcharts、面向对象Petri网、Object-Z、Z++、VDM++等。这方面的研究体现在两个方面:利用面向对象结构来提高形式符号的表达能力;使用形式化方法来分析面向对象的语义或提高这些标记符号的表达对象概念的能力。形式化方法和其他传统软件开发方法相结合以达到取长补短的目的,也是值得研究的课题。

        (3) 工具开发:具有良好用户界面、易于学习和操作简单的形式化方法支撑工具,对于形式化方法的推广应用是大有裨益的。追求通用的完善的形式化方法及其支撑工具是不现实的,侧重于如下某一个或几个方面准则的特色方法和工具是未来研究的重点。这些准则包括:一旦开始使用之后尽早得到明显的效益;效益随着开发者的了解深入和熟练而增加;单一规格可以在软件开发生命周期的多个阶段取得效益;能和其他通用编程语言或方法交互使用;工具应当像编译器那样易于使用、输出,也易于阅读;概念和工具应当易于入门和学习掌握;软件特性分析有所侧重;支持渐进软件开发,允许部分规格和验证。此外,特定问题域的形式化方法及其工具研究也是非常重要的。


    【作者:刘伟   http://blog.csdn.net/lovelion

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 这样的系统和自然界里的神经系统有一些不一样,因为定拓扑神经进化里的ANN的基因已经编码了它们的权重,从一“出生”就固定了。用这种方法,ANN一出生就知道了它们将知道的事情,而不能在随后的“生涯”里进一步...

    “把人工智能在机构中用起来”

    ——O'Reilly人工智能大会正在征集讲师议题,查看具体要求请点击这里,截止日期11月7日。


    编者注:想进一步了解神经进化,可以查看旧金山人工智能大会上Kenneth Stanley的演讲《通过神经进化去完成神经网络的进化》。

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

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

    当我在上世纪九十年代末期第一次开始人工智能的研究的时候,关于可以在计算机里去进化大脑的想法和我想冒险的感觉产生了共鸣。在当时这还是一个不寻常的、甚至是很含糊的领域。但我对这个思想非常好奇而且也很有亲切感。结果就是我生命里的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联系到他。



    展开全文
  • 什么是形式化?

    千次阅读 2018-08-10 05:22:32
    形式化方法在古代就运用了,而在现代逻辑中又有了进一步的发展和完善。这种方法特别在数学、计算机科学、人工智能等领域得到广泛运用。它能精确地揭示各种逻辑规律,制定相应...
  • 人类思维的基本形式

    千次阅读 2012-09-07 07:32:04
    人类思维的基本形式 第一节 关于人类思维基本形式 划分的不同观点  就思维形式而言,可以按不同原则有多种不同分类[5][10]。比如,按思维内容的抽象性可划分为具体形象思维和抽象逻辑思维;按思维内容的...
  • 接着上篇继续说些我曾有过,后来被证明为“英雄所见略同”的想法,因为是在CSDN上...我在逛论坛之余,一天晚上突然想到另一种在网上发布内容的形式。论坛都是以话题为中心的,列表显示一个个大家贴出的主题。可以设...
  • 大数据建模 需要了解的九大形式

    万次阅读 2017-07-29 08:52:49
    数据挖掘是利用业务知识从数据中发现和解释知识...也许是因为数据挖掘源于实践而非 理论,在其过程的理解上太引人注意。20世纪90年代晚期发展的CRISP-DM,逐渐成为数据挖掘过程的一种标准化过程,被越来越多的数据挖
  • Spring-Aop注解形式案例<二>

    万次阅读 2015-12-13 21:11:57
    Spring-Aop注解形式案例 问题?Spring-Aop注解形式案例 我们知道,在spring中,spring提供了注解的形式,来达到对象的依赖注入。当然我们也可以直接用依赖注入将bean 这里写的是Spring-Aop注解...
  •  CPU的接口多采用Socket插针式,从最采用Socket的80486开始到现在的酷睿CPU,Socket接口已经存在了近20年。  80486以前的CPU都是被直接焊接或压固在主板上的,升级电脑时必须同时更换主板和CPU。先后出现了...
  •  和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就发现,里面的代码是不一样的。    iostream.h是C的头文件库,iostream是C++标准头文件库,C++标准...
  • 非对称加密使用两个密匙,服务端和客户端密匙不一样,私钥放在服务端,黑客一般是拿不到的,安全性高。 3.线性散列一般是做防篡改签名比较多,因为它们输入任意长度的串都会得到一个固定长度的串。比如比特币中就是...
  • STA静态时序分析/Formality形式化验证

    千次阅读 2018-04-25 14:09:17
    现在通常的策略是:采用形式验证手段来保证门级网表在功能上与RTL设计保持一致,配合静态时序分析工具保证门级网表的时序,对于全同步的设计,甚至可以做门级仿真; 对于存在异步电路的设计,也只需要针对异步电路...
  • 三种形式化语言和方法

    万次阅读 2010-03-26 13:10:00
    运算之间的关系 ⑶ 由于采用数学符号和抽象数据类型,VDM形式规格说明过于形式化往往容易理 解,这有可能造成未读懂形式规格说明而错误地实现其软件的情况。     Z-- Z以经典集合论和一阶谓词...
  • 不过一样的是,这里的一行表示一个词在哪些title中出现了(一行就是之前说的一维feature),一列表示一个title中有哪些词,(这个矩阵其实是我们之前说的那种一行是一个sample的形式的一种转置,这个使得我们...
  • 在2002年,我国刘鹏就针对传统网格计算思路存在实用问题,提出计算池的概念:“把分散在各地的 高性能计算 机用高速网络连接起来,用专门设计的 中间件 软件有机地粘合在一起,以Web界面接受各地科学工作者提出...
  • 原文链接: ... 2016-09-08 丁浪 聊聊架构 在谈论数据库架构和数据库优化的时候,我们经常听到“分库分表”、“分片”、“Sharding”…这样的关键词。
  • 很多人知道易宝支付、联动优势是支付行业的黄埔军校,却知道掌上通也是最拥有支付系统和航旅系统最有潜力的公司。 支付方面由于未取得牌照, 由于重视支付工具, 早于支付宝却在支付行业中掉队。 航旅方面...
  • 中国中文信息学会(CIPS)邀请了有约10家从事知识图谱研究和实践的著名高校、研究机构和企业的专家及学者有意参与并发表演讲,下面就是第一届全国中文知识图谱研讨的学习笔记。  会议介绍地址和PPT下载链接:...
  • 产品经理在早期如何快速学习?

    万次阅读 2019-04-29 09:08:43
    本文主要解决问题 1,产品经理是什么?...以下介绍可能和你听到的官方一样,比较通俗化,均是由个人经验转化而来(经历过上市企业,经历过创业的一名小小的PM),以目标为导向的思维方式 产品经理:...
  • 对于我们来讲,最麻烦的就是区块链的验证跟传统的操作系统等软件的形式化验证不一样,区块链存在的问题是, 多个区块链平台,而且存在于多种智能合约开发语言,甚至有的区块链平台,提供多种合约开发语言 。这是最大...
  • ), 信区: Philosophy标 题: 数学:确定性的丧失(12)发信站: 北大未名站 (2002年10月23日22:39:04 星期三), 转信第十一章 形式主义与集合论公理化基础 与现代数学的浩翰大海相比,那点可怜的残余算什么。...
  • 鉴于现有的形式化方法及其形式化语言(简称“桥”系列)具有的优点和缺点, 特依据信息基本定律发明新的“秤”系列,以扩充并解决“桥”系列所解决了的问题。  1.“桥”系列(第一路径):ML-------FL-------PL...
  • 接触到的计算机编程语言——c语言

    千次阅读 多人点赞 2015-08-06 20:53:56
    接触到的计算机编程语言——c语言 在经过入学后计算机导论的熏陶后,在大一的下半学期我终于接触到了一门语言,这也是我们最接触的计算机编程语言——c语言。 在初学的时候,感觉这门课程十分晦涩,但是当...
  • 所以,冰河强烈建议这些基础知识越知道越好,越掌握越好!最好是在大学时期就充分掌握这些计算机基础知识。 好了,接下来,冰河为大家总结了一篇万字长文系统介绍计算机中有关数据方面的基础知识。 数据的表示...
  • 别人都在你看到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续思进取 …… 【下载】个人结合诸多资料,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,531
精华内容 90,612
关键字:

不一样的早会形式