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