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

人工智能 神经网络 人工智能设计 遗传算法 进化算法 神经进化
2021-11-02 20:47:32

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

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

2个回答

“元启发式原理”的第 4.2 节有大量关于通过遗传算法编码图结构的替代方法的信息。

特别是关于不断发展的 ANN,我个人不倾向于“从头开始”实施这种事情:

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

根据上面的链接:

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

使用进化算法来进化神经网络被称为神经进化

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

一种流行的算法称为NEAT,它可能是一个很好的起点,如果只是因为有大量的实现,其中一个希望是用你最喜欢的语言编写的。这至少会给你一个可以使用的基线。

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

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

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