CGP与演化神经网络

Posted 知图智演

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGP与演化神经网络相关的知识,希望对你有一定的参考价值。

一、Cartesian genetic programming(CGP)介绍

GP 和EP都倾向于使用解析树表示,但在解析树中基因型和表现型之间没有区别。树是图的一种特殊形式,其中两个节点之间最多只能有一条路径(序列就是连接的节点形成的一条路径)。在笛卡尔遗传规划(CGP)中,基因型表示为一列整数映射到有向图,而不是树,其长度是固定的,而表现型的长度取决于基因的数量。中性是指具有相同适应度的基因型。在一个基因融合的群体中,中性的存在可能会进一步提高适应度。值得注意的是,只有当中性变化有可能改变未来基因型变化的潜在影响时,基因型冗余产生的中性才有用。

在CGP中,CGP被表示为一种索引图,该索引图是以线性整数字串的形式编码的,其输入、终端集以及输出节点都按照顺序进行编号,终点函数也分别编号,从而将基因型被一一映射到索引图中。由于存在大量冗余,有大量的基因型映射到相同的基因型。在进化的开始阶段,节点冗余非常大,因为在早期的种群中,许多节点没有连接起来。在运行过程中,节点冗余逐渐减少到一个平均节点数。CGP的另一种冗余形式,也存在于所有其他形式的GP中,是功能冗余即多个节点实现了一个子函数,而实际上可以用更少的节点实现该子函数。冗余节点数量的增长构成了膨胀。第三种形式的冗余被称为输入冗余,即某些节点函数没有连接到某些输入节点。未连接的节点可能会经历中性更改,然后连接起来——这可能是实现更高的适应度所必需的。一个具有冗余输入的节点,在经历了改变节点函数的特性的突变之后,可能突然变得有用起来。功能冗余可能对目标函数或程序的可演化性有积极作用[1]。

 

二、演化神经网络介绍

       遗传算法是一个通用的框架,可以根据具体问题来应用遗传算法,整体框架可以分为三个部分:交叉、变异与适应度。整个流程可以理解为有一个种群,不断的进行交叉与变异,使用评价函数来评估他们对当前环境的适应度,适应环境的双亲与后代会被保留,不适应的将会被淘汰,通过不断迭代,最终留下最适应环境的个体。

演化神经网络的主要流程是:生成初始种群,确定好种群规模后,循环生成染色体,将每一代染色体加入到初始种群中;按照个体网络(chromesome)生成规则生成个体网络。

   

三、CGP与演化神经网络的区别与联系

将遗传算法融入神经网络可以获得更好的效果,比如将进化策略融入了CNN模型,并实现了程序自组网络,得到的网络分类效果比人工组多层网络的训练效果要好 。建立的整体流程如下所示:


1.种群规模      

    101个网络       

2.交叉        

     pass        

3.变异        

   两种变异:

       3.1 change learningrate

       3.2 change networkstructure

             3.2.1 remove layer

             3.2.2 add layer

             3.2.3 replacelayer         

 4.适应度函数        

     fitness = accuracy ofdataset

 while condition

     Parent Selection (rouletteselection method)

     Mutuate two times

     Select the best offspring

     Evaluate generation innew train epoch

     generation (generation +1)

 

conditon:

种群里的网络每次迭代训练若干次(人为设定)

or

将适应度fitness 倒数前十的网络杀掉,直到剩下的最后一个网络


    下图描述了一个具有6个输入和3个输出的程序的基因型和基因型-表现型映射的例子:

图1 基因型——表现型映射图

上图中有6个输入、3个输出和3个函数的程序(0、1、2矩形节点,斜体表示基因型)。灰色方块表示未连接在索引图内的节点。

    CGP 与演化神经网络的相同之处在于他们都使用上一个节点的输出当做下一个节点的输入,在神经网络中使用的是上一层节点的输出作为下一层节点的输入。在CGP索引图中,如果0、1、2使用不同的函数就会产生不同的映射,这与神经网络当中使用的函数也是不同的,神经网络当中还要涉及到归一化(在后面会讲到)。而且,如果基因型有所改变,整个索引图网络的连接方式以及输出都会相应改变。这里以BP网络为例进行说明,一个BP网络结构如下图所示:

CGP与演化神经网络

图2 一个简单的BP网络结构

    下图是一个更加简化的神经网络:

CGP与演化神经网络

图3 BP网络的简化图

不算输入层,上面的网络结构总共有两层,隐藏层和输出层,它们“圆圈”里的计算都是下图的计算组合:

图4 隐层的计算公式

使用函数运算是为了将输出的值域压缩在(0,1),也就是进行归一化,因为在这个网络中每一层输出的值都将作为下一层的输入,只有经过归一化,才可以避免某个输入无限大,从而导致其他输入无效,最终网络训练效果会非常不好。在CGP索引图中并没有如上图所示的权值,整个网络中只有前馈,并没有反馈,而神经网络具有反向传播,并且通过反馈对连接权值进行调整,其完整的网络结构如下图所示:

图5 完整的BP神经网络结构图

神经网络的训练是有监督的学习,也就是输入X有与之对应的真实值Y,神经网络的输出Y与真实值之间的损失LOSS就是网络反向传播的东西,整个网络的训练过程就是不断缩小损失LOSS的过程。在CGP索引图网络中,没有损失LOSS值,只是通过前馈的方式传递计算误差,整个索引图的编码方式都是以基因型为准的,神经网络中也不会有节点冗余、功能冗余和输入冗余的情况出现(本节引用链接:)。

    综上,CGP索引图与演化神经网络可以理解为“形似”但原理上还存在很多差别,它们的相似之处在于在整个网络中都使用上层个节点的输出当做下一层节点的输入;它们的不同之处在于在神经网络中,要对每一个输入进行归一化计算,而在CGP中没有归一化操作。CGP存在的冗余问题在神经网络中是不存在的。CGP索引图的输入、终端集、终点函数以及输出节点都是按照顺序进行编号的并且节点之间没有设置连接权值,但神经网络每一层的节点之间有连接权值并且通过反向传播将计算的损失LOSS值在网络中进行一个反馈,从而不断降低LOSS值,使整个网络达到更好的训练效果。


参考文献

[1]Miller J, Thomson P. Cartesian Genetic Programming In: Proc. Of the Third European Conference on Genetic Programming, LNCS 1802[J]. 2000.

其他参考资料具体见

https://blog.csdn.net/chile_wang/article/details/101047811

图1来源具体见参考文献[1]

图2、3、4、5来源具体见




以上是关于CGP与演化神经网络的主要内容,如果未能解决你的问题,请参考以下文章

网络文件系统的演化

城市轨道交通灾害链演化网络模型及其风险分析——以地铁水灾为例

关于网络安全攻防演化博弈的研究小议

从分歧走向融合:图神经网络历经了怎样的演化之路?

AI-Info-Micron:用内存解决方案演化神经网络智能

PyTorch 深度学习实战 | DIEN 模拟兴趣演化的序列网络