我正在根据 2002 年的原始论文“通过不断发展的神经网络拓扑进行高效强化学习”(Kenneth O. Stanley 和 Risto Miikkulainen)来实现我自己的 NEAT 算法。算法的设计方式可能会在隐藏层的连接中产生循环。这显然会导致计算输出的困难。
我搜索并遇到了两种方法。像这个例子这样的集合声称该值应该像在 RNN 中看到的时间序列一样计算,并且循环节点应该使用“旧”值作为它们的“当前”输出。但是,这似乎是错误的,因为训练数据并不总是有序的,并且之前的值与当前的值无关。
像这个例子的第二组声称应该用某种方法修剪结构以避免循环和循环。这种方法除了做起来真的很昂贵之外,也违背了算法的核心思想。像这样删除连接可能会导致以后的结构更改。
到目前为止,我自己尝试将未知的前向值设置为 0,这隐藏了连接(因为它的权重对结果没有影响),但也因两个原因而失败。一是我的网络迅速变大,破坏了“所需的最小网络”的想法,结果也不好。
什么是正确的方法?