人工智能实战应用展望:生物体模拟

国外有些研究人员们正在致力于打造具有出色情绪智能的机器人。他们正在对人工智能进行改进,力图创造出能够实时读取人类情绪的下一代个性化机器人。那么,人工智能机器人的下一步是什么呢?如果它们能够模拟生物,我们能否授予它们作为生物的资格?甚至能否授予它们人格呢?

近年来一系列令人激动的技术进展,如能够利用核酸链开展快速平行计算的生物计算机、以及索菲亚等具有人工智能的类人机器人等,都需要科学家好好定义“生命”这一概念。事实上,包括沙特阿拉伯在内的一些国家已经赋予了索菲亚这样的机器人国民身份。与此同时,合成生物学领域的创新技术也对当今生命造成了新的挑战。科学家们正在打造新的生命体,将传统的四种核苷酸扩增到六种或者八种。而对于拥有这些扩展版合成DNA代码的细菌,我们又该如何看待它们的状态呢?人们已经针对生物生命的精准定义开展了长达几百年的探讨和辩论,但目前仍未有定论。

对生物生命的定义不仅仅是一项学术练习。有人可能会说,定义只能用人类自己的语言阐述词句的含义,而不能告诉我们世界的本质究竟为何物。要想给人格下定义,当然还有法律和道德方面的问题需要考虑,但这些超出了这篇文章的探讨范围。尽管如此,我们的道德责任在很大程度上仍取决于我们如何定义生命。

其实有生有死就是生命的过程,有的生命有几十万年、几百万年,有得生命只有几秒钟,所以自然界里充满了生命。就历史而言,对生命定义的分类一般以所有已知生物体的独特特征为基础。

例如,根据目前的生命观念,活生物体必须:

1、拥有一组能够对自己的功能特性进行编码和调节的生物遗传指令(如人类为DNA和RNA);

2、由若干独立单元或由细胞膜包裹的细胞构成,其中含有核酸、蛋白质、碳水化合物和脂质等,并能够进行新陈代谢;

3、能够通过适应或变异改变其表现型,并对能够改变其基因型或表现型的环境因素做出反应;

4、会进行新陈代谢平衡调节,对体内外环境做出反应,调节自身生长;

5、能够通过繁殖创造新的生物体,且寿命有限。这样看来,通过合成核苷酸创造的生物体、以及以人工智能为基础的机器人,也许无法满足上述所有标准。

要想通过自然选择创造出地球上如此丰富的生物种类,有两点因素不可或缺:一是足够的时间,二是每个生物体的死亡率要能够确保该物种得以存活下去。因此,我们对生命提出了一个简单、但又充满挑战性的定义,即将生命定义为一个生物体拥有任何能够满足繁殖、自然选择和个体死亡率要求的遗传代码的特性。

这一定义突显了保护未来生命形式未知性的需要。基因变异、能够存活下去的基因组、以及未来人类的表现型都充满了随机性,我们不知道未来的人类会是什么样,也不知道未来是否会有其它物种将我们取而代之。

NASA将生命定义为“一套能够进行达尔文进化、且能够自给自足的化学系统”。而本文中的定义比这一定义涵盖的范围更广。人工智能机器人并不符合本文中对生命的定义,因为人类可以控制计算机的各类功能。因此人工智能机器人不存在不确定性或未知性。以人工智能为基础的类人型机器人可以通过编程复制自身、甚至终结生命。但机器人并不会察觉到“变异”的发生,也不会参与任何自然选择过程,因此不符合本文中“生命”的标准。

按照本文中的定义,利用合成DNA核苷酸的生物体倒是有可能符合生命的标准。但我们必须认识到,虽然发展合成“生命形式”是一次令人激动的技术尝试,但它们可能会通过自然选择的无法预测性毁灭地球上的所有现存生命形式,因此这类项目可能超出了人类的伦理边界。

作为生物,尤其是清楚自己生命有限、且清楚我们有能力、有义务辨明对错的生物,我们必须承认生物和非生物之间存在这样一条界限。我们相信,本文中提出的定义为所有生物体划出了一条清晰的界限,让我们能够对合成生物体和人工智能机器人的生物性进行正确评估。

比较常见的基础做法是:遗传算法及应用。

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

中文名

遗传算法

外文名

Genetic Algorithm

基本概念

是一类借鉴生物界的进化规律

基本运算

初始化

特    点

对于各种通用问题都可以使用

目录

简介

运算过程

特点

现状

基本框架

▪ 编码

▪ 适应度函数

▪ 初始群体选取

Python实现

▪ Python遗传算法解决实数函数的优化问题

▪ Python遗传算法解决TSP问题(旅行商问题)

一般算法

▪ 建初始状态

▪ 评估适应度

▪ 繁殖

▪ 下一代

▪ 并行计算

术语说明

▪ 染色体

▪ 基因

▪ 基因位点

▪ 特征值

▪ 适应度

运算过程

▪ 选择

▪ 交叉

▪ 变异

▪ 终止条件

10 不足之处

11 应用

▪ 函数优化

▪ 组合优化

▪ 车间调度

12 演示学习

简介

编辑

遗传算法是在20世纪六七十年代由美国密歇根大学的 Holland教授创立。60年代初,Holland在设计人工自适应系统时提出应借鉴遗传学基本原理模拟生物自然进化的方法。1975年, Holland出版了第一本系统阐述遗传算法基本理论和方法的专著,其中提出了遗传算法理论研究和发展中最重要的模式理论( schemata theory)。因此,一般认为1975年是遗传算法的诞生年。同年, de jong完成了大量基于遗传算法思想的纯数值函数优化计算实验的博士论文,为遗传算法及其应用打下了坚实的基础。1989年, Goldberg的著作对遗传算法做了全面系统的总结和论述,奠定了现代遗传算法的基础。

遗传算法是一种基于“适者生存”的高度并行、随机和自适应的优化算法,通过复制、交叉、变异将问题解编码表示的“染色体”群一代代不断进化,最终收敛到最适应的群体,从而求得问题的最优解或满意解。其优点是原理和操作简单、通用性强、不受限制条件的约束,且具有隐含并行性和全局解搜索能力,在组合优化问题中得到广泛应用。最早将遗传算法应用于jb-shop调度问题的是 Davis遗传算法求解job-shop调度问题时较少应用邻域知识,更适合应用于实际。如何利用遗传算法高效求解job-shop调度问题,一直被认为是个具有挑战意义的难题,并成为研究的热点。

