用遗传算法训练神经网络玩飞扬的小鸟 - 为什么它不能学习?
Training Neural Network to play flappy bird with genetic algorithm - Why can't it learn?
我一直在学习神经网络和遗传算法,为了测试我的学习,我尝试制作一个学习飞扬的小鸟的人工智能:
我已经离开它 运行 至少 10 个小时(一整夜或更长时间),但最健康的成员仍然没有表现出从我开始模拟时的任何显着智力进步,除了避免地板和天花板。
输入是充当视线的光线(如您所见),网络输入光线的长度和鸟类的垂直速度。看来极品鸟本质上是忽略了除了水平线以外的所有视线,在很短的时候就在跳跃。
输出是一个介于 0 和 1 之间的数字,如果输出大于 0.5,则小鸟会跳跃。
有 4 个隐藏层,每个有 15 个神经元,输入层前馈给第一个隐藏层,然后第一个隐藏层前馈给第二个……最后一个隐藏层前馈给输出,即 dna一只鸟是代表神经网络权重的实数数组,我使用相同风格的神经网络和遗传算法制作了另一个项目,其中蚂蚁必须前往食物,并且效果很好。
代码如下:https://github.com/Karan0110/flappy-bird-ai
如果您需要任何其他信息,请在评论中说明
你能说说我的方法是否有缺陷,因为我几乎可以肯定代码工作正常(我从以前的工作项目中得到)。
我喜欢你的想法,但我建议你改变一些东西。
不要使用结构固定的网络。查看 Neural evolution of autgmenting topologies 并自己实现它,或者使用像 neataptic 这样的库。
- 我认为您的网络不需要那么多输入。我相信 3-5 个传感器(20-50° 间隙)就足够了,因为许多输入值似乎非常相似。
如果您不确定您的项目为何无法运行,请尝试以下操作:
尝试查看当前最佳网络的图像。如果网络没有考虑重要的传感器(如速度),您会立即看到它。
确保所有传感器都正常工作(在上图中看起来很好)并确保以有意义的方式对值进行 nkrmalize。
检查最高分和平均分是否随时间增加。如果不是,则您的 GA 无法正常工作,或者您的网络收到的输入不足以解决问题。
一个对我帮助很大的技巧是将 GA 的精英保存在一个单独的数组中。如果其他网络的表现优于精英网络,则仅更换精英网络。将精英保留在所有世代中,所以一旦你的算法找到了一个非常好的解决方案,如果没有其他更好的解决方案,它就不会在未来的任何一代中丢失。
我一直在学习神经网络和遗传算法,为了测试我的学习,我尝试制作一个学习飞扬的小鸟的人工智能:
我已经离开它 运行 至少 10 个小时(一整夜或更长时间),但最健康的成员仍然没有表现出从我开始模拟时的任何显着智力进步,除了避免地板和天花板。 输入是充当视线的光线(如您所见),网络输入光线的长度和鸟类的垂直速度。看来极品鸟本质上是忽略了除了水平线以外的所有视线,在很短的时候就在跳跃。 输出是一个介于 0 和 1 之间的数字,如果输出大于 0.5,则小鸟会跳跃。 有 4 个隐藏层,每个有 15 个神经元,输入层前馈给第一个隐藏层,然后第一个隐藏层前馈给第二个……最后一个隐藏层前馈给输出,即 dna一只鸟是代表神经网络权重的实数数组,我使用相同风格的神经网络和遗传算法制作了另一个项目,其中蚂蚁必须前往食物,并且效果很好。
代码如下:https://github.com/Karan0110/flappy-bird-ai
如果您需要任何其他信息,请在评论中说明
你能说说我的方法是否有缺陷,因为我几乎可以肯定代码工作正常(我从以前的工作项目中得到)。
我喜欢你的想法,但我建议你改变一些东西。
不要使用结构固定的网络。查看 Neural evolution of autgmenting topologies 并自己实现它,或者使用像 neataptic 这样的库。
- 我认为您的网络不需要那么多输入。我相信 3-5 个传感器(20-50° 间隙)就足够了,因为许多输入值似乎非常相似。
如果您不确定您的项目为何无法运行,请尝试以下操作:
尝试查看当前最佳网络的图像。如果网络没有考虑重要的传感器(如速度),您会立即看到它。
确保所有传感器都正常工作(在上图中看起来很好)并确保以有意义的方式对值进行 nkrmalize。
检查最高分和平均分是否随时间增加。如果不是,则您的 GA 无法正常工作,或者您的网络收到的输入不足以解决问题。
一个对我帮助很大的技巧是将 GA 的精英保存在一个单独的数组中。如果其他网络的表现优于精英网络,则仅更换精英网络。将精英保留在所有世代中,所以一旦你的算法找到了一个非常好的解决方案,如果没有其他更好的解决方案,它就不会在未来的任何一代中丢失。