Answers:
使用遗传算法(GA)训练神经网络(NN)不仅可行,而且在某些特定领域,其性能足以频繁使用。一个很好的例子是增强拓扑的神经进化或NEAT,这是在简单环境(例如游戏)中生成控制器的成功方法。
但是,在更一般的情况下,该方法无法很好地扩展到具有许多参数需要调整的大型深度网络。
遗传算法和其他全局搜索最佳参数的方法很健壮,而基于梯度的算法则没有。例如,您可以使用步进函数激活或任何其他不可微分的激活函数训练NN。他们在其他地方也有弱点。与用于神经网络的遗传算法有关的一件事是,权重参数在某些组合中是可以互换的,但在其他组合中则是高度相关的。合并两个具有不同参数的性能良好的神经网络-您将在GA中交叉操作-通常会导致第三个网络的性能不佳。NEAT的成功部分在于找到一种通过“增长” NN的连接并在相似的神经网络之间进行匹配来解决该问题的方法。
基于梯度的方法效率更高。通常,不仅可以在神经网络领域中,如果可以计算函数相对于参数的梯度,那么可以比大多数其他优化技术更快地找到最佳参数。准确的梯度至少可以保证从单个评估中获得较小的改进,而其他大多数优化器都属于无法重现的生成和重试范式。倾向于寻找局部最优的弱点已经证明不是神经网络损失函数的主要障碍,并且已经通过使用基本梯度下降的扩展(例如动量,RPROP,Adam等)获得了一定程度的成功。
实际上,在大型多层网络上,梯度方法可能比GA搜索(例如用于查找网络参数的NEAT)快几个数量级。您不会找到任何解决了ImageNet甚至是MNIST的经过GA培训的CNN,而GA都没有发现网络权重。但是,并非100%排除了GA或至少其中一些变体。例如,这个2017年的博客回顾了最近的论文,包括图像分类器的大规模进化,该论文探索了使用GA来发现NN 超参数,这是机器学习中的一项重要任务,并且使用基于梯度的方法不太容易处理。