8

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

4

2 回答 2

5

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

但是,如果您愿意花一些时间来看看HyperNEAT for Locomotion Control in Modular Robots,它或多或少地处理相同的问题。他们使用了一种非常先进的遗传算法,称为 HyperNEAT,并报告了一些不错的结果。

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

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

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

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

总而言之,它会给你一个解决复杂问题的机会。

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

于 2010-08-17T08:56:48.560 回答
0

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

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

你还应该看看你的健身功能——我怀疑提供学习可能“太难”了,因为一开始它没有站起来的希望。因此,您陷入的“局部最小值”是学习如何以最少的努力跌倒。不是很有用。一般来说,GAs 受局部最小值的影响很大。

为了提高你的健身功能,我会尝试惩罚每帧的直立偏差。这将为管理部分平衡的解决方案带来一些好处,因此应该有一条改进路径。在你让它们平衡之前,我根本不会担心能源使用。

于 2010-08-16T19:02:02.457 回答