遗传算法中交叉算子是最重要的算子,决定着遗传算法的全局收敛性。交叉算子设计最重要的标准是子代继承父代优良特征和子代的可行性。邵新宇等人在深入分析job-shop调度问题的基础上,提出了一种基于工序编码的POX方法,将其与其他基于工序编码的交叉进行比较,证明了该交叉方法解决job-shop调度问题的有效性。同时,为解决传统遗传算法在求解jb-shop调度问题的早熟收敛,邵新宇等人还设计了一种改进的子代交替模式遗传算法,明显加快了遗传算法收敛的速度,此原理同样适用于其他组合优化问题。邵新宇等人所提出的遗传算法的变异不同于传统遗传算法中的变异操作(为保持群体的多样性),是通过局部范围内搜索改善子代的性能 [1] 

运算过程

编辑

遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术

对于一个求函数最大值的优化问题(求函数最小值也类同),一般可以描述为下列数学规划模型

式中

 为决策变量

 为 目标函数式,

 、

 为约束条件,U是基本空间,R是U的子集。满足约束条件的解

 称为可行解集合R表示所有满足约束条件的解所组成的集合,称为可行解集合。

遗传算法也是计算机科学人工智能领域中用于解决最优化的一种搜索启发式算法,是进化算法的一种。这种启发式通常用来生成有用的解决方案来优化和搜索问题。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。遗传算法在适应度函数选择不当的情况下有可能收敛于局部最优,而不能达到全局最优。遗传算法的基本运算过程如下:

a)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。

b)个体评价:计算群体P(t)中各个个体的适应度

c)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。

d)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。

e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。

f)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。

特点

编辑

遗传算法是解决搜索问题的一种通用算法,对于各种通用问题都可以使用。搜索算法的共同特征为:

 首先组成一组候选解

 依据某些适应性条件测算这些候选解的适应度

 根据适应度保留某些候选解,放弃其他候选解

 对保留的候选解进行某些操作,生成新的候选解。

在遗传算法中,上述几个特征以一种特殊的方式组合在一起:基于染色体群的并行搜索,带有猜测性质的选择操作、交换操作和突变操作。这种特殊的组合方式将遗传算法与其它搜索算法区别开来。

遗传算法

遗传算法还具有以下几方面的特点:

(1)遗传算法从问题解的串集开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。

(2)遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。

(3)遗传算法基本上不用搜索空间的知识或其它辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操作适应度函数不仅不受连续可微的约束,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大扩展。

(4)遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导他的搜索方向。

(5)具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索时,适应度大的个体具有较高的生存概率,并获得更适应环境基因结构

(6)此外,算法本身也可以采用动态自适应技术,在进化过程中自动调整算法控制参数和编码精度,比如使用模糊自适应法。

现状

编辑

进入90年代,遗传算法迎来了兴盛发展时期,无论是理论研究还是应用研究都成了十分热门的课题。尤其是遗传算法的应用研究显得格外活跃,不但它的应用领域扩大,而且利用遗传算法进行优化和规则学习的能力也显著提高,同时产业应用方面的研究也在摸索之中。此外一些新的理论和方法在应用研究中亦得到了迅速的发展,这些无疑均给遗传算法增添了新的活力。遗传算法的应用研究已从初期的组合优化求解扩展到了许多更新、更工程化的应用方面。

随着应用领域的扩展,遗传算法的研究出现了几个引人注目的新动向:一是基于遗传算法的机器学习,这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。二是遗传算法正日益和神经网络模糊推理以及混沌理论等其它智能计算方法相互渗透和结合,这对开拓21世纪中新的智能计算技术将具有重要的意义。三是并行处理的遗传算法的研究十分活跃。这一研究不仅对遗传算法本身的发展,而且对于新一代智能计算机体系结构的研究都是十分重要的。四是遗传算法和另一个称为人工生命的崭新研究领域正不断渗透。所谓人工生命即是用计算机模拟自然界丰富多彩的生命现象,其中生物的自适应、进化和免疫等现象是人工生命的重要研究对象,而遗传算法在这方面将会发挥一定的作用,五是遗传算法和进化规划(Evolution Programming,EP)以及进化策略(Evolution Strategy,ES)等进化计算理论日益结合。EP和ES几乎是和遗传算法同时独立发展起来的,同遗传算法一样,它们也是模拟自然界生物进化机制的智能计算方法,即同遗传算法具有相同之处,也有各自的特点。目前,这三者之间的比较研究和彼此结合的探讨正形成热点。

1991年D.Whitey在他的论文中提出了基于邻域交叉的交叉算子(Adjacency based crossover),这个算子是特别针对用序号表示基因的个体的交叉,并将其应用到了TSP问题中,通过实验对其进行了验证。D.H.Ackley等提出了随机迭代遗传爬山法(Stochastic Iterated Genetic Hill-climbing,SIGH)采用了一种复杂的概率选举机制,此机制中由m个“投票者”来共同决定新个体的值(m表示群体的大小)。实验结果表明,SIGH与单点交叉、均匀交叉的神经遗传算法相比,所测试的六个函数中有四个表现出更好的性能,而且总体来讲,SIGH比现存的许多算法在求解速度方面更有竞争力。H.Bersini和G.Seront将遗传算法与单一方法(simplex method)结合起来,形成了一种叫单一操作的多亲交叉算子(simplex crossover),该算子在根据两个母体以及一个额外的个体产生新个体,事实上他的交叉结果与对三个个体用选举交叉产生的结果一致。同时,文献还将三者交叉算子与点交叉、均匀交叉做了比较,结果表明,三者交叉算子比其余两个有更好的性能。

1992年,英国格拉斯哥大学的李耘(Yun Li)指导博士生将基于二进制基因的遗传算法扩展到七进制、十进制、整数、浮点等的基因,以便将遗传算法更有效地应用于模糊参量,系统结构等的直接优化,于1997年开发了可能是世界上最受欢迎的、也是最早之一的遗传/进化算法的网上程序 EA_demo,以帮助新手在线交互式了解进化计算的编码和工作原理,并在格拉斯哥召开第二届IEE/IEEE遗传算法应用国际会议,于2000年组织了由遗传编程(Genetic Programming)发明人斯坦福的 John Koza 等参加的 EvoNet 研讨会,探索融合GA与GP结构寻优,超越固定结构和数值优化的局限性。

国内也有不少的专家和学者对遗传算法的交叉算子进行改进。2002年,戴晓明等应用多种群遗传并行进化的思想,对不同种群基于不同的遗传策略,如变异概率,不同的变异算子等来搜索变量空间,并利用种群间迁移算子来进行遗传信息交流,以解决经典遗传算法的收敛到局部最优值问题

