进化算法和神经网络是不是在同一个领域中使用?

Posted

技术标签:

【中文标题】进化算法和神经网络是不是在同一个领域中使用?【英文标题】:Are evolutionary algorithms and neural networks used in the same domains? [closed]进化算法和神经网络是否在同一个领域中使用? 【发布时间】:2010-10-12 07:32:03 【问题描述】:

我正在尝试了解各类机器学习算法之间的区别。

我了解进化算法的实现与神经网络的实现有很大不同。

但是,它们似乎都适用于从一组潜在嘈杂的训练/历史数据中确定输入和输出之间的相关性。

从定性的角度来看,与进化算法相比,是否存在更适合神经网络目标的问题域?

我浏览了一些建议以互补方式使用它们的文章。有没有合适的用例示例?

【问题讨论】:

这里有一个小小的误解:进化算法既不需要也不通常使用任何类型的历史或训练数据,而是倾向于直接对实时数据进行操作。但是,您必须知道如何充分衡量解决方案的适应度。 【参考方案1】:

进化或更一般的遗传算法和神经网络都可以用于类似的目标,其他答案很好地描述了差异。

但是,在一种特定情况下,进化算法比神经网络更适用:当解空间不可微时

确实,神经网络使用梯度下降从反向传播(或类似算法)中学习。梯度的计算依赖于导数,需要一个连续的导数空间,也就是说你可以从一个解逐渐渐进地转移到下一个解。

如果您的解决方案空间不可微(即,您可以选择解决方案 A、B 或 C,但中间没有 0.5% A + 0.5% B,因此某些解决方案是不可能的),那么你试图拟合一个不可微的函数,然后神经网络就不能工作了。

(旁注:离散状态空间部分共享相同的问题,因此是大多数算法的常见问题,但通常会做一些工作来解决这些问题,例如决策树可以轻松处理分类变量,而其他模型像 svm 比较困难,一般需要将分类变量编码成连续值)。

在这种情况下,进化和遗传算法是完美的,甚至可以说是上帝派来的,因为它们可以毫无问题地从一个解决方案“跳转”到下一个解决方案。他们不关心某些解决方案是不可能的,也不关心可能状态空间子集之间的差距是大是小,进化算法可以随机跳远或靠近,直到找到合适的解决方案。

另外值得一提的是,进化算法不像任何其他机器学习算法(包括神经网络)那样受到维数诅咒的影响。这可能看起来有点违反直觉,因为不能保证收敛到全局最大值,并且该过程似乎发展为一个好的解决方案似乎很慢,但在实践中,选择过程工作得很快并且收敛到一个好的局部最大值。

这使得进化算法成为一种非常通用和通用的工具,可以天真地解决任何问题,并且是处理不可微函数、离散函数或天文高维数据集的极少数工具之一。强>

【讨论】:

非常好的补充!我特别喜欢你的观点,即进化算法可以天真地解决问题。 (由公认的“正确的做事方式”引起的智力偏见似乎是人类的一个问题。此外,不尝试解决问题是因为它们感知到的困难或假定的不可解决性——在我看来,天真的代理人不会这样的开始假设;) 神经网络用于图像和语音分类。这个解空间不是离散的吗?如果不是,是什么让它连续? @Gili 我通过陈述“离散”来过度简化我的答案,正确的术语是“不可微分”状态空间。它可以是连续的或离散的,但问题是当您的状态空间具有“间隙”和不可能的解决方案时,因此它不再是不可微分的(无法计算导数,因此无法使用统计数据/可能性)。这对进化或遗传算法来说不是问题,它们都可以解决这个问题。【参考方案2】:

进化算法 (EA) 表示训练模型的一种方式,其中神经网络 (NN) 是一种模型。在整个文献中最常见的是,您会发现 NN 是使用反向传播算法进行训练的。这种方法对数学家非常有吸引力,但它要求您可以使用数学公式表达模型的错误率。在您知道要逼近的函数的大量输入和输出值的情况下,就是这种情况。这个问题可以在数学上建模,作为损失函数的最小化,这可以通过微积分来实现(这就是数学家喜欢它的原因)。

但是神经元网络对于试图最大化或最小化某些结果的系统建模也很有用,其公式很难用数学建模。例如,神经元网络可以控制机器人的肌肉来实现跑步。在每个不同的时间范围内,模型都必须根据来自各种传感器的输入来确定机器人身体的每块肌肉中应该存在多少张力。提供这样的训练数据是不可能的。 EA 仅通过提供一种模型评估方式来允许训练。对于我们的示例,我们将惩罚跌倒并奖励穿过表面的行进距离(在固定的时间范围内)。 EA 只会选择在这个意义上做得最好的模型。第一代很糟糕,但令人惊讶的是,在几百代之后,这些人实现了非常“自然”的运动,并设法在不摔倒的情况下奔跑。此类模型也可能能够处理障碍物和外部物理力。

【讨论】:

【参考方案3】:

进化算法 (EA) 很慢,因为它们依赖于无监督学习:EA 被告知某些解决方案比其他解决方案更好,但不知道如何改进它们。神经网络通常更快,作为监督学习的一个例子:它们知道如何通过在函数空间内对某些参数使用梯度下降来改进解决方案;这使他们能够更快地找到有效的解决方案。当对问题的了解不足以让其他方法发挥作用时,通常会使用神经网络。

【讨论】:

