泛统计理论初探——初探遗传算法

神经网络学习-初探遗传算法

遗传算法理解与思路探讨
    本文将会简要的介绍遗传算法,该方法也是一种启发式搜索的算法,它是来源于生物学进化规律的经典概念,就是适者生存、优胜劣汰的思路。该算法是上个世纪70年代被提出的,它不需要像神经网络之类的方法需要对函数的连续性有要求,而是可以使用基于概率的思路去进行搜索,结合遗传、变异、选择的思路进行搜索,具有更好的全局搜索最优点的能力,该算法在各个行业应用广泛,比如信号处理、自动化控制、组合优化等领域。遗传算法基本的步骤和生物进化的步骤其实比较类似,下面介绍一下遗传算法的基本步骤:
    1、初始化种群,设置相关的参数和随机生成一些初始的种群,种群数量一般可以取100个,显然种群的数量越多搜索的能力会越好,但是搜索的速度会变慢;而种群的数量如果较少的时候,容易陷入局部最优点,但是搜索的速度会变得较快。
    2、适应度计算,为了评价每一个对象适应环境的情况,我们用适应度去评价每一个对象的适应情况。适应度计算其实是一个函数或者说是一个公式,它可以把当前对象的状态映射为一个可以比较大小的值,适应函数其实是一个连续非负的、简单计算的、泛化性较强的一个函数,具体可以看实际问题来确定适应度函数。当计算得到的适应度越大,说明这个对象的质量越好并且适应环境的能力较强。通过计算适应度可以为后续的选择提供基础,并且通过适应度来进行做优胜劣汰的标准。
    3、选择更好的对象,通过上一步的适应度计算后,选择适应度较高的对象进行后续的遗传,也就是留下适应环境较好的对象进行后代的遗传,而适应度较低的群体就被舍弃,无法进行下一步的遗传。对于选择的方法有很多,比如局部选择法、适应度比例法,而不同的方法选择的优等对象是不一样的,不同的问题可以选择不同的选择方法。
    4、交叉遗传过程,该操作其实就是生物的遗传操作,父代将优秀的基因传给子代,让子代拥有更好的基因。而在遗传算法中,我们会根据上一步选出的多个优秀的对象互相来进行交叉遗传,也就是“优中选优,后代更优"的思路。利用交叉算子去选取父代对象的部分结构进行重组后形成新子代对象,可以使得子代的适应度会更强,能够更好地适应环境。
    5、个体对象基因突变,即利用变异运算使得种群中的个体对象的基因串的某些基因值进行修改,增加了一部分的随机性。变异运算的方法有很多,比如有二进制变异、实值变异等;但它的基本步骤都是一样的,都是在最开始初始化参数的时候设定固定的变异概率,然后在变异步骤的时候对可以进行变异的个体去随机选择基因串的变异基因值进行变异操作。
    6、重复上述步骤2到步骤5,直到满足算法的终止条件,比如某一代的个体满足了适应度阈值或者种群的总体适应度不再提升,或者是达到了迭代的次数比如500代,就可以结束遗传算法,并且输出具有最大适应度的对象作为全局的最优解。
在这里插入图片描述
    对于遗传算法的理解,除了上述介绍的步骤外,还有最重要的下面三个细节:
    1)编码形式的选择,如果使用的是实值编码,那么容易导致陷入局部最优;如果使用的是二进制编码,那么计算会变慢并且编码含义难以理解,所以使用者需要根据实际问题去确定编码形式。
    2)初始化种群的选择,可以直接随机化生成后进行简单的筛选,留下较好的对象个体进行迭代;也可以根据具体问题的先验知识或者信息来确定初始化对象,从而使得初始化的对象尽可能地散布占据整个解空间。
    3)选择的方法,在计算得到适应度后进行选择,可以采用“轮盘赌",即各个对象被选择的概率和它自身的适应度值的大小成正比,适应度越大的对象越有可能被选上;而也可以采用“精英机制",即直接按照当前个体按照适应度进行排序后,选出适应度最高的K个对象进行后续的交叉遗传等操作。
    通过上述的介绍,我们对遗传算法有了初步的理解,该算法其实是比较有特点的,但是该算法的优缺点也是十分明显的。其中算法的优点就是:
    1、该算法可以进行并行化,伺时处理多个对象或者多个解,在当前大数据的背景下可以较好地在分布式集群上进行使用,加快搜索的速度。
    2、该算法的适用性和泛化性较强,不需要依赖其他先验条件或者是专业信息并且不受可导或者连续的限制,可以随意使用在不同应用、不同场景的问题。
    3、该算法在迭代的过程中,可以自动调整并控制参数,具有比较好的自适应性、自学习性,并且由于加入了基因突变的操作,陷入局部最优点的概率比较小,对全局搜索的最优解寻找是比较有利的。
    而遗传算法其实也有下面几个缺点,分别是:
    1、遗传算法的效率不够高,并且由于它比较趋向于模糊类的方法,所以很难评价或者确定它得到的解是查为比较好的解。
    2、不同的编码方式,比如实值编码、二进制编码会导致结果不一样,并且编码过程本身存在不一致或者不规范的问题。同时如果遇到实际问题中存在一些限制条件的化,会导致遗传算法得到的解丕够准确,因为遗传算法的处理思路并没有把约束条件体现出来。
    总的来说,遗传算法是一种泛化性较好、稳定行较强、适合并行化处理的启发式搜索方法,在各个行业应用非常广泛,在当前深度学习和大数据火热的时代,了解遗传算法原理并进行使用是非常有必要的,所以初学者在学习遗传算法的时候可以结合神经网络进行具体的应用和优化。

猜你喜欢

转载自blog.csdn.net/qq_26727101/article/details/107869535