2004年,赵宏立等针对简单遗传算法在较大规模组合优化问题上搜索效率不高的现象,提出了一种用基因块编码的并行遗传算法(Building-block Coded Parallel GA,BCPGA)。该方法以粗粒度并行遗传算法为基本框架,在染色体群体中识别出可能的基因块,然后用基因块作为新的基因单位对染色体重新编码,产生长度较短的染色体,在用重新编码的染色体群体作为下一轮以相同方式演化的初始群体。

2005年,江雷等针对并行遗传算法求解TSP问题,探讨了使用弹性策略来维持群体的多样性,使得算法跨过局部收敛的障碍,向全局最优解方向进化。

基本框架

编辑

编码

遗传算法不能直接处理问题空间的参数,必须把它们转换成遗传空间的由基因按一定结构组成的染色体或个体。这一转换操作就叫做编码,也可以称作(问题的)表示(representation)。

评估编码策略常采用以下3个规范

遗传算法

a)完备性(completeness):问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现。

b)健全性(soundness): GA空间中的染色体能对应所有问题空间中的候选解。

c)非冗余性(nonredundancy):染色体和候选解一一对应。

目前的几种常用的编码技术有二进制编码,浮点数编码,字符编码,变成编码等。

而二进制编码是目前遗传算法中最常用的编码方法。即是由二进制字符集{0,1}产生通常的0,1字符串来表示问题空间的候选解。它具有以下特点:

a)简单易行

b)符合最小字符集编码原则

c)便于用模式定理进行分析,因为模式定理就是以基础的。

适应度函数

进化论中的适应度,是表示某一个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫评价函数,是用来判断群体中的个体的优劣程度的指标,它是根据所求问题的目标函数来进行评估的。

遗传算法在搜索进化过程中一般不需要其他外部信息,仅用评估函数来评估个体或解的优劣,并作为以后遗传操作的依据。由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。由此可见,在不少场合,将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的。

适应度函数的设计主要满足以下条件:

a)单值、连续、非负、最大化

b) 合理、一致性

c)计算量小

d)通用性强。

在具体应用中,适应度函数的设计要结合求解问题本身的要求而定。适应度函数设计直接影响到遗传算法的性能。

初始群体选取

遗传算法中初始群体中的个体是随机产生的。一般来讲,初始群体的设定可采取如下的策略:

a)根据问题固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。

b)先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中。这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。

Python实现

编辑

在GitHub上下载常用的 scikit-opt [2] 库。

Python遗传算法解决实数函数的优化问题

step1:定义目标函数,然后调用遗传算法求解器

1

2

3

4

5

6

7

defdemo_func(x):

    x1, x2, x3 =x

    returnx1 **2+(x2 -0.05) **2+x3 **2


fromga importGA

ga =GA(func=demo_func, lb=[-1, -10, -5], ub=[2, 10, 2], max_iter=500)

best_x, best_y =ga.fit()

Python遗传算法解决TSP问题(旅行商问题)

参考旅行商问题。从数据源中读取距离矩阵,然后调用遗传算法 [2] 进行求解。

1

2

3

fromGA importGA_TSP

ga_tsp =GA_TSP(func=cal_total_distance, points=points, pop=50, max_iter=200, Pm=0.001) 

best_points, best_distance =ga_tsp.fit()

一般算法

编辑

遗传算法是基于生物学的,理解或编程都不太难。下面是遗传算法的一般算法:

建初始状态

初始种群是从解中随机选择出来的,将这些解比喻为染色体基因,该种群被称为第一代,这和符号人工智能系统的情况不一样,在那里问题的初始状态已经给定了。

评估适应度

对每一个解(染色体)指定一个适应度的值,根据问题求解的实际接近程度来指定(以便逼近求解问题的答案)。不要把这些“解”与问题的“答案”混为一谈,可以把它理解成为要得到答案,系统可能需要利用的那些特性。

繁殖

繁殖(包括子代突变)

带有较高适应度值的那些染色体更可能产生后代(后代产生后也将发生突变)。后代是父母的产物,他们由来自父母的基因结合而成,这个过程被称为“杂交”。

下一代

如果新的一代包含一个解,能产生一个充分接近或等于期望答案的输出,那么问题就已经解决了。如果情况并非如此,新的一代将重复他们父母所进行的繁衍过程,一代一代演化下去,直到达到期望的解为止。

并行计算

非常容易将遗传算法用到并行计算和群集环境中。一种方法是直接把每个节点当成一个并行的种群看待。然后有机体根据不同的繁殖方法从一个节点迁移到另一个节点。另一种方法是“农场主/劳工”体系结构,指定一个节点为“农场主”节点,负责选择有机体和分派适应度的值,另外的节点作为“劳工”节点,负责重新组合、变异和适应度函数的评估。

术语说明

编辑

由于遗传算法是由进化论和遗传学机理而产生的搜索算法,所以在这个算法中会用到很多生物遗传学知识,下面是我们将会用来的一些术语说明:

染色体

染色体又可以叫做基因型个体(individuals),一定数量的个体组成了群体(population),群体中个体的数量叫做群体大小。

基因

基因是串中的元素,基因用于表示个体的特征。例如有一个串S=1011,则其中的1,0,1,1这4个元素分别称为基因。它们的值称为等位基因(Alleles)。

基因位点

基因位点在算法中表示一个基因在串中的位置称为基因位置(Gene Position),有时也简称基因位。基因位置由串的左向右计算,例如在串 S=1101 中,0的基因位置是3。

特征值

在用串表示整数时,基因的特征值与二进制数的权一致;例如在串 S=1011 中,基因位置3中的1,它的基因特征值为2;基因位置1中的1,它的基因特征值为8。

适应度

各个个体对环境的适应程度叫做适应度(fitness)。为了体现染色体的适应能力,引入了对问题中的每一个染色体都能进行度量的函数,叫适应度函数。 这个函数是计算个体在群体中被使用的概率。

运算过程

编辑

遗传操作是模拟生物基因遗传的做法。在遗传算法中,通过编码组成初始群体后,遗传操作的任务就是对群体的个体按照它们对环境适应度(适应度评估)施加一定的操作,从而实现优胜劣汰的进化过程。从优化搜索的角度而言,遗传操作可使问题

遗传过程

的解,一代又一代地优化,并逼近最优解。

遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。这三个遗传算子有如下特点:

