我要在遗传神经网络中变异和交叉什么?

What do I mutate and crossover in a genetic neural network?

我写了一个神经网络并制作了一个小应用程序,东西吞噬了其他东西。

但我真的不知道,如何让这东西遗传。

目前我正在记录每个人每一帧的所有输入和输出。

在一代人结束时,我将前 10 名最适合的人的数据教给每个认识的人。

但问题是,来自 100 代前 10 名个体池的记录数据大约有 50MB。当我现在开始有 20 个人的新一代时,我必须教他们 20x50MB。 这个过程需要超过 3 分钟,我不确定这是否是我应该在遗传神经网络中做的。 我的方法实际上效果不错。只有低效率让我烦恼。 (我当然知道,我可以减少人口。)

而且我找不到解决我必须交叉和变异的方法。 交叉和变异偏差和权重是无稽之谈,不是吗?它只会破坏网络,不是吗?我看到了这样做的例子。改变权重向量。但我只是看不到,这将如何使网络进展达到其所需的输出。

有人可以告诉我网络如何通过随机切换和改变权重和连接来变得更好吗? 会不会一样,只是随机生成网络并希望他们开始做他们应该做的事情?

遗传神经网络还有其他算法吗?

谢谢。

通常,神经网络的遗传算法被用作反向传播训练的替代方法。所以没有训练阶段(尝试将各种监督训练与进化相结合是一个有趣的想法,但做得不够普遍,以至于没有我所知道的任何标准方法)。

在这种情况下,权重和偏差的交叉和变异是有意义的。它提供了人口的变化。许多由此产生的神经网络(尤其是早期的)不会做很多有趣的事情,但有些会更好。当你不断选择这些更好的网络时,你将继续获得更好的后代。最终(假设您的任务是合理的)您将拥有真正擅长您希望它们做的事情的神经网络。这比随机搜索要好得多,因为进化将以更智能的方式探索潜在神经网络的搜索space。

所以是的,几乎任何遗传神经网络算法都会涉及改变权重,并且可能还会将它们交叉。一些,例如 NEAT,还进化了神经网络的拓扑结构,因此允许添加或删除节点和节点之间的连接的突变和交叉。