Animation 动画系统的神经网络尺寸

Animation 动画系统的神经网络尺寸,animation,machine-learning,neural-network,physics,genetic-algorithm,Animation,Machine Learning,Neural Network,Physics,Genetic Algorithm,我决定使用神经网络为我拥有的动画引擎创建行为。神经网络为我拥有的每个身体部位接收3个矢量和1个欧拉角。第一个矢量是位置,第二个是速度,第三个是角速度。欧拉角是身体部位的旋转角度。我有7个身体部位。这些数据类型中的每一种都有3个浮动。7*4*3=84,所以我的神经网络有84个输入。输出映射到角色的肌肉。它们为每一块肌肉提供足够的力量,共有15块 我同时运行15个网络10秒,通过计算能量消耗最低、z和x移动量最少、身体部位与其他部位相比是否处于正确的y位置(hips.y>upperleg.y、upp

我决定使用神经网络为我拥有的动画引擎创建行为。神经网络为我拥有的每个身体部位接收3个矢量和1个欧拉角。第一个矢量是位置,第二个是速度,第三个是角速度。欧拉角是身体部位的旋转角度。我有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个输出。我的神经网络应该有多大?

有趣的方法!我已经想了一段时间类似的事情,我很想听听你得到了什么结果

您必须进行测试,但我猜您的隐藏层太多了。我认为这个应用程序最多只能使用一两个

你还应该看看你的健身功能——我怀疑它可能“太难”提供学习,从某种意义上说,在一开始它没有站起来的希望。因此,你陷入的“局部最低限度”是学习如何用最少的努力跌倒。不是很有用。一般来说,气体会受到相当多的局部极小值的影响


为了改善你的健身功能,我会尝试一些类似于惩罚每一帧偏离垂直的动作。这将给管理部分平衡的解决方案带来一些好处,因此应该有一条改进路径。在你让它们达到平衡之前,我根本不会为能源使用而烦恼。

你想要解决的问题是一个相当棘手的问题,我怀疑任何“普通”天然气(尤其是使用固定网络架构的天然气)能否(在合理的时间内)解决它。我也不认为你会在隐藏层找到“正确数量的神经元”

然而,如果你愿意花一些时间在它上面,看看哪一个处理或多或少相同的问题。 他们使用了一种非常先进的GA技术,称为HyperNEAT,并报告了一些良好的结果

HyperNEAT构建在NEAT()之上。NEAT不仅能够进化ANN的权重,还能够进化ANN的结构。它从简单的网络开始,慢慢地让它们变得更复杂,直到你达到目标(或放弃)

然后对NEAT稍加修改,以便能够使用各种激活功能。当它应用于一组点(例如坐标系中的点)时,它将使其能够产生各种各样的“模式”。这些模式可以有一些有趣的特征,比如完美/不完美对称,也可以是周期性的。这种变体称为CPPN或CPPN。这项技术的一个引人注目的应用是网络被用来“绘制”图片

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

  • 它本身很小
  • 最终可以产生任意的大网络
  • 这也会表现出相当复杂的行为
  • 现实/自然中出现的模式(同样,对称、周期性行为)相对容易出现。请注意,对于动画/有效运动,这两种方法都非常有利(如果不是必须的话)
总之,它会给你一个解决复杂问题的机会


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

实际上,我摆脱了固定指标,只专注于最小化能量和保持在一个x z位置。即使在不到30代人的时间里,这也不起作用。这是我计算健康的方式出了问题。它开始为低能量工作,并停留在一个x z位置。我会让你们知道站着的情况。我不喜欢你们的回答,但这似乎是真的。谢谢你的提醒。看完这些文献后,我很好奇。NEAT和HyperNEAT的区别是CPPN,对吗?CPPN能够创建神经网络,但它本身不是神经网络吗?或者它是一个进化然后创造其他神经网络的神经网络?非常有用,谢谢。NEAT使用直接编码,这意味着对于基因组中的每个神经元和连接,在最终的网络中都会有相同的编码。HyperNEAT使用间接编码。基因组是一个网络(CPPN由NEAT进化而来),当你在基底的神经元对上应用时(第二个网络的神经元+一些更多信息,通常是其在2D/3D坐标系中的坐标),将产生连接权重。我认为从技术上讲,CPPN也是一个NN,但它可以使用奇特的激活函数,而不是通常的sigmoid/tanh。然而,可能还有一些其他的细微差别。