何时应该使用遗传算法而不是神经网络?

139

有没有一条经验法则(或一组示例)来确定何时使用遗传算法而不是神经网络(反之亦然)来解决问题?

我知道有些情况下两种方法可以混合使用,但我正在寻找这两种方法之间的高级比较。


3
值得指出的是,神经网络分为两种类型-监督和无监督。监督型神经网络从人类获取训练数据,而无监督型则将反馈信息输入自身,更像是GA(遗传算法)。 - Chris S
3
我认为这个内容并不是"列表式"的。答案比较了两种方法,并澄清了何时使用其中一种而不是另一种。 - Neil N
简短回答:当要建模的函数是非连续/离散的,或者数据集的维度极高时,请使用遗传算法(GA)。对于其余情况,根据哪种方法能够给出最佳结果,可以使用神经网络或GA(或其他模型)。更多信息请参见我的答案:https://dev59.com/CHRB5IYBdhLWcg3wa2u2#49684833。 - gaborous
它们解决了完全不同的问题。你为什么要把它们拿来比较呢? - undefined
8个回答

134

来自维基百科:

遗传算法(GA)是一种在计算机中使用的搜索技术,用于寻找精确或近似的优化和搜索问题的解决方案。

以及:

神经网络是非线性统计数据建模工具。它们可以用于模拟输入和输出之间的复杂关系,或者用于在数据中发现模式。

如果您有一个可以量化解决方案价值的问题,则遗传算法可以对解决方案空间进行有向搜索。(例如找到两点之间的最短路径)

当您拥有不同类别的多个项目时,神经网络可以“学习”如何对其之前没有“看到”的项目进行分类。(例如人脸识别,语音识别)

还必须考虑执行时间。遗传算法需要很长时间才能找到可接受的解决方案。神经网络需要很长时间才能“学习”,但然后它几乎可以立即对新的输入进行分类。


14
我想为遗传算法的定义添加一些内容。有时人们认为GA问题的解空间是一组状态或值。例如,“找到在国际象棋棋盘上排列四个棋子以制造将军的所有方式。”然而,解空间也可以是一组算法。这就是遗传算法真正的优势所在。它们帮助你回答这样一个问题:“找到一组能够用给定的棋子进行将军的操作序列。” - lfalin

46

遗传算法(尽管其名称很性感)对大多数目的而言都是一种优化技术。它主要涉及你拥有许多变量,并希望找到这些变量的最佳值组合。它只是借鉴自然进化的技术来实现这一点。

神经网络有助于识别模式。它们遵循大脑的简单模型,通过改变它们之间的许多权重,试图根据输入预测输出。

它们是两个根本不同的实体,但有时它们能够解决的问题会重叠。


25
神经网络实际上只是一种插值技术。 :) - Don Reba
3
遗传算法(优化)和神经网络(监督学习)几乎没有任何共同之处,但都很有用。+1 - alfa
2
唯一的共同点是,它们在接近目标时动态地重新排列自己。 - lfalin
2
我不确定实际上是否有任何重叠。神经网络是具有成本函数的模型,GA是一种优化技术,可用于最小化此成本函数,正如@zenna所说。 - Matthieu Brucher

40

遗传算法(GAs)可以在您定义的结构中生成新模式。

神经网络(NNs)根据您提供的训练数据分类(或识别)现有模式。

GAs在有效搜索大量解决方案的状态空间并收敛于一个或多个良好解决方案方面表现良好,但不一定是“最佳”解决方案。

NNs可以学习识别模式(通过训练),但要从它们那里提取知识并在其他(非NN)中重用该知识是非常困难的。


如果您要优化的参数数量很大,应该使用哪种遗传算法。在我的情况下,参数数量在30到100之间。 - Alexander Cska

28
你在这里比较了两件完全不同的事情。
神经网络用于回归/分类 - 给定一组(x,y)示例,您要为某些给定的x回归未知的y。
遗传算法是一种优化技术。给定一个函数f(x),您想确定最小化/最大化f(x)的x。

10
确实。它们是真正的“正交技术”。您可以使用遗传算法来寻找神经网络的权重和/或架构。 - redcalx
在这个和其他关于这个主题的帖子中提供的其他答案的情况下,称它们为“完全不同”或“正交”的说法似乎有点过分。 - Johan

23

它们之间有许多相似之处,所以我将试图概述它们的区别

神经网络

能够分析在线模式(那些随着时间变化的模式)。通常,这是一个需要匹配和预测的时变样本。

示例

  • 图形外推
  • 面部识别

遗传算法

用于可编码属性的场景,你认为这些属性可能对解决一些特定非变化性问题有贡献。重点在于能够编码这些属性(有时您知道它们是什么),并且问题在很大程度上是不变的(否则演化不会收敛)。

示例

  • 安排航班 / 货运
  • 时间表。
  • 在人工环境中寻找简单代理的最佳特征
  • 用随机多边形渲染图片的近似值

14

1
还有NEAT算法(http://www.cs.ucf.edu/~kstanley/neat.html)。C#实现请见(http://sharpneat.sourceforge.net)。 - redcalx
对于JavaScript,可以查看https://github.com/wagenaartje/neataptic。它也实现了NEAT。 - Thomas Wagenaar

8
遗传算法通常处理离散数据(枚举,整数范围等)。 GAs的一个典型应用是在只有暴力搜索(评估所有组合)时,搜索离散空间以寻找“足够好”的解决方案。
另一方面,神经网络通常处理连续数据(浮点数等)。 NNs的一个典型应用是函数逼近,其中你有一组输入X和相关输出Y,但分析函数f:X→Y。
当然,两者都有成千上万的变体,因此它们之间的界限有些模糊。

5
没有一条定律。在许多情况下,您可以制定问题以利用它们中的任何一个。机器学习仍然是一个活跃的研究领域,使用哪种学习模型可能存在争议。
遗传算法从进化中获取性感语言,但您需要等待计算机通过随机过程偶然发现解决方案。研究您的数据,做出良好的假设,尝试了解您想要什么,并选择一个可以充分利用这些内容的方法。如果您的第一选择效果不佳,请知道原因,并改进算法本身或选择更好的算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接