Neural network 实时模拟神经进化中的适应度评估与训练集

Neural network 实时模拟神经进化中的适应度评估与训练集,neural-network,genetic-algorithm,Neural Network,Genetic Algorithm,我正在尝试训练一个神经网络,在模拟的2D环境中控制一个简单的实体,目前使用的是遗传算法 可能是由于对正确的术语不熟悉,我的搜索没有提供太多关于如何处理以下所有情况下的健身和训练的信息: 没有关于给定输入的正确输出的可用数据 性能评估只能在与环境进行长时间的交互(通过连续的控制器输入/输出调用)后进行 该系统具有固有的随机性 目前我的做法如下: NN输入是实体和环境状态的瞬时传感器读数 输出是其效应器的瞬时激活水平,例如,执行器的推力水平 我通过为给定的NN控制器运行模拟来生成性能值,或者在

我正在尝试训练一个神经网络,在模拟的2D环境中控制一个简单的实体,目前使用的是遗传算法

可能是由于对正确的术语不熟悉,我的搜索没有提供太多关于如何处理以下所有情况下的健身和训练的信息:

  • 没有关于给定输入的正确输出的可用数据
  • 性能评估只能在与环境进行长时间的交互(通过连续的控制器输入/输出调用)后进行
  • 该系统具有固有的随机性
目前我的做法如下:

  • NN输入是实体和环境状态的瞬时传感器读数
  • 输出是其效应器的瞬时激活水平,例如,执行器的推力水平
  • 我通过为给定的NN控制器运行模拟来生成性能值,或者在预设的模拟时间段内,或者直到达到某个系统状态。然后根据对行为/最终状态的观察,适当分配性能值
  • 为了防止过度拟合,我使用不同的随机生成器种子为系统重复上述多次,并使用一些指标(如平均/最低性能值)指定适合度
  • 这是为每一代的每一个人所做的。在给定的一代中,为了公平起见,每个人将使用同一组随机种子
我有几个问题

  • 这是解决此类问题的合理、标准方法吗?毫不奇怪,这一切加起来是一个非常昂贵的计算过程。我想知道是否有什么方法可以避免每次生成适应值时都必须从头开始重新运行模拟

  • 如上所述,同一组随机种子用于一代中每个个体的模拟。从一代人到下一代人,这个集合应该保持不变,还是应该有所不同?我的本能是每代使用不同的种子,以进一步避免过度拟合,这样做不会对选择力产生不利影响。然而,从我的结果来看,我不确定这一点


  • 这是一种合理的方法,但遗传算法并不以其快速/高效而著称。试试爬山,看看能不能快一点。还有很多其他的优化方法,但是如果你假设函数是一个只能从中取样的黑盒子,那么没有什么是好的。强化学习可能有效


    使用随机种子应防止过度拟合,但根据静态测试的平均代表性以及过度拟合的容易程度,可能没有必要这样做。

    谢谢您的建议。确实有很多方法,目前我的问题有一半是不清楚它们是否相互关联以及如何关联。我读了一段关于RL的文章,认为在每一个时间步给予奖励的想法似乎不适合我的问题领域,但也许我认为不够。你有机会在黑匣子评论上详细阐述一下吗?我怀疑这可能是关键,但我不确定你的意思。@kamrann在强化学习中,你把它当作一个机器学习问题。你接受输入,然后预测你采取的每一个行动的最终适应度。例如,“向左移动与向右移动相比,获胜的几率要高出10%。”优点是您可以存储数据,然后离线训练一段时间,而无需进行完整的模拟。您还可以使用梯度下降和快速学习方法。我在这方面没有太多的经验,所以我不能告诉你它在实践中会有多好。@kamrann“黑箱”只是一个术语,意思是把问题当作一个函数来处理,你只能给出一个解决方案,然后得到一个关于它有多好的数字。你看不到它的内部,你对参数是如何影响健康的视而不见。是的,这是能够预测我认为RL不合适的行动水平的回报的要求。特别是我想让代理学习一项我自己事先不知道如何最好地解决的任务。然而,在阅读了更多内容后,我可以看到RL的应用非常广泛,我可以在模拟中为代理提供某种持续的提示/评估。我怀疑代理不完全了解其环境或其行为的影响会使这变得困难,但我会调查一下。谢谢