我不了解NEAT算法如何根据连接基因输入并输出数字,我熟悉在固定拓扑神经网络中使用矩阵来前馈输入,但是由于NEAT中的每个节点都有自己的连接数,因此我不明白,不一定连接到其他所有节点,经过大量搜索,我找不到NEAT如何根据输入产生输出的答案。

有人可以解释它是如何工作的吗?

最佳答案

这也是我在实现自己的算法版本时遇到的问题。

您可以在NEAT用户页面:https://www.cs.ucf.edu/~kstanley/neat.html中找到答案,作者说:


  如何激活具有任意拓扑的网络?
  
  激活函数bool Network :: activate()提供了详细信息。的
  当然,实现方式与简单的分层方式有很大不同
  前馈网络。每个节点将所有传入节点的激活加起来
  从上一个时间步开始(该功能还可以处理特殊的“时间延迟”
  连接,但当前版本的NEAT在任何
  我们已经发布的实验。)了解它的另一种方法是实现
  激活不会从输入层一直到输出
  一个单一的时间步。在单个时间步中,激活仅从
  一个神经元到下一个。因此,激活需要花费几个时间步骤
  输入到输出。如果您考虑一下,这就是它在
  真正的大脑,信号击中您的眼睛需要时间才能到达
  皮层,因为它经过多个神经连接。


因此,如果演进的网络之一不是前馈,则网络的输出将在不同的时间步中变化,这对于连续控制问题特别有用,在该问题中环境不是静态的,但在分类问题中也是有问题的。作者还回答:


  在获取网络输出之前,如何确保网络稳定
  分类问题?
  
  廉价且肮脏的方法是连续激活n次,其中
  n> 1,希望隐藏节点没有太多的循环或漫长的路径。
  
  正确的方法(而且非常不错)是检查每个隐藏的节点并输出
  从一个时间步长到下一个时间步长,查看是否没有任何变化,或者至少
  在某些三角洲内没有变化。一旦满足此标准,则输出必须为
  稳定。
  
  请注意,在某些情况下输出可能并不总是稳定的。另外,连续
  控制问题,因为网络永远不会“稳定”,所以不要检查稳定性
  而是不断地对不断变化的环境做出反应。通常,
  稳定用于分类问题或棋盘游戏。

08-20 04:38