算法笔记(XIII) 对话进化算法

                                                  算法笔记(XIII) 对话进化算法_第1张图片

开篇语:

这部分问答来自于Zhang老师,Tang老师以及小组内讨论的记录整理而来,并加入自己的思考,重新整理,主题是关于进化算法的相关内容,并附加如一些关于计算机学科的基本认识以及机器学习的认识(说法不严谨,待考证)。

编辑这篇问答的目的在于整理自己的思路,为下一步打下基础,同时有些思想也值得其他相关领域已借鉴。

 

(1)进化计算发展这么多年,你有什么看法?

答:谈到进化算法,往往很多人想到如遗传算法、粒子群以及蚁群算法等相关算法,然后,对此就存在两种极端的认识:

1. 对于初学者来说,他们听到这些玄之又玄的名词立刻感到这个领域一定艰深,事实上,这些名词对我们对这个领域的普及推广曾经有过积极的影响,但是在领域逐渐成熟规范的今天,这些名词(如所谓的memetic algorithm)已经开始妨碍领域的规范化,这也是很多研究人的共同认识。

2. 第二个极端在于那些计算机学科内的质疑,特别是做确定型算法抑或近似算法的领域研究者。他们认为作为对NP难问题的妥协,这些算法的贡献并不是那么对计算机学科发展有意义;同时,对于那些数学科班出身研究优化的学者,他们认为进化算法的求解时近乎于“瞎猜”,说不上道理,而且不能分析,不能给大家保证。

这两种极端在领域中都是很常见的。在进化计算发展的前沿上,很多研究者对此进行思考,他们尝试回避关于 进化、遗传、基因、群体智能等等含糊而有故能玄虚之嫌的说辞,将进化算法并入规范的计算机科学体系中,并给其正名,例如称之为 分布式随机算法。我对此表示赞成,而且我甚至希望更加的彻底,将进化算法从人工智能学科中剥离开来,而将其并入 计算机算法 中,去除那些进化论、遗传学、群体智能等名词,将进化算法最本质的内容呈现出来。那么我们要问:什么是最本质的东西?

我想我在以前已经对此进行简单的说明,我希望将进化算法归为 启发式算法的一类,所谓启发式在于解决问题之前,我们引入先验的知识,或者即使不引入先验的知识,我们对问题做了假设,如此我简单的举个例子,我们使用进化策略的时候,经常在promising点的附近以一定的分布采样,这个过程抑或操作,尽管在名词上称为 变异(遗传学上的名词),但是其本质是一种假设:那就是在较佳点的附近,我们倾向能发现更好的解(连续函数的连续性),这一点是与我们的常识相符的,比如很多人一起在湖里钓鱼,我们事先并不知道湖那里鱼多。如果有一个人在某个位置钓到鱼,大家很快做出假设并猜测:这个位置的附近鱼一定很多。我们再举一个离散问题的例子,这也相关我们熟悉的遗传算法,众所周知,它的主要理论是:模式定理,其繁复公式之下表示的是:那些优良的而短的编码段会在进化中占优而保留,并期望组合成一个优良的解。显然这是一个假设,如果我们特意构造一个反例,即那些好的短的编码段组成的是一个差解。算法在此问题上就成为无效的了,这就是著名的欺骗问题。它在一定程度上说明了采用二进制编码以及传统交叉操作的遗传算法的搜索极限,总有它不能求解的问题。这也是我在《解决问题的原则》中谈到的NFL原理。把握这个原则,相信大家很容易发现自己研究领域中一些方法的局限性,就此不再多说。

 

(2)能给我们整理一下这个领域的发展过程么?

答:这是一个很有挑战的问题,相信我是没有能力能够在浩如烟海的文献中把握领域的发展历程的,在此我投石问路,尝试回答这个问题。

在计算机科学的早期,科学家和工程师都发现在纷繁的问题上,传统的方法的局限性。如此他们采用一些简单而有效的算法去求解这些问题,并展现了很强的效果,如著名的蒙特卡洛算法(1940s,我认为它是以后概率算法的原型)、坐标轮换法(1960s)、线搜索法(一维,1960s)、单纯形方法(1965,Nelder-Mead 方法)、模式搜索(1961)等,他们是经典的现代启发式算法,间接启发了进化算法的提出。现今就有很多的进化算法借鉴他们的思想,甚至直接将他们作为算法的一部分操作。也就是在这个时期,现今属于 进化计算 范畴的 进化策略(1960s) 出现了,并在七十年代获得近一步发展(不同于进化算法,进化策略使用变异与选择,而不使用交叉操作,不过现今已经很模糊)。

