动画系统的神经网络大小

时间:2010-08-16 18:51:00

标签: animation machine-learning neural-network physics genetic-algorithm

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

但是,如果您愿意花一些时间,请查看HyperNEAT for Locomotion Control in Modular Robots处理或多或少相同的问题。 他们使用一种名为HyperNEAT的非常先进的GA技术,并报告了一些好的结果。

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

然后NEAT略有改动,以便能够使用各种激活功能。当它应用于一组点时,它将使它能够产生各种各样的“模式”。在坐标系中。模式可以具有一些有趣的特征,例如完美/不完美的对称性,或者它们可以是周期性的。此变体称为Compositional pattern-producing network或CPPN。这项技术的一个壮观应用是PicBreeder,其中网络用于“绘制”图片。

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

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

总而言之,它会让你有机会解决你的复杂问题。

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

答案 1 :(得分:0)

有趣的方法!我一直在考虑类似的事情,很想听听你得到的结果。

你必须测试,但我猜你有太多的隐藏层。我认为这个应用程序最多可以使用一个或两个。

你还应该看看你的健身功能 - 我怀疑提供学习可能“太难”,因为在一开始它没有希望站起来。因此,您陷入的“本地最小”是学习如何以最少的努力堕落。不是很有用。一般来说,GA都受到当地极小的影响。

为了改善你的健身功能,我会尝试一些方法来惩罚每一帧直立的偏差。这将为管理部分平衡的解决方案提供一些信誉,因此应该有一条改进路径。在你让它们达到平衡之前,我根本不会为能量使用而烦恼。