如何在 Neuroevolution 中进化神经网络的权重?

How to evolve weights of a neural network in Neuroevolution?

总的来说,我对人工神经网络和 NeuroEvolution 算法不熟悉。我正在尝试实现名为 NEAT(增强拓扑的 NeuroEvolution)的算法,但是 original public paper 中的描述错过了如何演化网络权重的方法,它说

Connection weights mutate as in any NE system, with each connection either perturbed or not at each generation

我已经搜索了一些有关如何在 NE 系统中改变权重的信息,但遗憾的是找不到任何详细说明。

我知道在训练神经网络时,通常会使用反向传播算法来修正权重,但只有当你具有固定的拓扑(结构)世代相传并且你知道问题的答案时,它才有效。在 NeuroEvolution 中,你不知道答案,你只有适应度函数,所以这里不能使用反向传播。

在 NEAT 中,一切都是通过遗传算子完成的。如您所知,拓扑结构是通过交叉和突变事件演变而来的。

权重是通过突变事件进化而来的。就像在任何进化算法中一样,权重有一定的概率随机变化(您可以生成一个全新的数字,或者您可以例如将正态分布的随机数添加到原始权重)。

实施 NEAT 似乎是一项容易的任务,但有很多小细节最终使它变得相当复杂。您可能想查看现有的实现并使用其中之一,或者至少从中获得启发。所有重要的东西都可以在 NEAT Users Page.

找到

我有一些使用遗传算法训练 fixed-topology NN 的经验(本文称为 "traditional NE approach")。为此,我们使用了几种不同的突变和复制运算符,我们 selected 那些 运行domly。

给定两个 parents,我们的复制运算符(也可以称为这些交叉运算符)包括:

  • 交换网络中给定神经元的单个权重或所有权重。因此,例如,给定两个 parents selected 进行繁殖要么在网络中选择一个特定的权重并交换该值(对于我们的交换,我们产生了两个后代,然后选择了最适合生存的一个在下一代种群中),或者在网络中选择一个特定的神经元并交换该神经元的所有权重以产生两个后代。

  • 交换整个图层的权重。因此,给定 parents A 和 B,选择一个特定的层(两者中的同一层)并交换它们之间的所有权重以产生两个后代。这是一项重大举措,因此我们对其进行了设置,以便此操作 selected 的频率低于其他操作。此外,如果您的网络只有几层,这可能没有意义。

我们的变异算子在单个网络上运行,并且会 select 一个 运行dom 权重并且:

  • 用新的 运行dom 值完全替换它
  • 按一定百分比更改权重。 (将权重乘以 0 到 2 之间的某个 运行dom 数 - 实际上,我们倾向于限制它一点,然后将其乘以 0.5 到 1.5 之间的 运行dom 数。这有以下效果缩放权重使其不会发生根本性变化。您也可以通过缩放特定神经元的所有权重来执行此类操作。
  • 添加或减去 0 和 1 之间的 运行dom 数 to/from 权重。
  • 改变重量的符号。
  • 交换单个神经元的权重。

您当然可以通过变异运算符发挥创意,您​​可能会发现对您的特定问题更有效的方法。

IIRC,我们会根据 运行dom 比例 selection 从种群中选择两个 parents,然后对它们中的每一个进行 运行 变异操作,然后 运行这些通过繁殖操作parents和运行两个后代通过适应度函数select最适应的进入下一代种群

当然,在您的情况下,由于您也在改进拓扑结构,因此上面的某些复制操作没有多大意义,因为两个 selected parents 可能具有完全不同的拓扑结构。在 NEAT 中(据我所知)你可以在网络的 non-contiguous 层之间建立连接,因此例如你可以让第 1 层神经元在第 4 层中馈送另一个神经元,而不是直接馈送到第 2 层。这使得交换涉及一个神经元所有权重的操作更加困难 - 您可以尝试在网络中选择两个具有相同权重数量的神经元,或者只是坚持交换网络中的单个权重。

I know that while training a NE, usually the backpropagation algorithm is used to correct the weights

实际上,在 NE 中没有使用反向传播。正是 GA 执行的突变正在训练网络作为反向传播的替代方案。在我们的例子中,由于一些 "unorthodox" 添加到我不会进入的网络,反向传播是有问题的。然而,如果反向传播是可能的,我会同意的。训练 NN 的遗传方法似乎肯定比反向传播慢得多。此外,当使用进化方法调整网络权重时,您开始需要调整 GA 的各种参数,如交叉和变异率。