个体遗传算子的操作都是在随机扰动情况下进行的。因此,群体中个体向最优解迁移的规则是随机的。需要强调的是,这种随机化操作和传统的随机搜索方法是有区别的。遗传操作进行的高效有向的搜索而不是如一般随机搜索方法所进行的无向搜索。

遗传操作的效果和上述三个遗传算子所取的操作概率,编码方法,群体大小,初始群体以及适应度函数的设定密切相关。

选择

从群体中选择优胜的个体,淘汰劣质个体的操作叫选择。选择算子有时又称为再生算子(reproduction operator)。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的,目前常用的选择算子有以

遗传算法

下几种:适应度比例方法、随机遍历抽样法、局部选择法。

其中轮盘赌选择法 (roulette wheel selection)是最简单也是最常用的选择方法。在该方法中,各个个体的选择概率和其适应度值成比例。设群体大小为n,其中个体i的适应度为,则i 被选择的概率,为遗传算法

显然,概率反映了个体i的适应度在整个群体的个体适应度总和中所占的比例。个体适应度越大。其被选择的概率就越高、反之亦然。计算出群体中各个个体的选择概率后,为了选择交配个体,需要进行多轮选择。每一轮产生一个[0,1]之间均匀随机数,将该随机数作为选择指针来确定被选个体。个体被选后,可随机地组成交配对,以供后面的交叉操作。

交叉

在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。

交叉算子根据交叉率将种群中的两个个体随机地交换某些基因,能够产生新的基因组合,期望将有益基因组合在一起。根据编码表示方法的不同,可以有以下的算法:

a)实值重组(real valued recombination)

1)离散重组(discrete recombination)

2)中间重组(intermediate recombination)

3)线性重组(linear recombination)

4)扩展线性重组(extended linear recombination)。

b)二进制交叉(binary valued crossover)

1)单点交叉(single-point crossover)

2)多点交叉(multiple-point crossover)

3)均匀交叉(uniform crossover)

4)洗牌交叉(shuffle crossover)

5)缩小代理交叉(crossover with reduced surrogate)。

最常用的交叉算子为单点交叉(one-point crossover)。具体操作是:在个体串中随机设定一个交叉点,实行交叉时,该点前或后的两个个体的部分结构进行互换,并生成两个新个体。下面给出了单点交叉的一个例子:

个体A:1 0 0 1 ↑1 1 1 → 1 0 0 1 0 0 0 新个体

个体B:0 0 1 1 ↑0 0 0 → 0 0 1 1 1 1 1 新个体 [1]

变异

变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:

a)实值变异

b)二进制变异。

一般来说,变异算子操作的基本步骤如下:

a)对群中所有个体以事先设定的变异概率判断是否进行变异

b)对进行变异的个体随机选择变异位进行变异。

遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。

遗传算法中,交叉算子因其全局搜索能力而作为主要算子,变异算子因其局部搜索能力而作为辅助算子。遗传算法通过交叉和变异这对相互配合又相互竞争的操作而使其具备兼顾全局和局部的均衡搜索能力。所谓相互配合.是指当群体在进化中陷于搜索空间中某个超平面而仅靠交叉不能摆脱时,通过变异操作可有助于这种摆脱。所谓相互竞争,是指当通过交叉已形成所期望的积木块时,变异操作有可能破坏这些积木块。如何有效地配合使用交叉和变异操作,是目前遗传算法的一个重要研究内容。

基本变异算子是指对群体中的个体码串随机挑选一个或多个基因座并对这些基因座的基因值做变动(以变异概率P.做变动),(0,1)二值码串中的基本变异操作如下:

基因位下方标有*号的基因发生变异。

变异率的选取一般受种群大小、染色体长度等因素的影响,通常选取很小

遗传算法

的值,一般取0.001-0.1。

终止条件

当最优个体的适应度达到给定的阈值,或者最优个体的适应度和群体适应度不再上升时,或者迭代次数达到预设的代数时,算法终止。预设的代数一般设置为100-500代。

不足之处

编辑

(1)编码不规范及编码存在表示的不准确性。

(2)单一的遗传算法编码不能全面地将优化问题的约束表示出来。考虑约束的一个方法就是对不可行解采用阈值,这样,计算的时间必然增加。

(3)遗传算法通常的效率比其他传统的优化方法低。

(4)遗传算法容易过早收敛。

(5)遗传算法对算法的精度、可行度、计算复杂性等方面,还没有有效的定量分析方法 [1] 

应用

编辑

由于遗传算法的整体搜索策略和优化搜索方法在计算时不依赖于梯度信息或其它辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学,下面我们将介绍遗传算法的一些主要应用领域:

函数优化

函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。

组合优化

随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在目前的计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。例如遗传算法已经在求解旅行商问题、 背包问题装箱问题、图形划分问题等方面得到成功的应用。

此外,GA也在生产调度问题、自动控制、机器人学、图象处理人工生命、遗传编码和机器学习等方面获得了广泛的运用。

车间调度

车间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。从最初的传统车间调度(JSP)问题到柔性作业车间调度问题(FJSP),遗传算法都有优异的表现,在很多算例中都得到了最优或近优解。

这其中比较高端的做法是:利用脑科学的科研成果,先从一个核心器官开始,例如大脑。

这两年, 频频有专家警示深度学习即将进入寒冬。 而同时, 一个名叫「类脑智能」的词汇火起来, 这个概念说的是一种比目前深度学习更加接近人脑的智能。 这背后的故事是, 深度学习的大佬,目前已经注意到深度学习的原创性进展面临瓶颈,甚至呼吁全部重来。为了拯救这种趋势, 模拟人脑再次成为一种希望。 然而这一思路是否经得住深度推敲?

AI 发展的危机人工智能, 目前多被理解成一个领域领应用的工程学科,从自动安防系统到无人驾驶是它的疆土,而模式识别和计算机专家, 是这片陆地的原住民。 目前的人工智能事实上以工程思维为主, 从当下人工智能的主流深度学习来看, 打开任何一篇论文, 映入眼帘的是几个知名数据集的性能比较,无论是视觉分类的 ImageNet,Pascal Vol, 还是强化学习的 Atari game。各种各样的 bench mark 和曲线, 让我们感觉像是一个 CPU 或者数码相机的导购指南。