在后面的发展中,在现代启发式方法的范畴内,很多类似于迭代寻优思路的算法不断提出,如借鉴统计物理的模拟退火算法(1983)、禁忌搜索(1986),他们同样启发后期的算法设计。

在八十年代,Holland教授坚持遗传算法的研究并逐渐获得认可,他出色的借鉴达尔文进化论的思想,并引入交叉、变异等名词,一直沿用至今,在那个时代,很多关于这种跨学科的知识引入进化计算中,并对后来新算法的提出产生深远影响(当然也有我说的负面影响,各种含糊的名词充斥学科,严重妨碍学科的规范化,甚至是同行的学术交流)。

在之后,Goldberg给出了遗传算法的基本理论,使得算法更加的规范(事实上现在他们仍做进化计算的基础工作)。应该在那时候,算法摆脱了一些玄虚的名词描述。

在九十年代,进化算法获得蓬勃的发展,也就是在这个阶段,如蚁群算法(1992)粒子群算法(1995)以及差异进化算法(1996)提出,并逐渐获得认可。

进入2000年后,对以上算法的改进以及诸多应用的论文如雨后春笋,在单纯算法领域,仍摆脱不了:交叉,变异,选择的框架,因此,能获得认同的新算法并不多,基本上是基于以上框架。

同时,由于机器学习的蓬勃发展,很多研究人员试图将机器学习的经典思想和方法引入优化中(如果没有说错的话,学习和优化是一个互为表里的过程,因为进化算法的过程也是一种对目标函数学习并猜测的过程,这符合人思考的方式)。估计分布算法(1999)也就是在世纪之交提出并获得发展,并已经渗透到离散的组合优化与连续优化。值得一提的是估计分布算法也就是诞生于Goldberg(前面提到的将遗传算法定理化的专家)领导的伊利诺斯大学遗传算法实验室,他们引入概率分布模型的构造,贝叶斯学习,图模型等技术,尝试去学习问题的内在结构,以解决问题。他们的思路摆脱了进化算法的交叉变异选择框架,而采用构造模型并采样的广义模型。尽管思路很好,但是这一类算法在复杂的连续问题上获得了障碍,近年并没有获得突破(而且很可能精确而高效的学习问题的内在结构似乎比做一个好的猜测要难,我觉得只是当今他们面临的最大障碍)。

 

(3)听你那么一说,我咋感觉这么多算法咋都有点相似呢?好像有点玩概念之嫌。

答:你说的很对。我觉得可以从以下方面来讲:

首先这个领域是一个互相交融的学科,所以有时难分你我。来自进化论,统计物理,随机过程,经典数值分析方法,图论与贝叶斯理论,多元统计思想,经典数值优化算法,甚至是机器学习的核主成分分析。诸多方法抑或技巧各有优缺,为了避免沦为形式化的空泛说明,我简单说一说这些学科对算法设计者的启发:

进化论中的思想,如染色体(或称基因)的交叉变异,多个种群的协同进化,种群的迁徙等,这些方法来自于自然界,但是都有其在研究领域(context)下的独特意义(如跨越局部极值点、提高对广泛问题的适应能力)。在问题中他们都展现了很好的效果。

统计物理的基本假设:各态历经假说在算法中有所应用,例如产生混沌序列进行对解空间进行搜索。

随机过程的知识多用于分析进化计算的行为,如经典的马尔科夫链。

贝叶斯理论是人类常识的形式化表述,用于如估计分布算法中对变量依赖性的学习中,而图就是这种依赖关系的模型。

多元统计思想应用就更为广泛,如正交试验,主成分分析(PCA),典型成分分析(ICA),聚类分析(如特别适合进化算法框架的Kmeans方法)

经典数值分析以及优化算法的引入也广泛,例如构造二次函数模型去逼近抑或猜测优化函数的邻域结构(即landscape,不过就将进化算法延伸到了应用数学或者计算数学领域了),因为须回避优化函数的解析式,故退而求其次,采用采样点估计(插值等手段)代替一次或更高次的导数信息。另一个思路是加入梯度信息的局部搜索机制,不过这样显然违背黑盒优化的基本claim,因此在领域受争议。

机器学习的方法,如鉴于PCA只能获取线性结构的局限,kernel-PCA方法同样是对函数的局部非线性结构进行学习的方法。不过核函数的选择依赖于问题的特性,因此在领域没有获得广泛的认可。

