我主要参考的是这篇论文:http://clgiles.ist.psu.edu/papers/UMD-CS-TR-3617.what.size.neural.net.to.use.pdf
当前设置:
我目前正在尝试将手头上的神经-遗传AI解决方案移植到一个多用途多代理工具中。例如,它应该能在游戏引擎中作为AI来移动实体,让它们射击并摧毁敌人(例如,4个输入如距离x,y和角度x,y,以及2个输出如加速左、右)。
目前的状态是,我使用与代理数量相同的基因组来确定最适合的代理。最适合的20%的代理彼此结合(选择了zz, zw基因组),并为新种群各创造两个后代。新一代种群的其余部分是从旧种群中随机选择的,包括最适合但基因组不佳的代理。
这种方法在训练AI方面效果很好,经过50-100代后,在一个打砖块游戏的克隆版和一个可以射击和移动的小型坦克游戏中,几乎是人类无法战胜的。
当我想到为每种“代理类型”使用一个进化种群时,现在的问题是是否有可能通用地确定隐藏层的数量和隐藏层中神经元的数量。
我在坦克游戏中的设置是4个输入,3个输出和1个隐藏层,12个神经元的效果最好(大约50代后变得非常强大)。
我在打砖块游戏中的设置是6个输入,2个输出和2个隐藏层,每层12个神经元,似乎效果最好。
已完成的研究:
回到论文:在第32页,你可以看到,每个隐藏层的神经元越多,当然需要更多的时间来训练,但中间的神经元越多,进入无噪声函数的机会就越大。
我目前仅使用成功比上次尝试更好的健身增加来训练我的AI。
所以在坦克游戏中,这意味着它成功地射击了另一个坦克(击伤对方4次更好,然后敌人死亡)并赢得了回合。
在打砖块游戏中,情况类似,因为我有一个AI可以移动的挡板,它可以收集点数。“被射中”或负面处理在这里是指它忘记了接住球。因此,潜在的噪声输入将是2个输出值(向左移动,向右移动),它们依赖于4个输入值(球的x, y, degx, degy)。
问题:
那么,你认为对于隐藏层的数量和神经元的数量,怎样的计算可以作为一个好的折衷方案,以避免噪声破坏基因组的进化?
在你能说“它进一步进化”之前,最少需要多少个代理?我当前的训练设置总是有大约50个代理并行学习(所以它们基本上是在幕后并行模拟50个游戏)。
回答:
总的来说,对于大多数问题,可能可以通过设置隐藏层配置来获得不错的性能(即使没有第二步优化),只需遵循两个规则:(i) 隐藏层的数量等于一;(ii) 该层的神经元数量是输入层和输出层神经元数量的平均值。
–doug
简而言之,这是一个正在进行的研究领域。我所知道的所有使用大量神经元和隐藏层的ANN都没有设置静态数量,而是使用算法持续修改这些值。通常在输出收敛/发散时构建和销毁。
既然你似乎已经在使用一些进化计算,建议你考虑研究Andrew Turner关于CGPANN的工作,我记得它在类似于你的工作的基准测试上取得了相当不错的改进。