我写了一个神经网络,并做了一个小应用,里面的东西吃别的东西。
但我真的不知道,如何让这件事遗传。
目前我正在记录每一帧每个人的所有输入和输出。
在一代人的末期,我会向每个认识的人传授前几代最适合的前 10 个人的数据。
但问题是,来自 100 代前 10 名个体池的记录数据大约有 50MB 大。当我现在开始有 20 个人的新一代时,我必须教他们 20x50MB。
这个过程需要超过 3 分钟,我不确定这是否是我在遗传神经网络中应该做的。
我的方法实际上效果很好。只有效率低下才让我烦恼。 (我当然知道,我可以减少人口。)
而且我找不到解决我必须交叉什么和变异什么的解决方案。
交叉和变异偏差和权重是无稽之谈,不是吗?它只会破坏网络,不是吗?我看到了这样做的例子。改变权重向量。但我只是看不出,这将如何使网络进展达到预期的输出。
有人能告诉我网络如何通过随机切换和改变权重和连接而变得更好吗?
会不会一样,只是随机生成网络并希望他们开始做他们应该做的事情?
遗传神经网络还有其他算法吗?
谢谢你。
最佳答案
通常,神经网络的遗传算法被用作反向传播训练的替代方法。所以没有训练阶段(尝试将各种有监督的训练与进化相结合是一个有趣的想法,但做得不够普遍,以至于我知道没有任何标准方法)。
在这种情况下,权重和偏差的交叉和变异是有道理的。它提供了人口的变化。许多由此产生的神经网络(尤其是早期)不会做任何有趣的事情,但有些会更好。随着您不断选择这些更好的网络,您将继续获得更好的后代。最终(假设您的任务是合理的等)您将拥有非常擅长您希望它们做的事情的神经网络。这比随机搜索要好得多,因为进化将以更智能的方式探索潜在神经网络的搜索空间。
所以是的,几乎任何遗传神经网络算法都将涉及改变权重,并且可能也将它们交叉。一些,例如 NEAT ,还进化了神经网络的拓扑结构,因此允许添加或删除节点以及节点之间的连接的突变和交叉。
关于neural-network - 我在遗传神经网络中变异和交叉什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136420/