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