我应该如何将神经网络的结构编码为基因组?


14

对于确定性的问题空间,我需要找到具有最佳节点和链接结构的神经网络。我想使用一种遗传算法来模拟许多神经网络,以找到问题域的最佳网络结构。

我以前从未将遗传算法用于此类任务。有哪些实际考虑因素?具体来说,我应该如何将神经网络的结构编码为基因组?

Answers:


12

“元启发式算法的本质”的第4.2节提供了大量有关通过遗传算法编码图结构的替代方法的信息。

对于不断发展的人工神经网络,我个人不会倾向于“从头开始”实现这种事情:

神经进化的领域已经存在了一段时间,并且某些方法的实现(例如增强拓扑的神经进化(NEAT))现在已经包含了许多实际经验的结果。

根据上面的链接:

我们还开发了NEAT的扩展,称为HyperNEAT,可以扩展具有数百万个连接的神经网络,并利用任务域中的几何规则性。HyperNEAT页面包括出版物链接和该方法的一般说明。


那“元启发法的本质”看起来很有趣!这是M自动机路线图上的实际情况,因为纯MCTS在M游戏中绝不是最佳选择。来自metaheuristic Wiki“在计算机科学和数学优化中,metaheuristic是旨在查找,生成或选择启发式(部分搜索算法)的高层过程或启发式方法,可以为优化问题提供足够好的解决方案,尤其是在信息不完整或不完美或计算能力有限的情况下。”
周公爵

4

利用进化算法进化神经网络被称为neuroevolution

一些神经进化算法仅优化具有固定拓扑的神经网络的权重。听起来不像您想要的。其他神经进化算法可以优化神经网络的权重拓扑。这类算法似乎更适合您的目标,有时被称为TWEANN(拓扑和权重演化神经网络)。

一种流行的算法称为NEAT,它可能是一个很好的起点,即使仅仅是因为有许多实现,希望其中一种可以用您喜欢的语言编写。这至少将为您提供一个基准。

NEAT直接将神经网络基因组编码为图结构。变异可以通过添加新链接(通过连接两个先前未连接的节点)或新节点(通过拆分现有连接)来对网络的结构进行操作,也可以仅在更改与图形边缘相关的权重时进行操作(称为变异)重量)。为了让您大致了解此特定算法使用的ANN大小的数量级,它可能会遇到100或200多个节点。

TWEANN具有更多的可伸缩性,但是它们更复杂,并且对它们生成的结构进行假设,这些结构在实践中可能并不总是有效的。例如,编码神经网络结构的另一种方法是作为种子模式的乘积,该种子模式会被语法(例如L系统)反复扩展。您可以更轻松地探索较大的结构,但是由于它们是由语法生成的,因此将具有独特的自我重复感觉。HyperNEAT是NEAT的一种流行扩展,它做出了另一种假设(权重模式可以很容易地表示为几何函数),并且当该假设很好地适合特定领域时,可以扩展到具有数百万个连接的ANN。

如果您想观察更多的技术,则在顶部链接中链接了一些调查论文。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.