你能用外行的话详细说明“函数空间内的梯度下降”吗?这是否意味着神经网络通过使用更复杂的反馈机制而不是蛮力来更快地收敛到潜在的解决方案? 这实际上取决于问题域和解决方案空间中参数的潜在上位性。 更复杂的反馈是正确的。一个函数空间就是一堆函数;例如,对于 a 的不同值, f(x) = a * x 是一个函数空间。这里的梯度下降涉及评估一个特定的函数,取一个“导数”并在正确的方向上调整函数。 进化算法确实使用随机性,但这并不会使它们本质上变得更慢。对于某些函数,它们可能会更慢,但这也使它们相对不易陷入局部最大值,这是一个理想的属性。 “他们只是遵循随机路径”。我不认为这是真的。你可以说“他们在他们的路径上随机抽样”。无论如何,这并不会使它们本质上变慢,在这方面与任何随机抽样方法没有什么不同。【参考方案4】:

看看神经进化。 (东北)

目前最好的方法是 Kenneth Stanley 的 NEAT 和 HyperNEAT。

遗传算法只能找到某种基因组;创建神经网络的基因组非常棒,因为您可以获得神经网络的反应特性,而不仅仅是一堆静态基因。

它可以学习的内容没有太多限制。但这当然需要时间。神经拓扑必须通过通常的变异和交叉以及权重更新来进化。不能有反向传播。

您还可以使用适应度函数对其进行训练,因此当您不知道输出应该是什么时,它优于反向传播。非常适合学习您不知道任何最佳策略的系统的复杂行为。唯一的问题是它会学习你没有预料到的行为。通常,这种行为可能非常陌生,尽管它完全符合您在适应度函数中的奖励。因此,您将使用与为反向传播创建输出集一样多的时间来导出适应度函数:P

【讨论】:

【参考方案5】:

在问题领域方面,我将通过反向传播训练的人工神经网络与进化算法进行比较。

进化算法部署了随机波束搜索,这意味着您的进化算子会开发候选者,以通过其适应度进行测试和比较。这些运算符通常是非确定性的,您可以对其进行设计,以便它们既可以找到靠近的候选者,也可以找到参数空间中较远的候选者,以克服陷入局部最优的问题。

但是 EA 方法的成功很大程度上取决于您开发的模型,这是在高表达潜力(您可能会过拟合)和通用性(模型可能无法表达目标函数)之间进行权衡。

由于神经网络通常是多层的,参数空间不是凸的并且包含局部最优值,梯度下降算法可能会陷入困境。梯度下降是一种确定性算法,它会通过近距离搜索。这就是为什么神经网络通常是随机初始化的,以及为什么你应该训练不止一个模型。

此外,您知道神经网络中的每个隐藏节点都定义了一个超平面,您可以设计一个神经网络,使其很好地适应您的问题。有一些技术可以防止神经网络过拟合。

总而言之,神经网络可以快速训练并获得合理的结果(只需尝试一些参数)。从理论上讲,足够大的神经网络能够逼近每个目标函数,另一方面,这使得它容易过度拟合。进化算法需要你做出很多设计选择才能获得好的结果,最难的可能是优化哪个模型。但是 EA 能够搜索非常复杂的问题空间(以您定义的方式)并快速获得良好的结果。当问题(目标函数)随时间变化时,AE 甚至可以保持成功。

Tom Mitchell 的机器学习书籍: http://www.cs.cmu.edu/~tom/mlbook.html

【讨论】:

【参考方案6】:

重点是:在机器学习问题中,通常有两个组成部分:

a) 模型(函数类等)

b) 拟合模型的方法(优化算法)

神经网络是一种模型:给定布局和权重设置,神经网络会产生一些输出。存在一些拟合神经网络的规范方法,例如反向传播、对比散度等。但是,神经网络的重要之处在于,如果有人给了你“正确”的权重,你就会在这个问题上做得很好。

进化算法解决了第二部分——拟合模型。同样,有一些规范模型与进化算法一起使用:例如,进化编程通常会尝试优化特定类型的所有程序。但是,EA 本质上是一种为特定模型找到正确参数值的方法。通常,您以这样一种方式编写模型参数,即交叉操作是合理的做法,并转动 EA 曲柄以获得合理的参数设置。

现在,例如,您可以使用进化算法来训练神经网络,我相信它已经完成了。然而,EA 需要工作的关键是交叉操作必须是合理的事情——通过从一个合理的设置中获取部分参数,而从另一个合理的设置中获取其余参数,您通常会得到一个更好的参数设置。大多数时候使用 EA,情况并非如此,它最终类似于模拟退火,只会更加混乱和低效。

【讨论】:

【参考方案7】:

需要“直觉”的问题更适合人工神经网络,例如手写识别。你用大量输入训练一个神经网络并对其进行评分直到你完成(这需要很长时间),但之后你有一个可以“猜测”手的黑盒算法/系统写作,所以你保留你的小脑袋,并将它作为一个模块使用多年或什么的。因为为一个复杂的问题训练一个高质量的人工神经网络可能需要几个月的时间,我是最坏的情况,而且很幸运。

大多数其他进化算法“计算”一个临时解决方案,以一种爬山模式。

正如另一个答案中指出的那样,在运行时,ANN 可以比大多数其他进化算法“计算”更快地“猜测”。但是必须小心,因为 ANN 只是“猜测”,它可能是错误的。

【讨论】:

以上是关于进化算法和神经网络是不是在同一个领域中使用?的主要内容,如果未能解决你的问题,请参考以下文章

差分进化算法求解函数最优解matlab实现

差分进化算法求解函数最优解matlab实现

蚁群算法

scikit-opt——DE(差分进化)

使用流行的遗传算法python库是哪个

使用流行的遗传算法python库是哪个