GP:genetic programming
前几天听一个教授来做报告,提到了一个巨NB的算法GP,说是这个算法能自动提取特征,并且提取的特征的表现力竟比我们手动设计的特征如:SIFT,SURF,BRIEF等的效果好很多。最重要的是GP不需要对原始数据进行处理。这下我就不淡定了,我的研究方向刚确定啊,就是研究局部特征表示啊,这样一来我的研究方向岂不是没有出路啦。所以赶紧找资料研究一下,所谓知已知彼嘛。现在对GP算法只是一个大概的了解,还有一段很长的路要走。
Genetic Programming(GP)
总的来说GP与遗传算法很像,首先随机生成N个种子,然后通过杂交、变异生成子树,只不过这里的种子是Prgramming Tree(PT)。这里生成后代的方法还包括reproduction,即将父亲的fitness优异的PT复制下来,(这在人类的发展中当然不存在啦,要不然就长生不老咯)。
首先介绍一下GP的一些基本概念。
1.1 Representation: syntax tree
Max(x+x,x+3y)的语法树如图一所示。语法树的叶子结点在GP中称:terminal,中间结点称:function

图一
1.2 初始化种群
通过两种方法初始化种群:full 与grow,这两种方法的共同特点是树的深度不能超过一定的阈值。
Full:顾名思义即生成一棵完全树,叶子结点在同一层。该方法的缺陷是:树的规模一样大,因此随机性比较差。
Grow:该方法不要求生成一棵完全树,因此树的节点数目,规模等变化范围比较大。
GP中使用ramped half and half方法,后代一半通过full产生,一半通过grow产生。
1.3 选择
与遗传算法类似,GP也是通过基于fitness的概率选择模型。所谓fitness可以狭义的认为是对programming tree基于某种规则的评价值(评价标准依具体情况而定)。
后代的构成:reproduction mutation crossover
Reproduction:即将其直接复制到子代
Crossover:在一棵树中随机选择crossover point,然后去除该结点所在的子树,第二棵树进行同样的操作。然后将第二棵树的剩余部分加到第一棵树替代其crossover point形成一个新的后代。如图二所示

图二
Mutation:与crossover类似,在一棵树中随机选择crossover point,然后重新随机生成一棵programming tree 替代crossover point的位置。如图三所示

图三
接下来介绍GP算法的preparatory steps,在使用GP算法解决一个问题前,我们需要决定它的terminal set ,function set,fitness measure, some parameters to control the run.
2.1 terminal set
l The programm’s external inputs:如x,y,z......
l Functions with no arguments:例如rand()函数,返回一个随机数,使程序即使在具有相同的输入的情况下也可以表现出不同的行为。
l Constants
2.2 function set
函数集一般依具体问题而定,如果是一般是数学问题,那么函数集合可能是:{+,-,*,、}。如果是机器人擦地板的问题,那么函数集就可能是{move, turn , swish and mop}。图四是一些具体的例子。

图四
Function set必须具备完备性,也就是说它能表示其它任何操作。比如在一般的数学问题中,{+,-,*,、}就不是一个完备的function set,因为它不能表示指数,log等运算。
Function set 有两个非常重要的性质:type consistency and evaluation safety。
Type consistency:当我们进行crossover或者muation时,使用一个子树去替换crossover point,那么就必须保证新的子树的返回值与crossover的返回值一致,否则会影响到程序的运行结果。
Evluation safety:programming tree在运行过程中可能会遇到一些无效操作,例如除0。
解决方法:
protected version:即进行操作前检查参数,当出现非法操作 的时候返回默认值
Trap run_time exception: therefore reduce the fitness of programms that generate such errors,这样产生的问题是如果这样的异常比较多,那么会出现很多fitness相近的表达式,那么将无法有效的判断选取那棵树作为父亲。
2.3 fitness function
Fitness function即要评价programming tree,通过该值选择产生后代的种子。一般fitness function的形式依具体问题而定。如果我们的任务是产生一个表达式使其在(-1,1)之间的运算结果与x*x+x+1相同。那么我们可以定义fitness function为两个表达式之差在(-1,1)区间上的积分,值越小越好。
2.4 GP parameters
即指程序的控制参数,如树的规模,后代的规模,迭代次数等等
2.5 termination
有两种情况会导致程序终止:第一即fitness function值小于或大于某个值,找到问题的解。第二达到一定的迭代次数。对于2.3中的表达式匹配问题,如果fitness function值等于0程序终止。
现在有很多人将GP算法应用于CV领域,GP的一大优势是:我们可以将raw data直接送到GP让其自动训练特征。但GP有一个致使的缺点是它训练出的特征不具解释性,因为是模型自己训练出来的,还猜不透它是怎么样的,因此在一些安全系数比较高的领域,不敢贸然采取它的训练结果。
参考文献:A Field Guide to Genetic Programming

浙公网安备 33010602011771号