其次,从领域的历史来看,各个算法的发展互相重叠,很可能互相借鉴互相补充,导致现今算法看起来似乎都有相似。

 

(4)进化算法这个领域的一些定义似乎不清?是这样么?

答:是的,我认为只是这个领域的很大问题。如果一个领域的一些基本问题定义不明确,那么显然这个学科离规范化还是有很大的距离。我来简要说明领域的那些定义不清晰:

全局与局部:经常在文献上见到,这个算法或者操作的全局搜索能力强或者局部精度很高等等,这些往往并不能很好的引导读者。甚至有人试图说,在开始的时候注重全局能力,在后期强调局部能力。什么是全局?什么是局部?什么时候是在全局搜索?这些问题都是难以回答的。说出这种话在论文审稿的时候很可能被审稿人抓住把柄。难怪有人说,知道算法在某个问题何时是全局搜索何时在局部搜索,本是就和这个问题一样难,甚至比问题本身还难。如果你强行界定,设置阈值,如果这个阈值对问题不敏感还好,如果敏感显然,你已经潜在将你的先验知识加入了,你怎么知道这个问题就适合这个参数值呢?

问题定义不清:特别体现在 动态优化问题的定义上,很多文章自己定义问题,自己提出解决方案,这显然不是一个好的导向。

评价标准不清:体现在多目标优化中,各人使用自己设置的标准将自己的算法和别人的算法进行比较,甚至只依赖于算法产生的直观图像作为评价的标准,显然这都不利于领域的长期发展。

最后,我认为这些定义将随着领域的逐步规范而清晰起来,大家拭目以待。

 

(5)每一个研究领域都有它的根本问题以及基本矛盾,你能说说进化算法领域内的问题么?

答:我认为基本问题仍围绕着《解决问题的原则》上提到的五个原则,进化算法解决的是一类黑盒问题,如在实际问题中无法获知问题解析式的(甚至本是就无法解析表达的问题),那么意味着在初始化时,我们假设对问题是一无所知的。但是,这显然违背原则。我们一定潜在的隐性或显性的加入了我们对问题的认识,这些知识本身伴随着编码方式,交叉操作方法、变异方式,甚至是选择机制已经嵌入到我们的算法中了,即使我们并不知道他到底起了什么作用。那么,不如我直接说,这个领域本身就是一个矛盾:

问题的初始假设(我们对问题一无所知)和算法利用的假设间(我们必须加入自己的认识才能使算法有效)的矛盾。

另一个值得一提的问题就是,每个算法由于其基本的假设必然有其能力的极限,这一点可在今年的文献中一窥端倪,在连续全局优化领域,遗传算法,差异进化,粒子群并没有获得本质的提升,一些问题求解不了,仍求解不了。如进化策略范畴内的CMA-ES(2001)已经达到很好的效果,本质上并没有突破(重启动另当别说)。

 

(6)进化计算似乎和机器学习有点关系啊,两者有什么异同吗?

答: 进化计算入门的门槛很低,可以说工科相对理科并没有任何的劣势,但是要真正做好一个有效而在进化计算范畴内有效的算法是不容易的,很多巧妙的算法尽管简单,但是隐含很深的道理。特别是,好的算法要在领域基本假设和算法假设间做个很好的平衡是很难得。

机器学习的入门门槛较高,需要广泛而扎实的数学知识,如线性代数,统计学,泛函分析,甚至是微分几何。但是一旦熟悉这个领域,往往很多论文沦为玩数学技巧,类似于控制理论中,自己定义问题,然后自己了解这种定义下适合什么样的数学处理或者技巧,然后就得出方案,现在这个领域就有这样的现象。

 

(7)进化算法的未来趋势是怎样的?或者更直接,未来有哪些方面更可能出成果?

答:直接的说,我期望这个领域能从问题的特性出发,进行研究,而不是单纯的拼结果的那点微不足道的精度。我觉得未来的趋势可以从问题的特性上出发进行阐述:

1.高维问题,低维问题不论是在离散优化抑或连续优化中已经取得很好的效果,要再做出更加好的效果并不那么容易,相对而言,高维问题可以拉大各个算法的差异,也更加有挑战性。

2.多变量耦合问题。这个问题是包括遗传算法,粒子群,差异进化等算法的最大缺陷。单纯的依靠交叉和变异似乎对于多变量的耦合与事无补。甚至有人质疑,交叉和变异真的是那么有效么?

等等

你可能感兴趣的:(算法笔记)