那么, 是否这些在这些流行数据库跑分最高的「智能工具」就更智能? 这可能取决于对「智能」本身的定义。  如果你问一个认知专家「智能」是不是 ImageNet 的错误率, 那么他一定会觉得相当好笑。 一个人可能在识别图片的时候由于各种劳累和马虎, 在这个数据集的错误率高于机器。但是只要你去和它谈任何一个图片它所理解的东西, 比如一个苹果, 你都会震惊于其信息之丰富, 不仅包含了真实苹果的各种感官, 还包含了关于苹果的各种文学影视, 从夏娃的苹果, 到白雪公主的苹果。 应该说, 人类理解的苹果更加接近概念网络里的一个节点,和整个世界的所有其它概念相关联, 而非机器学习分类器眼里的 n 个互相分离的「高斯分布」。

如果我们认为,「智能」是解决某一类复杂问题的能力,是否我们就可以完全不 care 上述那种「理解」呢 ? 这样的智能工具, 顶多是一些感官的外延, 而「感官」是否可以解决复杂问题呢? 一个能够准确的识别 1000 种苹果的机器, 未必能有效的利用这样的信息去思考如何把它在圣诞节分作为礼品分发给公司的员工, 或者取悦你的女友。没有「理解」的智能, 将很快到达解决问题复杂度的上限。 缺少真正的理解, 甚至连做感官有时也会捉襟见肘, 你在图像里加入各种噪声, 会明显的干扰分类的准确性, 这点在人类里并不存在。比如下图的小狗和曲奇, 你可以分出来,AI 很难。

「语言」在人类的智能里享有独一无二的特殊性,而刚刚的「理解」问题, 背后的本质是目前深度学习对语言的捉襟见肘。  虽然我们可以用强大的 LSTM 生成诗歌 (下图), 再配上注意力机制和外显记忆与人类对话, 也不代表它能理解人类的这个语言系统。 目前机器对自然语言处理的能力远不及视觉(当下的图卷积网络或可以这个领域做出贡献)。

▲LSTM 加上注意力机制,可以生成极为复杂的宋词, 却不真正理解人类的语言

Chinese Song Iambics generation with neural attention-based model (Qinxi Wang 2016)Zhang, Xingxing, and MirellaLapata. “Chinese poetry generationwith recurrent neural networks.” Proceedings of the 2014 Conferenceon Empirical Methods in Natural Language Processing (EMNLP). 2014.


更加糟糕的还有强化学习, 深度强化学习已经战胜了最强大的人类棋手。 但是强化学习却远非一种可靠的实用方法。 这里面最难的在于目前的强化学习还做不到可扩展, 也就是从一个游戏的问题扩展到真实的问题时候会十分糟糕。 一个已经学的很好的强化学习网络,可以在自己已经学到的领域所向披靡, 然而在游戏里稍微增加一点变化, 神经网络就不知所措。 我们可以想象成这是泛化能力的严重缺失, 在真实世界里,这恰恰一击致命。

▲ 游戏里的王者不代表真实世界能用

事实上在很长时间里,人工智能的过分依赖工科思维恰恰给它的危机埋下了伏笔,在人工数据上破记录, 并不代表我们就会在刚说的「理解」上做进步。 这更像是两个不同的进化方向。 其实, 关于智能的更深刻的理解, 早就是认知科学家,心理学家和神经科学家的核心任务。 如果我们需要让人工智能进步, 向他们取经就看起来很合理。

脑科学与人工智能合作与分离的历史

虽然看起来模拟生物大脑是达到更高层次人工智能的必由之路,但是从当下的人工智能学者的角度,这远非显然。 这里的渊源来自人工智能的早期发展史,应该说深度学习来自于对脑科学的直接取经, 然而它的壮大却是由于对这条道路的背离。 我们可以把这个历史概括为两次合作一次分离。

第一次合作: 深度学习的前身-感知机。模拟人类大脑的人工智能流派又称为连接主义,最早的连接主义尝试就是模拟大脑的单个神经元。 Warren McCulloch 和 WalterPitts 在 1943 提出而来神经元的模型, 这个模型类似于某种二极管或逻辑门电路。事实上, 人们很快发现感知机的学习有巨大的局限性,Minksky 等一批 AI 早期大师发现感知机无法执行「异或」这个非常基本的逻辑运算,从而让人们彻底放弃了用它得到人类智能的希望。  对感知机的失望导致连接主义机器学习的研究陷入低谷达 15 年, 直到一股新的力量的注入。

第二次合作: 这次风波, 来自一群好奇心极强的物理学家,在 20 世纪 80 年代,hopefiled 提出了它的 Hopefield 网络模型,这个模型受到了物理里的 Ising 模型和自旋玻璃模型的启发, Hopefield 发现,自旋玻璃和神经网络具有极大的相似性。每个神经元可以看作一个个微小的磁极, 它可以一种极为简单的方法影响周围的神经元,一个是兴奋(使得其他神经元和自己状态相同), 一个是抑制(相反)。 如果我们用这个模型来表示神经网络, 那么我们会立刻得到一个心理学特有的现象: 关联记忆。 比如说你看到你奶奶的照片, 立刻想到是奶奶,再联想到和奶奶有关的很多事。 这里的观点是, 某种神经信息(比如奶奶)对应神经元的集体发放状态(好比操场上正步走的士兵), 当奶奶的照片被输入进去, 它会召唤这个神经元的集体状态, 然后你就想到了奶奶。

由于这个模型可以模拟心理学的现象, 人们开始重新对模拟人脑的人工智能报以希望。 人们从不同领域开始涌入这个研究。 在这批人里,发生了一个有趣的分化。 有的人沿着这个路数去研究真实大脑是怎么思考的, 有的人则想直接用这个模型制造机器大脑, 前者派生出了计算神经科学, 后者则导致了联结主义机器学习的复兴, 你可以理解为前者对猫感兴趣,后者只对机器猫感兴趣,虽然两者都在那里写模型。 CNN 和 RNN 分别在 80 年中后期被发现, 应该说, CNN 的结构是直接借鉴了 Husel 和 Wiesel 发现的视觉皮层处理信息的原理, 而 RNN 则是刚刚说到的 Hopefield 网络的一个直接进化。

一批人用模型研究真实大脑, 另一批研究机器大脑。

AI 与脑科学的分离: 90 年代后人工智能的主流是以支持向量机为代表的统计机器学习, 而非神经网络。 在漫长的联结主义低谷期, Hinton 坚信神经网络既然作为生物智能的载体, 它一定会称为人工智能的救星, 在它的努力下, Hopefield 网络很快演化称为新的更强大的模型玻尔兹曼机, 玻尔兹曼机演化为受限玻尔兹曼机, 自编码器, 堆叠自编码器,这已经很接近当下的深度网络。 而深度卷积网络 CNN 则连续打破视觉处理任务的记录,宣布深度学习时代开始。

