2020, SEC, Semantic Approximation for Reducing Code Bloat in Genetic Programming


Abstract

Code bloat 是遗传规划 (Genetic Programming,GP) 中的一种现象,其特征是在进化过程中个体规模增大而适应度没有相应的提高。膨胀负向影响 GP 的表现,因为大个体评估更耗时,更难解释。在本文中,我们基于语义近似技术提出了两种减少 GP 代码膨胀的方法。第一种方法是用一个较小的近似语义树代替个体中的随机子树。第二种方法是将一个随机子树替换为一个语义上接近期望语义的更小的树。我们在大量的回归问题上对提出的方法进行了评估。实验结果表明,与标准 GP 和 GP 中的一些最新的 Bloat 控制方法相比,我们的方法有助于显著减少代码膨胀并提高 GP 的性能。此外,所提出的方法的性能与四种测试机器学习算法中最好的机器学习技术具有竞争力。

1. Introduction

遗传程序设计 (Genetic Programming,GP) 是一种以计算机程序的形式求解问题的进化方法 [20]。GP 系统是通过初始化一群个体来启动的。然后使用交叉和变异等遗传算子将种群进化若干代。在每一代,使用适应度函数对个体进行评估,并使用选择模式选择更好的个体来创建下一个种群。进化过程持续进行,直到找到所需的解或达到最大迭代数。

尽管 GP 已经成功地应用于许多实际问题,但它仍然没有像其他机器学习方法那样被广泛接受。支持向量机或线性回归 [27]。这是由于 GP 的一些重要缺点,如其较差的局部结构,不明确的 fitness landscape 和代码膨胀 [34]。其中, bloat phenomenon 是研究最多的问题之一。当个体生长得过大而适应度 [40、52] 没有相应的提高时就会发生膨胀。膨胀会给 GP 带来几个问题:进化过程比较耗时,解的解释比较困难,较大的解容易出现过拟合。迄今为止,已经提出了许多技术来解决膨胀。这些技术从限制个体大小到为 GP [8、11、14、25、26、36、42、43] 设计特定的遗传算子。

在本文中,我们提出了一种新颖的方法来控制 GP 膨胀,该方法利用了以前的研究 [8、9]。我们的方法基于语义逼近技术 (Semantic Approximation Technique,SAT),该技术允许将语义相似的小树生长为目标语义向量。利用 SAT,我们提出了两种减少 GP 代码膨胀的方法。第一种方法是子树近似 (Approximation,SA),在个体中随机选择一个子树,并用一个近似语义的小树替换这个子树。第二种方法是期望近似法 (Desired Approximation,DA),新树的生长是为了近似子树的期望语义而不是其语义。在使用基准、UCI问题和的大量回归问题上检验了膨胀控制策略的性能。我们观察到,与标准 GP 和 GP 中控制代码膨胀的最新方法相比,新方法有助于显著减少代码增长并提高演化解的泛化能力。此外,所提出的方法也优于三种流行的机器学习模型,并与第四种方法具有竞争力。

本文的主要贡献在于演示了如何利用语义近似(在第 4 节中提出)的思想来减少 GP 中的代码增长。与我们最初提出这种技术的 [8、9] 相比,这里我们提出了一种广义的语义近似版本和一种更好的控制代码膨胀的技术。此外,在更广泛的回归问题上,对所提出的方法进行了深入的研究,并与一些 GP 和非 GP 系统进行了比较。

本文余下部分的结构安排如下。在下一节中,我们介绍了论文的研究背景。第 3 节回顾了 GP 中代码膨胀管理的相关工作。第四节介绍了语义近似技术和两种减少代码膨胀的策略。第五部分介绍了本文采用的实验设置。第 6 节将所提策略的性能与标准 GP 以及近期的一些相关方法进行分析和比较。我们提出的方法的一些性质在第七节进行了分析。第八节将提出的方法与四种流行的机器学习算法进行比较。最后,第 9 节对全文进行了总结,并对未来的工作进行了展望。

2. Background

这一部分介绍了本文使用的一些重要概念,包括 GP 个体的语义和语义反向传播算法。

2.1. Semantics Definition

在使用 GP 解决问题时,我们最感兴趣的是个体(他们’做什么’)的行为。来具体说明哪些个体行为, 最近,研究人员在 GP [11,23,29] 中引入了语义的概念。形式上,个体(程序)的语义定义如下:

Definition 2.1. K = ( k 1 , k 2 , . . . k n ) K = (k_1 , k_2 , ... k_n) K=(k1,k2,...kn) 为问题的适应度情况。程序 p p p 的语义 s ( p ) s(p) s(p) 是在所有适应度情况下运行 p p p 得到的输出值向量。

