为什么不使用遗传算法来优化神经网络?


13

据我了解,遗传算法是用于多目标优化的强大工具。

此外,训练神经网络(尤其是深度神经网络)非常困难,并且存在许多问题(非凸成本函数-局部极小值,消失和爆炸梯度等)。

而且我在概念上用GA训练NN是可行的。我想知道,为什么不将它们用于实践?这是性能问题吗?

Answers:


5

使用遗传算法(GA)训练神经网络(NN)不仅可行,而且在某些特定领域,其性能足以频繁使用。一个很好的例子是增强拓扑的神经进化或NEAT,这是在简单环境(例如游戏)中生成控制器的成功方法。

但是,在更一般的情况下,该方法无法很好地扩展到具有许多参数需要调整的大型深度网络。

遗传算法和其他全局搜索最佳参数的方法很健壮,而基于梯度的算法则没有。例如,您可以使用步进函数激活或任何其他不可微分的激活函数训练NN。他们在其他地方也有弱点。与用于神经网络的遗传算法有关的一件事是,权重参数在某些组合中是可以互换的,但在其他组合中则是高度相关的。合并两个具有不同参数的性能良好的神经网络-您将在GA中交叉操作-通常会导致第三个网络的性能不佳。NEAT的成功部分在于找到一种通过“增长” NN的连接并在相似的神经网络之间进行匹配来解决该问题的方法。

基于梯度的方法效率更高。通常,不仅可以在神经网络领域中,如果可以计算函数相对于参数的梯度,那么可以比大多数其他优化技术更快地找到最佳参数。准确的梯度至少可以保证从单个评估中获得较小的改进,而其他大多数优化器都属于无法重现的生成和重试范式。倾向于寻找局部最优的弱点已经证明不是神经网络损失函数的主要障碍,并且已经通过使用基本梯度下降的扩展(例如动量,RPROP,Adam等)获得了一定程度的成功。

实际上,在大型多层网络上,梯度方法可能比GA搜索(例如用于查找网络参数的NEAT)快几个数量级。您不会找到任何解决了ImageNet甚至是MNIST的经过GA培训的CNN,而GA都没有发现网络权重。但是,并非100%排除了GA或至少其中一些变体。例如,这个2017年的博客回顾了最近的论文,包括图像分类器的大规模进化,该论文探索了使用GA来发现NN 超参数,这是机器学习中的一项重要任务,并且使用基于梯度的方法不太容易处理。


1

实际上,Google Brain已经对图像分类器做了类似的处理

他们的研究仍然使用反向传播来训练网络,但是他们使用遗传算法来找到一个好的架构。还有一件事要提到:要获得最佳模型-它需要他们巨大的计算能力。

他们在2017年发表了第一篇论文,并在2018年获得了改进版本。您可以在他们的博客文章中阅读有关内容

对于网络体系结构搜索,还有另一项研究,但是它们使用贝叶斯优化而不是遗传算法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.