首先,说一下,在机器学习领域(人工智能领域),神经网络和遗传算法一直是互相替代的关系,虽然也有过短暂的蜜月期(使用进化算法优化或初始化神经网络参数),但是总体说来,一般神经网络发展受限的情况下遗传算法方向的研究就会受重视,而神经网络发展好的时候(如最近10年-20年),那么遗传算法这样的进化算法在学术领域的受重视程度就会下降。
从计算本质来说,即遗传算法和神经网络算法的算法结构来说,在模型结构差不多的情况下(同为三层MLP的情况下),单次计算速度来看(一个step的计算优化用时),遗传算法用时远远高于神经网络算法,因为遗传算法这样的进化算法在计算时有大量的搜索操作,而这会造成大量的无法直接参与计算的操作,从而导致在单次计算方面遗传算法这样的算法用时要远高于神经网络算法;但是由于神经网络算法在一些问题上难以优化,比如收敛性差、容易陷入局部最优等问题,因此导致在一些问题上神经网络的优化steps远高于遗传算法,比如这样的一个问题,遗传算法优化1个step需要1秒,算法收敛需要10000steps,于是遗传算法解决该问题需要10000秒,而神经网络优化1个step需要0.001秒,但是受限需要100000000steps,于是神经网络解决该问题需要100000秒,可以看到这时候使用遗传算法会比使用神经网络来说用时更短,并且算法最终解的效果也不差于神经网络,这种情况下使用遗传算法是可行的,并且这时候因为遗传算法不使用GPU,而是CPU,而神经网络需要使用GPU,隐性的使遗传算法更具有优势。
但是,对于一些问题来说,遗传算法的优化步数可能不比神经网络算法少,甚至更多,那么这就悲剧了,比如某问题遗传算法需要10000 steps收敛,而神经网络需要100 steps收敛,同时由于遗传算法一个step的优化需要1秒,而神经网络一个step的优化需要0.001秒,于是就出现了使用遗传算法需要10000秒,而神经网络只需要0.1秒的现象,而这种情况下使用遗传算法则会明显差于使用神经网络算法。
经验来说,神经网络的收敛性还是很好的,都可以在一个比较合理的时间范围内得到解决,而遗传算法的收敛性是有着很大的不确定性的,尤其很多时候遗传算法的收敛性还要差于神经网络;虽然神经网络和遗传算法这样的AI算法都没有理论上的依据来保证其收敛性,但是由于神经网络在解决问题时的这种稳定性就导致遗传算法方向的研究难以吸引大多数人,毕竟神经网络一个step的优化用时是遗传算法的100分之一甚至是一千分之一,即使神经网络的某次训练收敛效果差我们也可以及早的发现并重新训练,但是遗传算法的每个step的用时那么高,那么等运行几百steps,几千steps,几万steps优化后发现效果不好时其时间成本也过高了。
尤其在一些大型的复杂神经网络结构上(高层数的神经网络结构),使用遗传算法来进行求解基本成了无法满足时间限制的事实了,因此现在使用遗传算法求解神经网络的研究也都是在一些较为简单的神经网络结构上,如:3层的MLP。
、
强化学习算法library库:(集成库)
https://github.com/Denys88/rl_games
https://github.com/Domattee/gymTouch
个人github博客地址:
https://devilmaycry812839668.github.io/