这个定义也被称为采样语义 [48、49],它不是对个体行为的完整描述。个体的语义由关于一组训练值的输出的有限样本组成。此外,该定义仅对输出为单个实数的程序有效,如符号回归中。然而,它被广泛接受并广泛用于 GP [11、36、48] 中许多新技术的设计。

在过去的几年中,语义学一直是 GP 中的研究热点。对于 GP 中各种语义方法的全面回顾和比较,建议读者参考 [23]。通常在 GP 中集成语义方法来定义新的遗传算子,可分为间接和直接两种类型 [23]。间接方法通过 sampling and rejection 来达到所需的语义标准。它们改变了父代 [4、5、21、32、36、47、48、49] 的句法。相比之下,直接方法在不修改 [22、30、33、36] 的情况下生成具有期望语义标准的新子句,这些新子句包含了父母的完整语法。本文提出了 GP 中语义的一种新用法。具体来说,引入了一种生成语义近似(相似)于目标语义的新树的技术,并用于在两种不同的策略中减少代码膨胀。

2.2. Semantic Backpropagation

语义反向传播算法由Krawiec and Pawlak [36] 提出,用于确定个体中间节点的期望语义。该算法首先将问题(训练集的输出)的目标分配给根节点的语义,然后通过程序树向后传递进行语义目标传播,在每个节点上,算法计算该节点的期望语义,这样当我们将该节点上的子树替换为与期望语义具有相同语义的新树时,整个个体的语义将与目标语义相匹配。图 1 说明了使用语义反向传播算法为蓝色节点 N N N 计算期望语义的过程。图中 [1,2,3] 为适应度案例向量,计算每个节点的语义向量并显示在实心方框中。目标语义向量为 [5,8,16[,计算蓝色节点 N N N 及其父节点的期望语义并呈现在虚线框中。

  • 图 1:使用语义反向传播算法计算所选节点 N N N 的期望语义的示例。

语义反向传播技术随后被用于在 GP 中设计多个遗传算子 [36]。其中,随机期望算子 (RDO) 是最有效的算子 [33、36]。通过选择方案选择一个父节点,并选择一个随机子树子节点。语义反向传播算法用于识别子树 subTree 的期望语义。然后,调用一个过程在预定义的树库中搜索语义最接近期望语义的新树 newTree。最后,newTree 为替换成子树 subTree 创造一个新的个体。该算子在 [33、36] 中报告的实值问题和布尔问题上都有很好的表现。

3. Related Work

由于代码膨胀的负面影响,人们提出了许多方法来控制代码膨胀,减少其对 GP 性能的影响。一般来说,控制膨胀的方法可以分为三类:约束个体大小(constraining individual size)、调整选择技术 (adjusting selection techniques) 和设计遗传算子(designing genetic operators)。

3.1. Constraining Individual Size

早期的技术往往是基于限制个体大小来防止 [20、26] 膨胀。任何超过限制的大小或深度的后代都被拒绝,取而代之的是它的父母之一。后来的一些研究使用了由最佳个体规模 [42] 或种群平均规模 [38、39] 导出的动态极限。总体而言,这些方法在控制代码膨胀方面相对成功。然而,选择一个合适的限值是很困难的。如果将限制设置在过小的值,可能会阻止适应度值的提高。

3.2. Adjusting Selection Techniques

第二种方法是在选择时使用多个适应度值。简约压力技术 (The parsimony pressure technique) 对适应度函数中的大个体进行惩罚,或者在选择方法上倾向于选择较小的个体。适应度是个体大小与其适应度值 [6、7] 的线性组合,或者是对种群中的大个体 [38、39] 赋予一个非常差的适应度。

Lexicographic Parsimony Pressure (LPP) [25] 使用适应度和大小两个标准来比较布尔和人工蚂蚁问题中的两个随机个体。如果两个个体的适应度不同,则选择适应度较好的个体。反之,则选择较小的个体。Double Tournament [25] 使用两种锦标赛选择个体:一种基于适应度,一种基于大小。fitness tournament 的获胜者继续参加竞选,利用大小选择较小个体作为交配池,Biased MultiObjective Parsimony Pressure method (BMOPP) [35] 基于分母的概念将个体划分为一个 Pareto 层:如果个体 A 在所有目标上都与 B 一样好,并且在至少一个目标上优于 B,则个体 A 支配个体 B。形成帕累托图层后,采用锦标赛选择法进行个体选择。个体之间以概率 P P P 基于各自的适应度进行比较,以概率 1 − P 1 - P 1P 基于各自的 Pareto 层进行比较。

LPP的一个扩展是 Spatial Structure with Lexicographic Parsimonious Elitism (SS+LPE) [13]。SS + LPE 通过将种群映射到一个 2D 环面上来隐式地控制膨胀,并在该拓扑上定义个体之间的邻域关系。在每一代中,一个个体与它的一个邻居交配。然后将子代与使用 LPP 的父代进行比较,为下一代选择获胜者。最近,Chu 等人 [10、11] 提出了带大小的统计锦标赛选择 (TS-S) 来减少代码膨胀。为了在锦标赛中选择获胜者,TS-S 对采样个体的误差向量进行统计检验。对于一对个体,如果测试显示个体不同,那么适应度值较好的个体就是获胜者。反之,则选择较小的个体。

3.3. Designing Genetic Operators

最近,第三种方法受到了相当大的关注。 Alfaro-Cid 等 [1] 提出了 Prune and Plant (PP) 算子,将个体分为两个个体。选择一个随机子树,并用一个终端替换,产生第一个子代。选出的子树也作为第二个子代加入到种群中。操作符均衡 (OE) [14] 明确地关注于控制每一代程序大小的分布。OE 为个体确定一个目标直方图,其中 bin 的宽度决定属于 bin 的程序的大小,高度代表 bin 中个体的数量。OE 然后通过接受或拒绝每个新创建的个体到其对应的 bin 目标分布引导种群, 然而,OE 计算代价高昂,因为它需要产生和拒绝许多不符合期望目标分布的个体。

Silva 等人使用了一种平面目标分布 Flat-OE ) [41、43] 来解决 OE 的缺点。换句话说,分布的范围在整个搜索过程中保持不变。实证结果表明,Flat-OE 可以在控制膨胀的同时保持解的质量。Gardner 等 [16] 利用截断点概念和接受-拒绝方法扩展了 OE 来调整目标分布。截断点是指最小个体的大小达到了迄今为止最佳适应度的一定百分比。然后,该 bin 仅应用于大于截止点的个体。Trujillo 等人 [46] 在 pure-GP 系统中,利用 neat-crossover 算子控制代码膨胀。该算子首先识别出父节点之间的共享拓扑结构 S i j S_{ij} Sij,然后交换 S i j S_{ij} Sij 中父节点之间的单个内部节点。这样,子代保持了父代的拓扑结构。因此,交叉后得到的树的大小不会增加。然后,通过与局部搜索 [18、45] 相结合,将 neat-GP 扩展为 neat-GP-LS。

最近,Fracasso and Zuben [15] 提出了多目标随机相似性变异 (MORSM) 和多目标期望算子 (MODO) 来避免变异中的膨胀效应。首先,构造了一个受限候选列表 (Restricted Candidate List,RCL),该列表由从预定义库中取出的子程序组成,并且对于给定的一组目标(语义距离,个体长度)不受控制。然后,将父代的随机子树替换为 RCL 中选择的随机子程序。在 MORSM 中,RCL 使用的目标是子树和子程序之间的语义距离,而在 MODO 中,目标是子树和子程序处的期望语义 [36] 之间的语义距离。在下一节中,我们将介绍允许生成与目标语义相似的新语义树的语义近似技术。利用该技术,我们将提出两个新的遗传算子来减少 GP 码膨胀。

4. Methods

本部分提出了一种新的构造近似给定语义向量程序的技术,并在此基础上提出了两种减少 GP 代码膨胀的方法。

4.1. Semantic Approximation

在多个研究 [36、48] 中,搜索在语义上近似或相似于目标语义向量的树一直很重要。Nguyen 等人 [48] 通过从两个父代重复采样寻找一对语义相似的子树。Pawlak and Krawiec [36] 从一个预定义的库中找到了一个语义最接近期望语义的树。在本文中,我们引入了一种新颖的方法来生成目标语义的近似语义树。这种方法被称为语义逼近技术 (SAT)。

S = ( s + 1 , s 2 , . . . , s n ) S = (s+1 , s_2 , ... , s_n) S=(s+1,s2,...,sn) 为目标语义,则 SAT 的目标是以 n e w T r e e = θ ⋅ s T r e e newTree = θ · sTree newTree=θsTree ( s T r e e sTree sTree 是一个随机生成的小树)的形式生长一棵树,使得 newTree 的语义尽可能接近 S S S。设 Q = ( q 1 , q 2 , . . . q n ) Q = ( q_1 , q_2 , ... q_n) Q=(q1,q2,...qn)sTree 的语义,则 newTree 的语义为 P = ( θ ⋅ q 1 , θ ⋅ q 2 , . . . , θ ⋅ q n ) P = ( θ · q_1 , θ · q_2 , ... , θ · q_n) P=(θq1,θq2,...,θqn)。为了逼近 S S S,我们需要找到 θ θ θ 使得两个向量 S S S P P P 之间的平方欧氏距离最小。换句话说,我们需要最小化关于 θ θ θ 的函数 f ( θ ) = ∑ i = 1 N ( θ ⋅ q i − s i ) 2 f(θ) =\sum^N_{i = 1}( θ · q_i-s_i)^2 f(θ)=i=1N(θqisi)2 .二次函数 f ( θ ) f ( θ ) f(θ) 在式 (1) 计算的 θ ∗ θ^* θ 处取得最小值:

找到 θ ∗ θ^* θ 后,生长 n e w T r e e = θ ⋅ s T r e e newTree = θ · sTree newTree=θsTree,这棵树被称为语义向量 S S S 的近似树。图 2 给出了一个用 SAT 生长树的例子: n e w T r e e = θ ⋅ s T r e e newTree = θ · sTree newTree=θsTree 其中 s T r e e = ( 1 + X ) sTree = ( 1 + X) sTree=(1+X)。其中, X = { 0.1 , 0.2 , 0.3 } X = \{ 0.1,0.2,0.3 \} X={ 0.10.20.3} 为问题的适应度案例, S = { 0.5 , 0.6 , 0.7 } S = \{ 0.5,0.6,0.7 \} S={ 0.50.60.7} 为目标语义。利用方程 1 我们有 θ ∗ ≈ 0.5 θ^*≈0.5 θ0.5 .

与以往的技术 [36、48] 相比,SAT 具有一定的优势。首先,SAT 比 [ 36、48] 中的技术更容易实现,执行速度更快。随后,基于 SAT 的 GP 系统将运行得更快。其次,使用 SAT 的 GP 算子会比只在其他个体中搜索子树的算子 [48] 或从预定义库中搜索子树的算子 [36] 产生多样性更高的种群。因此,基于 SAT 的算子可能比 SSC [48] 和 RDO [36] 取得更好的性能。最后,可以通过限制 sTree 的大小来约束 newTree 的大小,这将在下一小节中用于设计两种减少 GP 代码膨胀的方法。

4.2. Subtree Approximation

基于 SAT,我们提出了两种减少 GP 中代码膨胀的技术。第一种技术是子树逼近(缩短为 SA)。在每一代,应用遗传算子生成下一个种群后,选择种群中 k % k\% k% 最大的个体进行剪枝。然后,在每个被选择的个体中选择一个随机子树。然后将该子树替换为更小的近似树。算法1详细介绍了该技术。

在算法 1 中,函数 InitializePopation () 使用 ramped half-and-half 方法创建初始种群。函数 GenerateNextPop( P i − 1 \Bbb{P}_{i-1} Pi1)通过交叉和变异产生模板种群。下一步选择模板种群 ( P i ′ \Bbb{P}^′_i Pi)中 k % k\% k% 的最大个体并将其存储在池中。之后的循环用于简化池中的个体。

对于池中的每个个体 I ′ I^′ I,使用函数 RandomsubTree( I ′ I^′ I) 在 I ′ I^′ I 中选择一个随机的子树 subTree,并随机生成一棵小树 sTree 1。计算 subTree 的语义并赋值给 function Semantics( subTree) 的 S (S 变为目标语义),在函数 Semantic Approximation (S) 中,构造了一个 n e w T r e e = θ ⋅ s T r e e newTree = θ · sTree newTree=θsTree 来逼近 S S S。最后,通过用 newTree 替换 subTree,将个体 I ′ I^′ I 简化为个体 I I I。个体 ( I I I)加入下一代, P i \Bbb{P}_i Pi。然后使用适应度函数对第 i i i 代种群进行评估,整个过程重复进行,直到终止条件满足。

  • 1为了减小膨胀,sTree 的尺寸需要小于 subTree-2 的尺寸。如果不满足这个条件,则重复选择 subTree 和生成 sTree 的过程。

4.3. Desired Approximation

第二种技术, 期望逼近 (Desired Approximation,DA) 试图同时实现两个目标:减少 GP 代码膨胀和增强对训练数据进行拟合的能力, DA 类似于 RDO [36],它首先使用语义反向传播算法 [36] 为大个体中随机选择的子树计算所需的语义。然而,DA 并不是在预定义的库中搜索树,而是使用 SAT 来生长一棵语义近似期望语义的小树。算法 2 完整地描述了 DA。

算法 2 的结构与 SA 非常相似。主要区别在第二回路。首先,计算 subTree 的期望语义代替 subTree 的语义。其次,增长 newTree 来近似 subTree 的期望语义 D D D 而不是其语义 S S S,通过用语义近似期望语义的 newTree 替换 subTree,预测个体将更接近最优值。

补充

Swarm and Evolutionary Computation(中科院一区
进化算法、智能计算领域主要刊物,审稿速度方面尚可。论文质量较高

References

[1] Nguyen Q U, Chu T H. Semantic approximation for reducing code bloat in genetic programming[J]. Swarm and Evolutionary Computation, 2020, 58: 100729.

猜你喜欢

转载自blog.csdn.net/qq_46450354/article/details/130029150
sec