代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

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

  •  19
  • Joe Holloway  · 技术社区  · 16 年前

    我试图了解不同类别的机器学习算法之间的区别。

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

    然而,它们似乎都是为了确定输入和输出之间的相关性,这些输入和输出来自一组潜在的嘈杂的培训/历史数据。

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

    我略读了一些建议以互补的方式使用它们的文章。是否有一个很好的用例示例?

    7 回复  |  直到 7 年前
        1
  •  18
  •   bsdfish    16 年前

    以下是交易:在机器学习问题中,通常有两个组件:

    a)模型(功能类等)

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

    神经网络是一个模型:给定布局和权重设置,神经网络产生一些输出。有一些典型的神经网络拟合方法,如反向传播、对比发散等。然而,神经网络的一个重要点是,如果有人给你“正确”的权重,你会在这个问题上做得很好。

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

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

        2
  •  4
  •   Robert Gould    16 年前

    需要“直觉”的问题更适合于人工神经网络,例如手写识别。你用大量的输入训练一个神经网络,并给它打分直到你完成为止(这需要很长的时间),但是之后你有了一个黑箱算法/系统 猜测 “手写,所以你要保持你的小脑袋,并把它作为一个模组使用很多年。因为为一个复杂的问题训练一个高质量的人工神经网络需要几个月的时间,我是最坏的情况,而且很幸运。

    大多数其他进化算法” 计算 一种现场的临时解决方案,类似于爬山模式。

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

        3
  •  2
  •   Benjamin Fedder Jensen    14 年前

    看看神经进化。(NE)

    目前最好的方法是 NEAT HyperNEAT 作者:肯尼斯·斯坦利。

    遗传算法只能找到某种类型的基因组;创建一个神经网络的基因组是很好的,因为你得到了神经网络的反应性质,而不仅仅是一堆静态基因。

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

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

        4
  •  2
  •   gaborous    7 年前

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

    然而,有一种特定情况下,进化算法比神经网络更为明显: 当解空间非连续/离散时 .

    实际上,神经网络使用梯度下降来学习反向传播(或类似的算法)。梯度的计算依赖于导数,它需要一个连续的空间,换句话说,你可以逐步地从一个解转移到下一个解。

    如果你的解空间是离散的(或者你可以选择解A,或者B,或者C,但是中间没有任何东西,比如0.5%A+0.5%B),那么你就试图去适应一个非连续函数,然后神经网络就不能工作了。

    在这种情况下,进化算法是完美的,甚至可以说是上帝派来的,因为它可以从一个解决方案“跳”到下一个解决方案,而不存在任何问题。

    同样值得一提的是,进化算法不像其他机器学习算法(包括神经网络)那样容易受到维度性的诅咒。

    这使得进化算法成为一种非常通用的工具,可以简单地处理任何问题,也是处理非连续函数或天文高维数据集的少数工具之一。

        5
  •  1
  •   Chuck    16 年前

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

    进化算法 部署一个随机的beamsearch,这意味着你的进化操作人员开发出候选对象,通过它们的适合性进行测试和比较。这些运算符通常是非确定性的,您可以对它们进行设计,这样它们既可以在很近的地方找到候选对象,也可以在参数空间更远处找到候选对象,以克服陷入局部最优的问题。

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

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

    而且,你知道神经网络中的每个隐藏节点定义了一个超平面,你可以设计一个神经网络,这样它就很适合你的问题。有一些技术可以防止神经网络过度拟合。

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

    汤姆·米切尔的机器学习书: http://www.cs.cmu.edu/~tom/mlbook.html

        6
  •  1
  •   Peace Makes Plenty    13 年前

    进化算法(eas)是缓慢的,因为它们依赖于无监督的学习:eas被告知有些解决方案比其他的更好,但不是 怎样 改善他们。神经网络通常更快,是有监督学习的一个例子:它们知道如何通过在函数空间中的某些参数上使用梯度下降来更好地解决问题;这使得它们更快地获得有效的解决方案。当对问题没有足够的了解而其他方法无法工作时,通常会使用神经网络。

        7
  •  1
  •   Radu Simionescu    8 年前

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

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