问题标签 [es-hyperneat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1814 浏览

java - 如何使用 ESHyperNEAT 在 Java 中实现解决方案?

我对人工智能很感兴趣,两天前我发现了这个领域的一个有趣的最新发展,它被称为 ES-HyperNEAT,首先是 NEAT,然后是 HyperNEAT,然后是 ES-HyperNEAT。

以下是该主题的一些链接:

http://eplex.cs.ucf.edu/hyperNEATpage/

http://eplex.cs.ucf.edu/ESHyperNEAT/

所以我下载了AHNI的Java版,但是没有教程,我猜开发人员理所当然地认为它好用,但是对我来说,我不知道如何实现以下问题的解决方案,不看起来并不难,但有人可以告诉我如何开始吗?

输入看起来像这样:

程序应该从 Start Date 读取上述数据倒数 n 天到 End Date,对这些数据进行训练,正确的输出将始终是第二天的 D 值,我想知道如何用 ES-HyperNEAT 实现?

具体来说 :

有没有类似的东西: myProgram.start(FilePath,Delimiliter,Filed2,Field3,..,Line_X,Line_Y,...) ?

0 投票
2 回答
1278 浏览

multithreading - 用于时间序列预测的 HyperNEAT 网络需要 Encog 帮助

我正在使用 Encog AI 框架使用 HyperNEAT 网络进行时间序列预测。

这是我用来创建网络的简单代码。

它取自 Box 示例https://github.com/encog/encog-java-examples/tree/master/src/main/java/org/encog/examples/neural/neat/boxes

其中 columns 是特征的数量,windowSize 是预测未来值所需的前几天数(在我的示例中 windowSize 为 1)。

我得到这个例外:

Exception in thread "pool-2-thread-416" java.lang.ArrayIndexOutOfBoundsException at org.encog.util.EngineArray.arrayCopy(EngineArray.java:107) at org.encog.neural.neat.NEATNetwork.compute(NEATNetwork.java:194) at org.encog.util.error.CalculateRegressionError.calculateError(CalculateRegressionError.java:46) at org.encog.neural.networks.training.TrainingSetScore.calculateScore(TrainingSetScore.java:61) at org.encog.ml.ea.score.parallel.ParallelScoreTask.run(ParallelScoreTask.java:83) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

处理线程似乎有问题。有人可以帮我解决这个问题吗?我的第二个问题是:如何在 Encog 中使用反向传播训练 NEAT 网络?

0 投票
1 回答
442 浏览

machine-learning - 有关于 NEAT 的 Encog 文档吗?

有没有关于如何使用 Encog Framework 的详细文档?我知道 UserGuide 提供的用户指南和encog github 存储库中的 C# 示例

但是我专注于使用 NEAT Networks,并且只有 XOR 示例可用。到目前为止,代码如下所示:

但是除此之外还有很多可用的功能,并且没有详细说明它们的作用?以及如何调整它们以最大限度地提高网络智能?

任何人都可以分享关于这个网络的任何见解吗?

0 投票
4 回答
937 浏览

machine-learning - 增强拓扑的神经进化 (NEAT) 和全球创新数量

我无法找到为什么我们应该为 NEAT 中的每个新连接基因设置一个全球创新编号。

根据我对 NEAT 的一点了解,每个创新号都直接对应一个 node_in、node_out 对,那么,为什么不只使用这对 id 而不是创新号呢?这个创新号有哪些新信息?年表?

更新

是算法优化吗?

0 投票
2 回答
326 浏览

machine-learning - HyperNEAT - 底物激活函数和 CPPN 激活函数之间的区别

我一直在玩弄 HyperNEAT 并遇到了一个小问题。据我了解,基板是节点的初始布局,随后用于查询 CPPN 以提供连接权重。我理解CPPN激活函数只是CPPN中每个节点可以出现的一组激活函数,但是底物激活函数指的是什么?我的印象是,基板不一定是网络,而只是用于将问题的几何形状纳入 CPPN 的图案生成能力的布局。那么底物激活函数从何而来?

编辑:我正在使用UnityNEAT,它是SharpNEAT到 Unity 的一个端口。

谢谢

0 投票
1 回答
1476 浏览

machine-learning - NeuroEvolution:NEAT 算法创新数字

我一直在阅读增强拓扑的 NeuronEvolution,有一件小事一直困扰着我。在阅读 Kenneth Stanley 的 NEAT 论文时,我在这里看到了这个图:

NEAT突变

第一次突变时,创新数字从 1,2,3,4,5,6 变为 1,2,3,4,5,6,7。

在第二个中,它从 1,2,3,4,5,6 变为 1,2,3,4,5,6,8,9。

我的问题是为什么它会跳过数字 7 而直接上升到 8?我没有找到与删除创新编号相关的任何内容。

在第二个图上也是如此,父母 1 是如何失去 6,7 的?父母 2 中的第 8 个基因去了哪里?

整洁的交叉

0 投票
1 回答
985 浏览

python - NEAT 算法结果精度

我是一名博士生,正在尝试将该NEAT算法用作机器人的控制器,但我遇到了一些准确性问题。我正在使用 Python 2.7 并为此使用两个NEATpython 实现:

  1. NEAT是在这个 GitHub 存储库中的:https ://github.com/CodeReclaimers/neat-python 在 Google 中搜索,看起来它已在一些项目中成功使用。
  2. multiNEAT由 Peter Chervenski 和 Shane Ryan 开发的库:http: //www.multineat.com/index.htmlNEAT出现在软件目录的“官方”软件网页中。

在测试第一个时,我发现我的程序很快收敛到一个解决方案,但是这个解决方案不够精确。由于缺乏精确性,我想说的是与进化结束时的“完美”解决方案相关的中位数和平均值至少有 3-5% 的偏差(取决于问题的复杂性,误差约为 10%对我的解决方案来说是正常的。此外,我可以说我“从未”看到过低于 1% 的错误值(由 给出的NEAT解决方案与正确的解决方案之间)。我必须说我已经尝试了很多不同的参数组合和配置(这对我来说是一个老问题)。

因此,我测试了第二个库。该MultiNEAT库比前一个库收敛得更快、更容易。(我假设这是由于 C++ 实现而不是纯 Python)我得到了类似的结果,但我仍然有同样的问题;缺乏准确性。第二个库也有不同的配置参数,我还没有找到合适的组合来提高问题的性能。

我的问题是:结果
缺乏准确性是否正常NEAT?它实现了很好的解决方案,但不足以控制机械臂,而这正是我想要使用它的目的。

如果有人在我提出问题的方式中发现一些概念或技术错误,我会写下我正在做的事情:

为了简化问题,我将展示一个非常简单的示例:我有一个非常简单的问题要解决,我想要一个可以计算以下函数的 NN:(使用or或类似函数y = x^2可以找到类似的结果)y=x^3y = x^2 + x^3

我开发该程序所遵循的步骤是:

  1. “Y”是网络的输入,“X”是输出。神经网络的激活函数是 sigmoid 函数。
  2. 我创建了一个“n”个样本的数据集,给定“X”的 xmin = 0.0xmax = 10.0
  3. 当我使用 sigmoid 函数时,我对“Y”和“X”值进行了标准化:

    • “Y”在 (Ymin, Ymax) 和 (-2.0, 2.0) 之间线性归一化(sigmoid 的输入范围)。
    • “X”在 (Xmin, Xmax) 和 (0.0, 1.0)(sigmoid 的输出范围)之间线性归一化。
  4. 创建数据集后,我细分为一个训练样本(占总量的 70%)、一个验证样本和一个测试样本(各占 15%)。

  5. 在这一点上,我创建了一群进行进化的个体。在所有训练样本中评估总体中的每个个体。每个位置被评估为:

    eval_pos = xmax - abs(xtarget - xobtained)

    个人的适应度是所有火车位置的平均值(我也选择了最小值,但它给了我更差的表现)。

  6. 在整个评估之后,我根据测试样本测试获得的最佳个体。这就是我获得那些“不精确的值”的地方。此外,在评估过程中,永远不会获得“abs(xtarget - xobtained) = 0”的最大值 。

此外,我假设我处理数据的方式是正确的,因为我使用相同的数据集来训练神经网络,Keras并且我得到的结果比 NEAT 好得多(在 1000 个 epoch 之后可以实现小于 1% 的误差)层有 5 个神经元)。

此时,我想知道发生的情况是否正常,因为我不应该使用数据集来开发控制器,它必须“在线”学习,并且NEAT看起来适合我的问题。

提前致谢。

编辑后的帖子:

首先,感谢尼克的评论。我将在下面回答您的问题::

  1. 我正在使用该NEAT算法。

  2. 是的,我已经进行了增加种群中个体数量和世代数的实验。我得到的典型图表是这样的:

50 代后进化,人口 150 人

虽然这个例子中的人口规模不是很大,但我在增加个体数量或世代数的实验中获得了类似的结果。例如,500 个人和 500 代的人口。在这个实验中,he 算法快速收敛到一个解,但是一旦到了那里,最好的解就被卡住了,它不再改进了。

正如我在上一篇文章中提到的,我已经尝试了许多不同参数配置的实验......并且图形或多或少与之前显示的相似。

此外,我尝试过的其他两个实验是:一旦进化达到最大值和中值收敛的点,我会根据该基因组使用新的配置参数生成其他种群,其中:

  • 突变参数随着突变的高概率(权重和神经元概率)而变化,以便找到新的解决方案,旨在从当前基因组“跳跃”到其他更好的基因组。

    • 神经元突变减少到0,而权重“ mutation probability”增加“ mutate weight”在较低的范围内,以便获得轻微的修改,目的是获得更好的权重调整。(试图获得与反向传播“相似”的功能。对权重进行轻微更改)

这两个实验没有像我预期的那样奏效,而且人群中最好的基因组也和之前的人群一样。

  1. 很抱歉,但我不太明白你想说什么“在你的健身功能中应用你自己的加权惩罚和奖励”。在健身功能中加入体重惩罚是什么意思?

问候!

0 投票
1 回答
242 浏览

python-3.x - 如何在 NEAT(增强拓扑的神经进化)中设置层数?

NEAT 的解决方案空间仅限于 2 层 ANN。无法为配置文件归档参数,以便我可以获得超过 2 层。

我开始修改并使用 NEAT 的 xor2.py 文件用于我的数据集。因此,我的 NEAT 代码正在运行,但我想超越 2 层人工神经网络。现在我被困在解决方案空间中的 2 层人工神经网络。有没有办法在配置文件中指定我需要 3 层或更多层?我尝试检查进入配置文件的所有参数,但找不到。链接 - https://neat-python.readthedocs.io/en/latest/config_file.html

0 投票
1 回答
186 浏览

python-3.x - NEAT(增强拓扑的神经进化)的典型代数?

在得出 NEAT 算法无法达到最小值之前,是否有人估计过应该搜索的代数?

我在一个非常小的癌症患者数据集(约 5K 行)上运行 NEAT。并且经过5000代后,预测生存指数的一致性指数并没有提高。

在您认为这对给定问题无效之前,有没有人知道应该尝试多少代?

0 投票
1 回答
191 浏览

python - 我的增强拓扑实现的神经进化无法解决 XOR 问题

我最近尝试自己实现 NEAT(增强拓扑的神经进化),在解决 XOR 问题时,它似乎陷入了某种局部最大值。

我的实现能够按照 NEAT 算法的预期添加隐藏节点和连接,并且我的算法有可能解决它,因为它能够在数百代之后在极少数情况下解决它。

我在这个项目中的所有代码都可以在https://github.com/Maxwell-Hunt/NEAT找到,关于这个算法的原始论文可以在http://nn.cs.utexas.edu/downloads/找到论文/stanley.ec02.pdf

当我试图让它解决 XOR 时,它通常能够得到正确的结果:[0,0] -> [0], [0,1] -> [1], [1,0] -> [1 ],但它也得到不正确的 [1,1] -> 1。