据我了解,遗传算法是多目标优化的强大工具。
此外,训练神经网络(尤其是深度神经网络)很困难并且存在许多问题(非凸成本函数 - 局部最小值、梯度消失和爆炸等)。
另外,我认为在概念上用 GA 训练 NN 是可行的。我想知道,为什么不将它们用于实践?是性能问题吗?
据我了解,遗传算法是多目标优化的强大工具。
此外,训练神经网络(尤其是深度神经网络)很困难并且存在许多问题(非凸成本函数 - 局部最小值、梯度消失和爆炸等)。
另外,我认为在概念上用 GA 训练 NN 是可行的。我想知道,为什么不将它们用于实践?是性能问题吗?
使用遗传算法 (GA) 训练神经网络 (NN) 不仅可行,而且在某些特定领域的性能足够好,可以经常使用。一个很好的例子是增强拓扑或 NEAT的神经进化,这是一种在简单环境(例如游戏)中生成控制器的成功方法。
但在更一般的情况下,该方法不能很好地扩展到需要调整许多参数的大型深度网络。
遗传算法和其他对最优参数的全局搜索是稳健的,而基于梯度的算法则不然。例如,您可以使用阶跃函数激活或任何其他不可微的激活函数来训练 NN。他们在其他地方也有弱点。与用于 NN 的 GA 的情况相关的一件事是,权重参数在某些组合中是可互换的,但在其他组合中是相互依赖的。合并两个具有不同参数的同样优秀的神经网络——你会在 GA 的交叉中这样做——通常会导致第三个网络的性能很差。NEAT 的成功部分在于通过“增长”NN 的连接并在相似的神经网络之间匹配它们来找到解决该问题的方法。
基于梯度的方法效率更高。通常,不仅在 NN 领域,如果您可以计算函数相对于参数的梯度,那么您可以比大多数其他优化技术更快地找到最佳参数。准确的梯度至少保证了一次评估的小幅改进,而大多数其他优化器都属于无法做出这种保证的生成和重试范式。倾向于寻找局部最优的弱点已经证明不是 NN 中损失函数的主要障碍,并且已经使用基本梯度下降的扩展(如动量、RPROP、Adam 等)在一定程度上取得了成功。
在大型多层网络的实践中,梯度方法可能比 GA 搜索(例如 NEAT 寻找网络参数)快几个数量级。你不会发现任何经过 GA 训练的 CNN 可以解决 ImageNet,甚至 MNIST,因为 GA 已经在没有帮助的情况下发现了网络权重。然而,GA,或者至少是其中的一些变体,并不是 100% 被排除在外的。例如,这篇 2017 年的博客回顾了最近的论文,包括图像分类器的大规模演化,其中探索使用 GA 来发现 NN超参数,这是机器学习中的一项重要任务,并且使用基于梯度的方法不太容易处理。
实际上,Google Brain 已经为图像分类器做了类似的事情
尽管如此,他们的研究使用反向传播来训练网络,但他们使用遗传算法来找到一个好的架构。还要提一件事:要获得他们最好的模型——这需要他们大量的计算能力。
他们在 2017 年发表了第一篇论文,并在 2018 年得到了改进版本。您可以在他们的博客文章中了解它
网络架构搜索还有另一项研究,但他们使用贝叶斯优化而不是遗传算法