从系列:强化学习
布莱恩•道格拉斯
这个视频展示了如何使用强化学习工作流让一个两足机器人行走。本文还将介绍如何修改默认示例,使其看起来更像通过添加参考信号来设置传统控制问题的方法。它还将考虑配备rl的代理如何取代传统控制系统的部分部件,而不是端到端设计。最后,将展示此设计的一些局限性。
现在我们已经了解了强化学习的工作流程,在这个视频中,我想展示如何使用该工作流程来让一个两足机器人使用rl装备的代理行走。我们将使用来自MATLAB和Simulink Robotics Arena的步行机器人例子,你可以在GitHub上找到。金宝app我在描述区留了一个链接。本示例附带了一个环境模型,您可以在其中调整训练参数、训练代理并可视化结果。在这个视频中,我们还会看一下如何修改这个例子让它看起来更像我们建立一个传统的控制问题,然后展示这个设计的一些局限性。所以我希望你们能继续学习因为我认为这将帮助你们理解如何在典型的控制应用中使用强化学习。我是Brian,欢迎来到MATLAB技术讲座。
让我们先快速概述一下这个问题。高级目标是让一个两条腿的机器人像人类一样行走。作为设计师,我们的工作是确定正确移动机器人的腿和身体的动作。我们可以采取的动作是每个关节的电机扭矩指令;这是左右脚踝,左右膝盖,左右髋关节。所以在任何给定的时间,我们都需要发送六个不同的扭矩命令。
机器人的身体和腿,以及它所操作的世界,构成了环境。对环境的观察是基于传感器的类型和位置,以及由软件生成的任何其他数据。在这个例子中,我们使用了31种不同的观察结果。这些是Y和Z的位置,X, Y, Z的速度,以及物体的方向和角速度。还有六个关节的角度和角速度,以及脚和地面之间的接触力。这些是感知到的观测结果。我们还会反馈我们在前一个时间步骤中命令的6个动作,这些动作被存储在软件的缓冲区中。所以,总的来说,我们的控制系统吸收了这31个观测结果,并且必须连续计算6个电机扭矩的值。所以你可以开始看到,对于这个非常简单的系统,逻辑是多么复杂。
正如我在之前的视频中提到的,与其尝试用传统的控制理论工具来设计逻辑,回路,控制器,参数,以及所有这些东西,我们可以用一个强化学习代理来代替整个庞大的函数,端到端;一个是利用行动者网络将这31个观察结果映射到6个行动,另一个是评价网络使训练行动者更有效率。
正如我们所知,训练过程需要一种奖励功能——一种告诉代理它是如何做的东西,这样它就可以从自己的行为中学习。我想通过思考对行走机器人来说很重要的条件来推理奖励功能中应该存在什么。如果你不知道从哪里开始,这可能就是你构建奖励功能的方法。现在,我将向您展示我们创建这个函数时的培训结果,以便您可以看到更改如何影响解决方案;但是,我不会讲到如何运行这个模型因为塞巴斯蒂安·卡斯特罗已经做了一个很棒的视频。所以,如果你有兴趣自己尝试所有这些方法,我建议你看看下面描述中的链接。好了,接下来是奖励。
从哪里开始?我们显然希望机器人的身体向前移动;否则它就会站在那里。但我们可以奖励它前进的速度,而不是距离。这样,机器人就有希望走得更快而不是更慢。在用这种奖励进行训练后,我们可以看到机器人在开始时向前俯冲以获得快速的爆发速度,然后摔倒了,并没有真正做到任何地方。它可能最终会想出如何在这个奖励下更进一步,但它花了很长时间才收敛,而且没有取得很大进展,所以让我们想想我们可以添加什么来帮助训练。我们可以惩罚机器人摔倒,这样向前跳水就不那么吸引人了。所以如果它站立的时间更长,或者在模拟结束前经过了更多的采样时间,那么代理就应该获得更多奖励。
让我们看看它是怎么做的。它在一开始有一点跳跃,最后又掉了下来。也许如果我让这个特工训练的时间再长一些,我就能拥有一个像青蛙一样跳跃世界的机器人,这很酷,但那不是我想要的。机器人向前移动不摔倒是不够的;我们想要一些行走的样子,而不是跳跃或蹲伏行走。为了解决这个问题,我们还应该奖励保持身体尽可能接近站立高度的代理人。
让我们来看看这个奖励功能。好吧,这个看起来好多了,但解决方案看起来不太自然。它偶尔会停下来来回抖动它的腿,大多数时候它像僵尸一样拖着右腿把所有的动力都放在左腿上。如果我们考虑驱动器的磨损或者运行机器人所需要的能量,这就不是理想的。我们希望两条腿做相同的工作,而不是过度使用驱动器,有很多抖动。为了解决这个问题,我们可以奖励代理最小化执行器的努力。这应该减少额外的抖动和平衡的努力,使每条腿都有一份负荷。
让我们看看我们训练有素的特工。好了,快到了。这看起来很不错。不过现在我们还有最后一个问题。我们想让机器人保持直线运动,而不是像这里那样向左或向右转向,所以我们应该奖励它靠近x轴。
这是我们最后的奖励,用它训练需要大约3500个模拟。所以如果我们在我们的模型中设置了这个,我们在一台有多核或GPU或计算机集群的计算机上释放模拟,然后经过几个小时的训练,我们就会有一个解决方案。我们将会有一个像人类一样直线行走的机器人。
有了奖励功能集,我们再来看看政策。我已经说过,政策是一个参与者神经网络,同时也是一个批评神经网络。每个网络都有几百个隐藏的神经元层,所以需要进行大量的计算。如果我们没有足够的神经元,那么这个网络将永远无法模拟高维函数,而这种高维函数需要将31个观察结果映射到这个非线性环境中的6个动作。另一方面,太多的神经元和我们花费更多的时间训练过度的逻辑。此外,网络的架构在功能复杂性方面非常重要。比如层数,它们是如何连接的,以及每一层的神经元数量。因此,需要一些经验和知识来找到最佳点,使培训成为可能和有效。
幸运的是,正如我们所知,我们不需要手动解决网络中成千上万的权重和偏差。我们让训练算法帮我们做到这一点。在本例中,我们使用了一个称为深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)的演员/评论家训练算法。原因是这个算法可以在有连续动作空间的环境中学习就像我们对马达施加的连续扭矩范围一样。而且,由于它估计了一个确定性策略,它比一个学习随机策略的更快。
我知道这听起来相当复杂和抽象,但对我来说最酷的是,大部分的复杂性都是用于培训政策的。一旦我们有了训练有素的特工,我们要做的就是把参与者网络部署到目标硬件上。记住,行动者是将观察映射到行动的函数;这是决定要做什么的东西,这是政策。评论家和学习算法只是帮助确定演员的参数。
好了,现在你可能有一个问题。当然,我们可以使用RL让机器人走直线;然而,这项政策不是只做一件事吗?例如,如果我部署这个策略并打开我的机器人,它就会立即开始直线行走,永远。那么我怎样才能学习一个策略,让我向机器人发出指令,让它走到我想让它走的地方呢?
我们想一下。现在,这就是我们的系统。我们有产生观察和奖励的环境,然后我们有产生行为的代理。我们没有办法向这个系统注入任何外部命令,我们的代理也没有办法响应它们,即使我们有它们。所以我们需要写一些额外的逻辑,在代理之外,接收参考信号并计算错误项。这个错误是我们可以从环境中得到的当前X位置与参考值之间的差值。这和正常反馈控制系统中的误差计算是一样的。
现在,我们可以奖励小误差,而不是奖励在X方向上更快的速度。这将激励机器人走向并停留在命令的x参考值上。
对于观察,我们需要给代理一种查看错误项的方法,以便它可以相应地开发策略。因为这可能会帮助我们的代理获得误差变化率或者其他更高的导数,我将输入最近5次样本的误差。这将允许该政策在必要时创造衍生品。最终,如果错误是正的,政策将以特定的速率前进,如果错误是负的,则后退。
由于我们现在有36个观察到我们的代理,我们需要调整我们的参与者网络来处理额外的输入。同样,如果您需要如何进行这些更改的指导,请查看描述中的Sebastian的视频。
我在Simulink中用新的错误项更新了默认模型,并将其反馈到观察块金宝app和奖励块中。我已经用这个资料训练了这个探员几千集了,所以它应该很擅长跟踪这个。但希望是,经过训练的政策将足够强大,以效仿其他具有类似速率和加速度的profile。所以让我们试一试。我要让它向前走,暂停一会儿,然后向后走。
当它向后走的时候看起来有点滑稽,但总的来说是很好的努力。通过一些奖励调整和多花一点时间训练,我可能会在这里做一些很好的事情。
因此,通过这种方式,您可以开始了解如何使用RL代理来替换部分控制系统。相反,一个学习单一行为的函数,我们可以提取高级参考信号,并让代理消除错误,这样我们就可以保留发送命令的能力。
我们还可以从代理中删除低级功能。例如,代替动作为每个关节的低扭矩,代理可以只学习将脚放在地面的哪个位置。动作是将左脚放在身体坐标系中的某个位置。这个动作可以作为驱动关节电机的低级传统控制系统的参考指令。你知道,它可能会前馈一个扭矩命令基于你对系统动力学的了解然后反馈一些信号来保证性能和稳定性。
这是有益的,因为我们可以使用特定领域的知识来解决简单的问题,这将给我们洞察和控制设计,然后我们可以为困难的问题保留强化学习。
值得注意的是,到目前为止,我们最终的行走解决方案实际上只对自己的状态具有健壮性。你知道,它可以到处走而不摔倒,这很好,但只有在一个完全平坦的,没有特征的平原上。它没有考虑到机器人外部的任何部分,所以它实际上是一个相当脆弱的设计。例如,让我们看看如果我们在机器人面前放置一个障碍物会发生什么。
果然不出所料。这里的问题是,除了机器人自身的运动,我们没有给我们的代理任何识别环境状态的方法。没有任何东西可以感知到这些障碍,因此也就没有任何方法可以避免它们。
但问题是。基于神经网络的代理的美妙之处在于,它们可以处理我们所说的“富传感器”。比如激光雷达和可见相机,它们不会产生像角度这样的单一测量值,而是返回代表数千个距离或不同光强度的像素的数字阵列。因此,我们可以在机器人上安装一个可见摄像头和一个激光雷达传感器,并将大约1000个新值作为额外的观测数据输入我们的代理。您可以想象,当我们的观测数据从36增加到数千时,这个函数的复杂性需要增加多少。
我们可能会发现一个简单,完全连接的网络并不理想,因此我们可以添加包含专用逻辑的附加层,该专用逻辑可最大限度地减少卷积网络等连接,或者添加像经常性网络等内存。这些是更适合处理大图像数据和更多动态环境的网络层。但是,我们可能不需要改变奖励功能,以便获得机器人避免这些障碍。代理人仍然可以了解从路径中偏离,因此在这里获得较低的奖励,允许机器人继续行走而不会跌倒,从而赢得更多的奖励。
在这个视频中,我已经讨论了强化学习的一些问题,并展示了我们如何通过结合传统控制设计和强化学习的好处来修改这个问题。在下个视频中,我们将对此进行更多的扩展,我们将讨论强化学习的其他缺点以及我们可以做些什么来减轻它们。
所以,如果你不想错过这个和未来的Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。