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

时间:2015-03-19 02:51:32

标签: neural-network genetic-algorithm

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

但我真的不知道如何让这件事成为遗传。

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

在一代人的结束时,我会向每个知道个体的人们传授来自前几代最佳人选的数据。

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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