演化计算可能是人工智能的下一个热点
演化计算--人工智能的下一个热点
演化计算经常用到智能优化和机器学习当中,但是这种机器学习跟大家平常说的深度学习的机器学习不是很一样。演化计算在机器人的脑体一体化设计中应该有相当大的用武之地。演化计算可能是人工智能的下一个热点。本文整理自2018深圳国际机器人与智能系统院士论坛上 IEEE Fellow 南方科技大学计算机科学与工程系主任姚新教授名为《为什么要研究演化计算?》的演讲稿。
IEEE Fellow南方科技大学计算机科学与工程系主任
姚新教授
《为什么要研究演化计算?》
大家可能不太知道南方科技大学下属的计算机科学与工程系,该系是由2016年8月份开始设立,2017年我们就有了第一批国家正式承认的本科毕业生,去年我们还招了19位硕士生和21位博士生,一年半以后,我们现在有了19位老师,未来计划达到55位。
南方科技大学计算机科学与工程系的研究领域分五大块,包括人工智能、数据科学、理论、系统与网络、认知与自主系统。人工智能小组里面有5位老师,我是其中的一位,其他几位老师都是来自不同的地方,背景也不完全一样,但都跟计算智能、神经演化有关系。除此之外,我们还有一些来自五湖四海的博士。我们主要从事很多机器学习、优化和它们交叉之间的研究工作,光学习不做优化是不全面的,学习的目的是用来做决策,所以需要把学习和优化结合在一起。优化考虑的方面很多,如多目标优化、动态优化和不确定环境中的优化等等。机器学习考虑较多的是机器学习、数据流的在线学习和不平衡类学习等。我们另外一个研究小组的课题是认知与自主系统,这里面有硬件和软件,硬件是无人机、群体机器人;软件是软件机器人。
为什么研究演化计算?
首先,我们来看看什么是演化计算?我不知道这年头还有多少人在自己写程序,写程序这个东西跟吃臭豆腐一样,要么特别喜欢、要么特别恨它。你要是特别喜欢或者特别恨写程序的话,有什么感觉呢?哪怕现在的计算机或者机器人聪明到如此程度,你通常会很使劲的敲键盘。为什么敲键盘呢?你写一个什么程序,不就是少一个逗号或者括号,编辑总是出错。大家写过程序就知道,空格有的编译的时候不一样,编译总出错,你就觉得这个很苦恼。你说人工智能智能到现在,人很少同样的错误犯两次,碰到这种人,这种人就无药可救了,但是计算机有时候就很麻烦,你说不就是少一个逗号吗,但实际上计算机不懂,所以计算机非常不灵活,还非常脆弱。
另外,制式与能力比较差。大家现在还有几个人在用十年前的电脑?没有,电脑三年换一次。人随着年龄的增长越来越聪明,机器人和计算机过几年一定要换掉。机器发展的道路和人发展的道路还不太一样,自然系统可以看作是一套计算系统,相比之下,自然系统中有一些特点的确非常好,但现在的计算机科学暂时还做不了,例如自我恢复功能,还有自适应能力等等。自然界有很多值得做计算机科学的人学习的地方,所以从自然界里面找灵感也不是计算机科学专有的,工程界也经常从自然界找灵感,比如说飞行器,从鸟的飞行到双固定机翼的飞机再到螺旋桨飞机,都是从鸟类的飞行中找寻灵感。
为何要向大自然借鉴?自然系统的问题求解方法跟计算机的问题求解方法互补,而且通常解出来的还比较简单,不是特别复杂。这就是为什么要对演化计算这种技术进行研究的原因。实际上,这种研究并不简单,并且不仅针对演化计算,而且也对深度应用的神经网络进行研究,而人工神经网络也是受到大脑的启发和影响,这个演化计算或者演化算法是通过生物的进化而来的。世界上所有的生物都是演化过来的,背后有一定的规律,哪怕从规律里面找出万分之一或者千分之一,就有可能对计算机设计带来不同的思路,这是做演化计算的一个出发点。
演化计算是做什么的?
下面举四个例子进行说明。
第一个例子,喜欢做机器学习的人就把这个东西叫做机器学习,实际上它是数据驱动建模型。给你一大堆实验数据,然后问你产生数据背后的抽象模型是什么,你帮我找出来,就是从数据中找规律。以铝合金材料的设计为例,计算机科学是一个很有趣的领域,我们看铝合金材料的设计,以前是建模,现在是尽量用演化算法,尽量减少在实验室的时间。假设我们知道合成这个铝合金,可以做初步的实验,在实验室里面以一定的力量去拉它和压它,失力以后看这个铝锭变形的情况,做实验的专家可以写成一组方程组,这里有四个方程组。这个例子里面有6个材料的常数,这个材料常数是真正设计新材料大家特别想知道的值,实际上我们不知道,这个值对材料科学家来说是材料,对做数学的计算机科学家来说相当于变量。我现在给你方程组,给你实验的数据,说这个材料在实验中是什么表现行为,你能不能把材料的常数找出来?这就是有点像解方程。解这个方程跟做计算机科学有什么关系?跟演化算法有什么关系?这个方程没有解析解,只能用数字解,有一种办法就是我们把它变成一个优化的方法,找数字解的时候看方程的左边和右边的差别是多少,加入方程两边的差别为零就找到了。怎么找呢?我找一点软件包,我去买一个世界上最好的软件包,牛津大学出来的软件包,把要找的6个变量的初始值给初始化,然后输进化,你就发现在这个问题上你得到的结果永远跟你输进去的初始值一样,因为很多数字软件包里面做的假设条件在实际问题中是不成立的,这种条件下你就可以用演化算法来做优化,这个优化就是解方程、找数字图。这个找出来的解,对设计铝锭、铝合金来说是最好的,就是最精确的数字常数、材料常数。
第二个小例子,前面讲了优化,但是优化的时候往往有一个不成文的假设,优化的环境和需要优化的目标是一成不变的,但是实际生活中是会变的。你给我一个目标和指标让我去做,我做一半把这个指标突然改掉,说这个不行,实际过程中是有可能发生的。例如在北方到了冬天,路上一定要撒盐化冻,不同国家有不同的法律,如英国有一个法律,A路在两个小时之内只要天气预报说路面温度2度以下一定要撒盐。现在有一个具体的问题,我有车队,有A路的路网,这个车队怎么把车派出去,使得两小时之内把所有路网走一遍。这里面各种各样的限制条件就使得实际遇到的问题在运筹学或者数学书中找不到。数学中说的是:假设卡车的容量是Q,但是我们看到的这个问题是一个政府、车队不大,就11辆车,而且路况不可以假设车以均匀的速度往前走,尤其是冬天。你有11辆车,做一个调度,走一半就剩10辆车了,有1辆车坏掉了,但是你还是要完成任务,怎么动态地完成,用数学优化方法已经解决不了,我们还是用演化算法,从自然界来的灵感做的算法能够解决这个复杂性问题。
第三个小例子,说一下多目标优化。“多、快、好、省”是70年代的口号,大家喜欢说,但是很难做到,多、快、好、省,不能单看一个指标,要几个指标同时满足,作为决策者需要选择各种各样的折中方案,这就是多目标优化的一个很典型的场景。
一个具体的例子是无人驾驶系统。无人驾驶系统真正靠的是软件在控制。你无论是买了一套软件系统还是自己开发一套软件系统,你必须论证这套软件系统是正确的。那就要做软件证明,如果证明不了,就要做软件测试,各种各样的环境都要试,但一个关键点是,要想把所有可能性都做到是不可能的。在有限的资源和有限的时间里,对大软件系统的各个模块进行测试,使得系统的测试准确率最大化,把有限的人和有限的钱分配到软件的大模块,目标是整个软件准确率最高,这些都需要用到演化计算的方法。
演化计算与机器人有什么关系?
最后讲到演化计算跟机器人的关系,在这一领域,有一个分支叫演化机器人。世界上的生物,包括人类的大脑都是演化出来的。既然生物界的大脑可以演化出来,为什么机器人不可以演化出来?
用演化的方法设计机器人或许有一点好处,那就是可以同时设计机器人的控制系统和机器人的形态。大部分时候做这两个领域的研究是由不同学科的人,一部分做机器学习,一部分做机器人,但实际上应该把设计控制器和设计控制形态的小组结合在一起,不应该分开。
给大家做一个模拟实验,这是人工构造一个游泳的线图,这个线图一节一节的,每一节都一样,除了有一个头在左边,一个尾巴在右边,中间每一节都一样。我要做一个很简单的实验,设计或者演化出来一个线图,能够游泳,从A游到B,越快越好,但是我又不告诉这个线图应该怎么游泳。我这里没有额外的信息告诉这个线图应该怎么游泳,只是告诉你给你这个任务,你从A游到B,直线游,游得越快越好。这个线图怎么控制呢?线图一节一节的,每一节都控制神经元运动,跟神经网络的神经元的位置有关系,这个线图上有圆孔,神经元分布在圆孔的物理位置上。我演化出一个线图,这个线图原来什么都不懂,就是从A到B,演化神经网络上的控制器。另一个实验中,我人为地把这个线图左边的线图往右偏,不是自己偏的,人为偏的,而右边的线图往左偏,伸不直。我做这个实验,同样的任务都是从A游到B,目标同样,都是游得越快越好,用的方法是用演化的方法。就是慢慢游,哪个游得快,适者生存,就传到下一代,一代一代慢慢传。我想看这两组实验出来神经网络的控制怎么样。你会发现非常有趣,在第一种情况下,这个线图没有变的情况下,形态还是一开始直的时候,最后演化出来的神经网络是右下角的图,红点是神经的位置,非常对称。人根本没有告诉它什么东西,唯一反馈信息就是游得快和慢。左上角是初始画的线图,怎么游是随机的,一开始在水里打转转。时间比较长,1190代以后,它找到一个非常快速的游泳线程。在第二种情况下,我把这个线图形态变掉,用这个虚线代表,这个神经网络的结构正好补充了这个形态上的缺陷,看你是往左歪还是往右歪。
参考:http://www.szrobot.org.cn/nd.jsp?id=564