演进的网络无法解决 XOR

人工智能 神经网络 激活函数 整洁的 神经进化
2021-11-07 10:23:45

我的 NEAT 实现始终无法完全解决 XOR。物种汇聚在不同的次优网络上,这些网络映射所有输入示例,但一个正确(最常见的是 (1,1,0))。你对为什么会这样有任何想法吗?

一些可能相关的信息:

  • 我在每个非输入节点 1/(1 + exp(-x)) 中使用一个简单的逻辑激活函数。
  • 经过大量时期后,一些权重的大小似乎变得相当大。
  • 我使用平方和误差作为适应度函数。
  • 任何超过 0.5 的都被认为是 1(用于将输出与预期进行比较)

这是演进网络的一个示例。节点 0 是偏置节点,另一个红色节点是输出,绿色是输入,蓝色是“隐藏”的。忽略连接上的标签。 在此处输入图像描述

编辑:按照NEAT 用户页面上的 XOR 建议使 sigmoid 函数的增益变陡,在 ca 50 epochs 后首次发现了一个解决 XOR 的网络。但大多数时候它仍然失败。这是成功解决异或的网络: 在此处输入图像描述

1个回答

问题是由于我的实现中存在以下问题:

  • 交叉产生的后代没有发生突变(!)
  • 突变没有以预期的频率发生(链接太少和权重突变)
  • sigmoid 激活必须变陡

之前引起问题的另一件事是 network.activate 功能。确保在执行分类任务时等待网络稳定,以便所有信号都有时间通过​​网络传播。