然而, 如果你认为这一股 AI 兴起的风波的原因是我们对大脑的借鉴, 则一定会被机器学习专家 diss,恰恰相反,这波深度学习的崛起来自于深度学习专家对脑科学的背离。  CNN 虽然直接模拟了大脑视皮层结构的模拟, 利用了层级编码, 局部网络连接, 池化这样和生物直接相关的原理。但是, 网络的训练方法,却来自一种完全非生物的方法。  由于信息存储在无数神经元构成的网络连接里, 如何让它学进去, 也是最难的问题。很久以前,人们使用的学习方法是 Hebian learning 的生物学习方法, 这种方法实用起来极为困难。 Hinton 等人放弃这条道路而使用没有生物支撑但更加高效的反向传播算法, 使得最终训练成功。 从此数据犹如一颗颗子弹打造出神经网络的雏形 ,虽然每次只改一点点, 最终当数据的量特别巨大, 却发生一场质变。

CNN 能够在 2012 年而不是 2011 或者 2010 年开始爆发是因为那一年人们提出了 Alexnet。  而 Alexnet 比起之前的 Lenet 一个关键性的微小调整在于使用 Relu,所谓线性整流单元替换了之前的 Sigmoid 作为激活函数。Simoid 函数才是更加具有生物基础的学习函数, 然而能够抛弃模拟大脑的想法使用 Relu, 使得整个网络的信息流通通畅了很多。

深度学习另一条主线, 沿着让机器听懂人类的语言, 一种叫 LSTM 的神经网络, 模拟了人类最奇妙的记忆能力, 并却开始处理和自然语言有关的任务, LSTM 框架的提出依然是没有遵循大脑的结构,而是直接在网络里引入类似逻辑门的结构控制信息。

由此我们看到, 神经网络虽然在诞生之初多次吸收了生物学的原理本质, 而其最终的成功却在于它大胆的脱离生物细节, 使用更加讲究效率的数理工科思维。 生物的细节千千万, 有一些是进化的副产品, 或者由于生物经常挨饿做出的妥协, 却远非智能的必须, 因此对它们的抛弃极大的解放了人工智能的发展。

脑科学究竟能否开启深度学习时代的下个阶段

那么生物神经网络究竟可不可以启发人工智能呢? 刚刚的分析我们看到生物的细节并不一定对人工智能有帮助, 而生物大脑计算的根本原理却始终在推动深度学习 。 正如 CNN 的发展直接使用了层级编码的原理, 然后根据自己计算的需求重新设定了细节, 无论如何变化, 生物视觉处理和 CNN 背后的数学核心却始终保持一致。

那么目前的深度学习工具用到了多少生物大脑计算的基本原理呢, 答案是, 冰山一角。 如果说人工智能要继续革命, 那么无疑还要继续深挖这些原理,然后根据这些原则重新设定细节。 答案很简单, 宇宙的基本定律不会有很多, 比如相对论量子论这样的根本原理几乎统治物理世界。 如果生物大脑使用一套原理实现了智能, 那么很可能人工智能也不会差很远。即使细节差距很大, 那个根本的东西极有可能是一致的。

这样的数学原理应该不会有很多条, 因为人脑的结构一个惊人的特点就是虽然脑区非常不同, 但不同脑区的构造却极为相似, 这种相似性显示了大脑不同脑区使用类似的基本原理。 我们目前的深度学习算法, 无论是 CNN 还是 RNN,都只是发现了这个基本原理的某个局部。  发现这个基本原理, 恰恰是计算神经科学的使命。 对于智能这个上帝最杰出的作品, 我们能做的只有盲人摸象, 目前摸到的东西有一些已经被用到了人工智能里, 有些则没有,我们随便举几个看看。

确定已经被应用的原理:

1. 层级编码原理(Hierarchical coding): 生物神经网络最基本的结构特点是多层, 无论是视觉, 听觉, 我们说基本的神经回路都有层级结构, 而且经常是六层。这种纵深的层级, 对应的编码原理正是从具体特征到抽象特征的层级编码结构。 最有名的莫过于祖母细胞, 这一思路直接催生了以 CNN 为代表的深度学习。

▲ 皮层网络的构成往往是 6 层结构, 在不同的脑区反复出现

▲ 层级编码假设

2. 集群编码原理 (Distributed coding): 一个与层级编码相对应的生物神经编码假设是集群编码, 这里说的是一个抽象的概念, 并非对应某个具体的神经元, 而是被一群神经元所表述。 这种编码方法, 相比层级编码, 会更具备鲁棒性, 或更加反脆弱,因为删除一些细胞不会造成整体神经回路的瘫痪。 集群编码在深度学习里的一个直接体现就是词向量编码, word2vect,  词向量编码并没有采取我们最常想到的每个向量独立的独热编码, 而是每个向量里有大量非零的元素,  如此好比用一个神经集群表述一个单词, 带来的好处不仅是更加具有鲁棒性, 而且我们无形中引入了词语之间本来的互相关联,从而使得神经网络更好的吸收语义信息, 从而增加了泛化能力。 在此处, 每个词语概念都有多个神经元表达, 而同一个神经元,可以参与多个概念的描述。 这与之前说的每个概念比如祖母对应一个特定的神经元有比较大的区别。

然而目前的深度学习依然缺乏对集群编码更深刻的应用, 这点上来看,计算神经科学走的更远,我们使用 RNN 内在的动力学特性, 可以编码很多属性。

局部被应用或没有被应用的原理:

1.cortical minicolumn:皮层内的神经元都采取簇状结构, 细胞之间不是独立的存在, 而是聚集成团簇, 犹如一个微型的柱状体。  这些柱状体成为信息传输的基本单元。  这种惊人一致的皮层内结构, 背后的认知原理是什么呢?  目前还没有定论。 但是 Hinton 已经把类似的结构用到了 Capsule Network , 在那里, 每个 Capsule 对应一个簇状体, 而它们有着非常明确的使命, 就是记录一个物体的不同属性, 由于一个 Capsule 有很多神经元构成,它也可以看作一个神经元向量, 如果它用来记录一组特征, 则可以对付向旋转不变性这种非常抽象的性质。

▲ 神经簇细胞, 每个神经簇有 80-120 个神经元, 犹如大脑认知的基本单元, 你可以把某个组成神经簇的细胞集团看成矢量神经元

