神经网络在动画系统中的规模

我决定使用神经网络来为我拥有的动画引擎创建行为。神经网络接收每个身体部位的3个vector3和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个输出。我的神经网络应该有多大?


回答:

你想解决的问题相当棘手,我怀疑任何“普通”的遗传算法(特别是那些使用固定网络架构的)能在合理的时间内解决它。我也不认为你能找到隐藏层中“正确的神经元数量”。

然而,如果你愿意花些时间,可以看看HyperNEAT for Locomotion Control in Modular Robots,它处理的是或多或少相同的问题。他们使用了一种称为HyperNEAT的相当先进的遗传算法技术,并报告了一些不错的结果。

HyperNEAT建立在NEAT(Neuroevolution of augmenting topologies)之上。NEAT不仅能进化ANN的权重,还能进化其结构。它从简单的网络开始,逐渐使其变得更加复杂,直到达到你的目标(或放弃)。

然后NEAT稍作修改,以便能够使用各种激活函数。这将使其在应用于一组点(例如,在坐标系中)时产生多种“模式”。这些模式可以具有一些有趣的特征,如完美/不完美的对称性或周期性。这种变体称为Compositional pattern-producing network或CPPN。这种技术的一个壮观应用是PicBreeder,在这里网络被用来“绘制”图片。

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

  • 本身很小
  • 最终可以生成任意大的网络
  • 还可以展示相当复杂的行为
  • 现实/自然中出现的模式(再次,对称性、周期性行为)可以相对容易地出现。请注意,对于动画/有效的运动,这两者都非常有利(如果不是必须的)。

总的来说,这将给你一个机会来解决你的复杂问题。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注