通过进化算法教生物力学模型学会走路

人形模型使用真正的肌肉行走。

本文中的源代码可以在这个GitHub库中找到。

(https://github . com/normandipalo/learn-to-walk-with-genetic-algs)

2017年NIPS的挑战之一是“学习跑步”:如标题所示,这项任务需要设计和开发一种能够控制人体生物力学模型行走的学习算法。算法中的执行器(不同于大多数机器人问题)是一组腿部肌肉,每条腿由9块肌肉组成。发布挑战的作者修改了OpenSIM环境以适应增强学习的设置,从而添加了一个奖励信号。

有些事情变得非常糟糕(或非常正确)。

许多竞争对手已经设计了端到端深度强化学习算法,这些算法近年来在连续控制任务中表现良好。然而,这些模型通常还需要大量的计算力和时间来学习成功的策略,并且通常在多台机器上具有更好的并行效果。

我决定用自己的方式来尝试这个挑战。我实现并扩展了我最近为机器人控制开发的一个相当轻量级的方法,特别是结合了神经网络控制器的进化算法。使用这些算法的优点是它们不需要推导,可以高度并行,并且可以获得与深度RL算法相似的结果。参见OpenAI上的相关文章。问题是练习完全是随机的,所以很难估计学习的内容和方法,但我还是希望尝试这种方法。

像一个蹒跚学步的孩子一样开始几步。

…重要的是不要只保留表现最好的模型,因为模型会陷入局部极小点(很难离开这些点)。

进化算法应用于数值优化问题。该算法通过相关的目标函数优化其参数。本主题中的这些参数和目标函数应该是什么?根据经验:腿以周期性的方式运动。肌肉运动遵循周期和正弦时间规则,但很难手动实现这一规则。如何构造周期函数?这里介绍傅立叶级数。我们知道傅立叶级数(利用正弦和余弦的累加)可以估计任何周期函数。但理论上,它们可以有无限项。我设计了部分项的傅立叶级数来构造肌肉运动。这里只使用前四个余弦序列,因此生成八个参数:四个权重值乘以不同频率相位的四个余弦值。这个位置的每块肌肉都构成一个周期性的功能。每条腿有9块肌肉。我用了9组周期函数。这里,我假设另一条腿使用相同的运动模式,并且可以用相同的功能构造,但是相位差是180°。遗传算法通过修改和调整这些参数来优化目标函数的结果(与神经网络参数相比,这个数目已经非常小)。显然,这是最后一个极端的功能,比如机器人走了多远就摔倒了。

一天训练后的行走模式

参数从白噪声中采样并随机修改。然而,如果手在某个采样方向上的性能有所提高,则参数将在该方向上进一步移动,直到性能没有进一步提高。我并行运行了三个模型,因为对于一个笔记本来说,计算量已经非常大了。性能最佳的重量保存在参数文件中。执行几个批次后,训练将从性能最佳的前3个参数集开始。这使得算法能够更好地探索不同的行为:重要的是不要只探索当前的最优模型,因为该模型可能会陷入局部最优而难以逃脱,而性能较差的模型可以通过在一段时间的训练后微调其他行为而超过当前的最优模型。事实上,在一系列模拟行走之后,从最佳的三个模型重新开始是成功学习行走模式的关键。在没有先验知识的情况下,该模型可以学习类人运动行为,这是非常不简单的。

在相对较短的训练时间和较差的硬件条件下(英特尔酷睿2双核处理器),该模型可以成功地采取几个步骤。其他深度增强学习模型显然取得了较好的效果,但需要较长的训练时间和强大的硬件。我的目标不是真正与这些模型竞争,而是展示如何使用遗传算法和少于100个参数的模型在低成本笔记本上快速获得行走模式。

标题:通过进化算法教生物力学模型学会走路

如若转载,请注明出处:http://www.ikepu.com/wenzhang/43405.html