我是一名博士生,正在尝试将该NEAT
算法用作机器人的控制器,但我遇到了一些准确性问题。我正在使用 Python 2.7 并为此使用两个NEAT
python 实现:
- 这
NEAT
是在这个 GitHub 存储库中的:https ://github.com/CodeReclaimers/neat-python 在 Google 中搜索,看起来它已在一些项目中成功使用。 multiNEAT
由 Peter Chervenski 和 Shane Ryan 开发的库:http: //www.multineat.com/index.html。NEAT
出现在软件目录的“官方”软件网页中。
在测试第一个时,我发现我的程序很快收敛到一个解决方案,但是这个解决方案不够精确。由于缺乏精确性,我想说的是与进化结束时的“完美”解决方案相关的中位数和平均值至少有 3-5% 的偏差(取决于问题的复杂性,误差约为 10%对我的解决方案来说是正常的。此外,我可以说我“从未”看到过低于 1% 的错误值(由 给出的NEAT
解决方案与正确的解决方案之间)。我必须说我已经尝试了很多不同的参数组合和配置(这对我来说是一个老问题)。
因此,我测试了第二个库。该MultiNEAT
库比前一个库收敛得更快、更容易。(我假设这是由于 C++ 实现而不是纯 Python)我得到了类似的结果,但我仍然有同样的问题;缺乏准确性。第二个库也有不同的配置参数,我还没有找到合适的组合来提高问题的性能。
我的问题是:结果
缺乏准确性是否正常NEAT
?它实现了很好的解决方案,但不足以控制机械臂,而这正是我想要使用它的目的。
如果有人在我提出问题的方式中发现一些概念或技术错误,我会写下我正在做的事情:
为了简化问题,我将展示一个非常简单的示例:我有一个非常简单的问题要解决,我想要一个可以计算以下函数的 NN:(使用or或类似函数y = x^2
可以找到类似的结果)y=x^3
y = x^2 + x^3
我开发该程序所遵循的步骤是:
- “Y”是网络的输入,“X”是输出。神经网络的激活函数是 sigmoid 函数。
- 我创建了一个“n”个样本的数据集,给定“X”的
xmin = 0.0
值xmax = 10.0
当我使用 sigmoid 函数时,我对“Y”和“X”值进行了标准化:
- “Y”在 (Ymin, Ymax) 和 (-2.0, 2.0) 之间线性归一化(sigmoid 的输入范围)。
- “X”在 (Xmin, Xmax) 和 (0.0, 1.0)(sigmoid 的输出范围)之间线性归一化。
创建数据集后,我细分为一个训练样本(占总量的 70%)、一个验证样本和一个测试样本(各占 15%)。
在这一点上,我创建了一群进行进化的个体。在所有训练样本中评估总体中的每个个体。每个位置被评估为:
eval_pos = xmax - abs(xtarget - xobtained)
个人的适应度是所有火车位置的平均值(我也选择了最小值,但它给了我更差的表现)。
在整个评估之后,我根据测试样本测试获得的最佳个体。这就是我获得那些“不精确的值”的地方。此外,在评估过程中,永远不会获得“abs(xtarget - xobtained) = 0”的最大值 。
此外,我假设我处理数据的方式是正确的,因为我使用相同的数据集来训练神经网络,Keras
并且我得到的结果比 NEAT 好得多(在 1000 个 epoch 之后可以实现小于 1% 的误差)层有 5 个神经元)。
此时,我想知道发生的情况是否正常,因为我不应该使用数据集来开发控制器,它必须“在线”学习,并且NEAT
看起来适合我的问题。
提前致谢。
编辑后的帖子:
首先,感谢尼克的评论。我将在下面回答您的问题::
我正在使用该
NEAT
算法。是的,我已经进行了增加种群中个体数量和世代数的实验。我得到的典型图表是这样的:
虽然这个例子中的人口规模不是很大,但我在增加个体数量或世代数的实验中获得了类似的结果。例如,500 个人和 500 代的人口。在这个实验中,he 算法快速收敛到一个解,但是一旦到了那里,最好的解就被卡住了,它不再改进了。
正如我在上一篇文章中提到的,我已经尝试了许多不同参数配置的实验......并且图形或多或少与之前显示的相似。
此外,我尝试过的其他两个实验是:一旦进化达到最大值和中值收敛的点,我会根据该基因组使用新的配置参数生成其他种群,其中:
突变参数随着突变的高概率(权重和神经元概率)而变化,以便找到新的解决方案,旨在从当前基因组“跳跃”到其他更好的基因组。
- 神经元突变减少到0,而权重“
mutation probability
”增加“mutate weight
”在较低的范围内,以便获得轻微的修改,目的是获得更好的权重调整。(试图获得与反向传播“相似”的功能。对权重进行轻微更改)
- 神经元突变减少到0,而权重“
这两个实验没有像我预期的那样奏效,而且人群中最好的基因组也和之前的人群一样。
- 很抱歉,但我不太明白你想说什么“在你的健身功能中应用你自己的加权惩罚和奖励”。在健身功能中加入体重惩罚是什么意思?
问候!