动画系统的神经网络大小

DrS*_*myD 8 animation physics machine-learning neural-network genetic-algorithm

我决定使用神经网络来创建我拥有的动画引擎的行为.神经网络为我拥有的每个身体部位提供3个vector3s和1个欧拉角.第一个vector3是位置,第二个是它的速度,第三个是它的角速度.欧拉角是身体部位的旋转.我有7个身体部位.这些数据类型中的每一个都有3个浮点数.7*4*3 = 84,所以我的神经网络有84个输入.输出映射到角色的肌肉.它们提供适用于每块肌肉的力量,其中有15种.

我同时运行15个网络10秒,通过计算最低能量使用,具有最小量的z和x运动,以及如果身体部位处于与其余部分相比正确的y位置来评定其适合度(hips.y> upperleg.y,upperleg.y> lowerleg.y等),然后通过遗传算法运行它们.我正在运行一个神经网络,每个隐藏层有168个神经元,有8个隐藏层.我试图让角色站直,不要走​​动太多.我跑了3000代,我甚至没有接近.

神经网络和遗传算法是本教程的 C#版本.我将交叉方法从一个点改为混合.

我有84个输入和15个输出.我的神经网络应该有多大?

San*_*ozi 5

你要解决的问题是一个非常棘手的问题,我怀疑任何"vanilla"GA(特别是那些使用固定架构的网络)都会解决它(在合理的时间内).我也不认为你会在隐藏层中找到"正确数量的神经元".

但是,如果你愿意花一些时间在它上面看一下HyperNEAT用于模块化机器人中的运动控制,它可以处理或多或少相同的问题.他们使用一种名为HyperNEAT的非常先进的GA技术并报告了一些好的结果.

HyperNEAT建立在NEAT(增强拓扑的神经进化)之上.NEAT不仅能够发展人工神经网络的权重,还能够发展其结构.它从简单的网络开始,慢慢使它们变得更加复杂,直到你达到目标(或放弃).

然后稍微改变NEAT,以便能够使用各种激活功能.当它应用于一组点时,例如在坐标系中,它将使它能够产生各种各样的"模式".模式可以具有一些有趣的特征,例如完美/不完美的对称性,或者它们可以是周期性的.该变体称为组合模式生成网络或CPPN.这种技术的一个引人注目的应用是PicBreeder,其中网络用于"绘制"图片.

HyperNEAT中,CPPN用于创建其他ANN.新网络的隐藏层由所谓的基板表示,可以将其想象为层的神经元被放置到2D/3D坐标系.然后,对于每对可能的神经元(从输入层到所有隐藏,从所有隐藏到所有输出),CPPN用于确定权重.因此我们有一个间接编码,它

  • 本身很小
  • 最终会产生任意大网络
  • 这也可能表现出相当复杂的行为
  • 现实/自然中出现的模式(再次,对称性,周期性行为)可以相对容易地出现.注意,对于动画/有效运动,它们都是非常有利的(如果不是必须的话).

总而言之,它将为您提供解决复杂问题的机会.

正如您所看到的,这种技术有各种层次,因此为您自己实现它并不容易.幸运的是,有一些很好的实现,你可以在NEAT 主页上找到它们,以及许多其他文档,论文和教程.