▲ Dynamic Routing Between CapsulesCapsule Network (Hinton)   每个 Capsule 取代之前的单个神经元, 能够同时感知物体的多个属性,如长度,宽度,角度,最终通过多个特征确定物体存在的概率, 因此比卷积网络具备表述更多不变性的能力, 比如旋转不变性

2. 兴奋抑制平衡:生物神经系统的各个组成部分, 尤其是靠近深层的脑区, 都具有的一个性质是兴奋性和抑制性神经元的信号互相抵消,犹如两个队伍拔河, 两边势均力敌(最终和为零)。这使得每个神经元接受的信息输入都在零附近, 这带来的一个巨大的好处是神经元对新进入信号更加敏感, 具有更大的动态范围。  这个原理已经被深度学习悄悄的介入了, 它的直接体现就是极为实用的 batch normalization, 输入信号被加上或减去一个值从而成为一个零附近的标准高斯分布(这和兴奋抑制平衡效果类似), 从而大大提升了网络梯度传输的效率。

3. 动态网络连接:生物神经系统的神经元和神经元之间的连接-突触本身是随放电活动变化的。 当一个神经元经过放电, 它的活动将会引起细胞突触钙离子的浓度变化,从而引起两个神经元间的连接强度变化。这将导致神经网络的连接权重跟着它的工作状态变化,  计算神经科学认为动态连接的神经网络可以承载工作记忆, 而这点并没有被目前的深度学习系统很好利用 。

▲ Synaptic Theory of Working Memory(Science)

4.Top down processing:目前深度学习使用的网络以前向网络为主(bottom up), 而事实上, 在生物大脑里, 不同脑区间反馈的连接数量超过前向的连接, 这些连接的作用是什么? 一个主流的观点认为它们是从高级脑区向感官的反向调节(top down), 如同我们所说的相由心生, 而不是相由眼生。 同一个图片有美女拿着蛋糕, 可能一个你在饥肠辘辘的时候只看到蛋糕而吃饱了就只看到美女。 我们所看到的,很大程度上取决于我们想要看到什么,以及我们的心情 。这点对我们的生存无疑十分重要, 你显然不是在被动的认知和识别物体, 你的感知和认知显然是统一的。 你在主动的搜索对你的生存有利的物体, 而非被动的感觉外界存在。这一点目前深度学习还完全没有涉及。 一个引入相应的机制的方法是加入从深层神经网络返回输入层的连接,这样深层的神经活动就可以调控输出层的信息处理,  这可能对真正的「理解」有着极为重大的意义。

▲ 给卷积神经网络加入从输出端返回输入端的连接, 是一个深度学习未来的重要方向 Deep Convolutional Neural Networks as Models of the Visual System

5,Grid Cells:海马栅格细胞是一组能够集群表征空间位置的细胞, 它们的原理类似于对物体所在的位置做了一个傅里叶变换, 形成一组表征物体空间位置的坐标基。为什么要对空间里物体的位置做一次傅里叶变换, 这里包含的原理是对任何环境中的物体形成通用的空间表示, 在新的环境里也可以灵活的学习物体的位置,而不是一下子成为路痴。

▲ Grid Cell 被用在强化学习里,使得我们可以得到更加强大的导航能力

我们对栅格细胞的认知可能只是更大的神经编码原则的一个局部,正如同傅里叶变换和量子力学之间存在着隐秘的联系。 虽然栅格网络,目前已经被 Deepmind 用于空间导航任务, 但是目前 AI 所应用的应该只是这一原理的冰山一角。

6.  Dale Principle:Dale Principle 说的是兴奋型和抑制型神经元 是完全分开的,犹如动物分雌雄。 兴奋性神经元只对周围神经元发放正向反馈(只分泌兴奋性递质, 如 Glutamine),让其它神经元一起兴奋, 而抑制型神经元只发放负向反馈(只分泌抑制型递质, 如 GABA),取消其它神经元的兴奋。 目前的深度学习网络不会对某个神经元的连接权重做如此限制 ,每个神经元均可向周围神经元发放正或负的信号。 这一原理到底对 AI 有没有作用目前未知。

7.Routing by Inhibitory cells :生物神经系统包含种类丰富的抑制型神经元, 它们往往在生物神经网络起到调控功能,如同控制信息流动的路由器,在合适的时候开启或关闭某个信号。 当下的 AI 直接用 attention 的机制, 或者 LSTM 里的输入门来调控是否让某个输入进入网络, 其它一点类似路由器的作用, 但是种类和形式的多样性远不及生物系统。

8. 临界:大脑的神经元组成一个巨大的喧闹的动力系统, 根据很多实验数据发现, 这个动力系统处于平衡和混沌的边缘, 被称为临界。 在临界状态, 神经元的活动是一种混乱和秩序的统一体, 看似混乱, 但是隐含着生机勃勃的秩序。 临界是不是也可以用于优化目前的深度学习系统, 是一个很大的课题。

9. 自由能假说:这个假定认为大脑是一台贝叶斯推断机器。 贝叶斯推断和决策的核心即由最新采纳的证据更新先验概率得到后验概率。 认知科学的核心(Perception)就是这样一个过程。

这里再说两句认知,认知的过程用机器学习的语言说就是用大脑的内部变量来模拟外部世界, 并希望建立内部世界和外部的一个一一映射关系。 这里我们说认知的模型是一个概率模型,并且可以被一系列条件概率所描述。如果用一个形象的比喻来说, 你可以把你的大脑看成一个可以自由打隔断的巨大仓库, 你要把外部世界不同种类的货放进不同的隔断,你的大脑内部运作要有一种对外界真实变化的推测演绎能力, 即随时根据新的证据调整的能力, 你和外界世界的模型匹配的越好, 你的脑子就运转越有效率。 认知是对外部世界运动的一种编码, 你可以立刻联想到机器学习里的表征方法(representation), 如果你熟悉 RNN 或 CNN 的 embeding 过程, 就会有一种豁然开朗的感觉。  这个假说的理论如果成立, 我们机器学习目前应当使用的只是冰山一角, 可以参考强化学习种的有模型学习。 更多内容见大脑的自由能假说-兼论认知科学与机器学习

10. 一些未被量化的心理学和认知科学领地,比如意识。 意识可以理解为自我对自我本身的感知。 关于意识的起源,已经成为一个重要的神经科学探索方向而非玄学, 最近的一些文章指出(The controversial correlates of consiousness – Science 2018),  意识与多个脑区协同的集体放电相关。 但是, 关于意识的一个重大疑团是它对认知和智能到底有什么作用, 还是一个进化的副产物。 如果它对智能有不可替代的作用, 那么毫无疑问, 我们需要让 AI 最终拥有意识。  一个假说指出意识与我们的社会属性相关, 因为我们需要预测它人的意图和行动, 就需要对它人的大脑建模, 从而派生了对自己本身大脑的感知和认知,从而有了意识。 那么我们究竟需要不需要让 AI 之间能够互相交流沟通形成组织呢? 这就是一个更有趣的问题了。

深度学习对脑科学的启发

反过来, 深度学习的某些发现也在反向启发脑科学, 这点正好对应费曼所说的, 如果你要真正理解一个东西, 请你把它做出来。由于深度学习的 BP 算法太强大了, 它可以让我们在不 care 任何生物细节的情况下任意的改变网络权重, 这就好比给我们了一个巨大的检测各种理论假设的东西。 由于当下对大脑连接改变的方式我们也只理解了冰山一角, 我们可以先丢下细节, 直接去检验所有可能的选项。 这点上看, 用深度学习理解大脑甚至更加有趣。

就那刚刚讲的兴奋抑制平衡来看, 最初人们对兴奋抑制平衡作用的理解更多停留在它通过对信号做一个信息增益, 而在深度学习兴起后 , 我们越来越多的把它的功能和 batch normalization 联系起来, 而 batch normalization 更大的作用在于对梯度消失问题的改进, 而且提高了泛化性能, 这无疑可以提示它的更多功能。 而最近的一篇文章甚至直接将它和 LSTM 的门调控机制联系起来。 抑制神经元可以通过有条件的发放对信息进行导流, 正如 LSTM 种的输入门, 输出门的作用, 而互相连接的兴奋神经元则作为信息的载体(对应 LSTM 中央的循环神经网络)

▲ Cortical Microcircuit as gated recurrent networks   DeepMind    LSTM 和 皮层通用回路具有极为密切的相关性

我们距离通用人工智能可能还有多远?

其实人工智能的目标就是找寻那个通用人工智能,而类脑计算是实现它的一个重要途径 。 通用智能和当下的智能到底有什么实质性的区别, 作为本文结尾, 我们来看一下:

对数据的使用效率: 比如大脑对数据的应用效率和 AI 算法并非一个等级, 你看到一个数据, 就可以充分的提取里面的信息,比如看到一个陌生人的脸, 你就记住他了, 但是对于目前的 AI 算法, 这是不可能的, 因为我们需要大量的照片输入让他掌握这件事。 我们可以轻松的在学完蛙泳的时候学习自由泳, 这对于 AI,就是一个困难的问题, 也就是说,同样的效率, 人脑能够从中很快提取到信息, 形成新的技能, AI 算法却差的远。

这是为什呢? 可能这里的挂件体现在一种被称为迁移学习的能力。虽然当下的深度学习算法也具备这一类举一反三的迁移学习能力, 但是往往集中在一些真正非常相近的任务里, 人的表现却灵活的多。这是为什么呢? 也许, 目前的 AI 算法缺少一种元学习的能力。 和为元学习, 就是提取一大类问题里类似的本质, 我们人类非常容易干的一个事情。 到底什么造成了人工神经网络和人的神经网路的差距, 还是未知的, 而这个问题也构成一个非常主流的研究方向。

能耗比:如果和人类相比, 人工智能系统完成同等任务的功耗是人的极多倍数(比如阿法狗是人脑消耗的三百倍, 3000MJ vs 10MJ 5 小时比赛)。 如果耗能如此剧烈, 我们无法想象在能源紧张的地球可以很容易大量普及这样的智能。 那么这个问题有没有解呢?  当然有, 一种, 是我们本身对能量提取的能力大大增强, 比如小型可控核聚变实用化。 另一种, 依然要依靠算法的进步, 既然人脑可以做到的, 我们相信通过不断仿生机器也可以接近。 这一点上我们更多看到的信息是, 人工智能的能耗比和人相比, 还是有很大差距的。

不同数据整合: 我们离终极算法相差甚远的另一个重要原因可能是现实人类在解决的 AI 问题犹如一个个分离的孤岛, 比如说视觉是视觉, 自然语言是自然语言, 这些孤岛并没有被打通。 相反,人类的智慧里, 从来就没有分离的视觉, 运动或自然语言, 这点上看, 我们还处在 AI 的初级阶段。 我们可以预想, 人类的智慧是不可能建立在一个个分离的认知孤岛上的, 我们的世界模型一定建立在把这些孤立的信息领域打通的基础上, 才可以做到真正对某个事物的认知, 无论是一个苹果, 还是一只狗。

沟通与社会性: 另外, 人类的智慧是建立在沟通之上的, 人与人相互沟通结成社会, 社会基础上才有文明, 目前的人工智能体还没有沟通, 但不代表以后是不能的, 这点, 也是一个目前的 AI 水平与强 AI(超级算法)的距离所在。

有的人认为, 我们可以直接通过模拟大脑的神经元,组成一个和大脑类似复杂度的复杂系统, 让它自我学习和进化, 从而实现强 AI。 从我这个复杂系统专业的角度看, 这还是一个不太现实的事情。因为复杂系统里面最重要的是涌现,也就是说当组成一个集合的元素越来越多,相互作用越来越复杂, 这个集合在某个特殊条件下会出现一些特殊的总体属性,比如强 AI,自我意识。 但是我们几乎不可能指望只要我们堆积了那么多元素, 这个现象(相变)就一定会发生。

至于回到那个未来人工智能曲线发展展望的话题, 我们可以看到, 这些不确定的因素都会使得这条发展曲线变得不可确定。 然而有一点是肯定的, 就是正在有越来越多非常聪明的人, 开始迅速的进入到这个领域, 越来越多的投资也在进来。 这说明, AI 已经是势不可挡的称为人类历史的增长极, 即使有一些不确定性, 它却不可能再进入到一个停滞不前的低谷了, 我们也许不会一天两天就接近终极算法, 但却一定会在细分领域取得一个又一个突破。无论是视觉, 自然语言, 还是运动控制。

能否走向通用人工智能的确是人工智能未来发展最大的变数, 或许, 我们真正的沉下心来去和大脑取经还是可以或多或少的帮助我们。 因为本质上, 我们在人工智能的研究上所作的, 依然是在模拟人类大脑的奥秘。 我们越接近人类智慧的终极算法, 就越能得到更好的人工智能算法。

推荐阅读更多精彩内容