在这篇文章中,我们将看到如何在几分钟内训练自动赛车以及如何平稳控制。该方法基于强化学习(RL)并在仿真(Donkey Car模拟器)中呈现,旨在适用于现实世界。它建立在一家名为Wayve.ai的创业公司的工作基础之上,该公司专注于自动驾驶。
视频
自从几年前创建DIY Robocars以来,现在存在许多自动赛车比赛(例如Toulouse Robot Race,Iron Car ......)。在那些目标很简单:你有一辆赛车,它必须尽可能快地停留在轨道上,只给出车载摄像头的图像作为输入。
自驾车挑战是进入机器人技术的好方法。为了便于学习,开发了开源自动驾驶平台Donkey Car。在它的生态系统中,现在有一个以小型机器人为特色的统一模拟器。我们将测试这款Donkey Car的方法。
大纲在简要回顾了小型自动驾驶汽车比赛中使用的不同方法之后,我们将介绍强化学习的内容,然后详细介绍我们的方法。
用于自驾车比赛的方法:线路跟踪和行为克隆预测轨道中心的位置
作为一种方法,许多竞争者使用监督学习来重现人类驾驶员的行为。为此,人们需要在几圈内手动驾驶汽车,记录摄像机图像和来自操纵杆的相关控制输入。然后,训练模型以再现人类驾驶。然而,这种技术并不是非常强大,需要对每个轨道进行均匀的驱动和再训练,因为它的推广非常糟糕。
什么是强化学习(RL)以及我们为什么要使用它?鉴于上述问题,强化学习(RL)似乎是一个有趣的选择。
在强化学习设置中,代理(或机器人)作用于其环境并接收奖励作为反馈。它可以是一个积极的奖励(机器人做了一些好事)或负面奖励(机器人应该受到惩罚)。
机器人的目标是最大化累积奖励。为此,它通过与世界的互动来学习所谓的政策(或行为/控制者),将其感官输入映射到行动。
在例子中,输入是摄像机图像,动作是油门和转向角。因此,如果我们以汽车停留在轨道上并最大化其速度的方式对奖励进行建模,那么我们就完成了!
稳定基线:易于使用的强化学习库
这是强化学习的美妙之处,你需要很少的假设(这里只设计奖励功能),它会直接优化你想要的东西(在赛道上快速赢得比赛!)。
注意:这不是第一篇关于小型自动驾驶汽车强化学习的博客文章,但与之前的方法相比,所提出的技术只需几分钟 (而非数小时)即可学习良好而顺畅的控制政策(~5到10)平滑控制器的分钟,非常平滑的控制器约20分钟)。
现在我们已经简要介绍了什么是RL,我们将详细介绍,从解剖Wayve.ai方法开始,这是我们方法的基础。
学习驾驶一天 - Wayve.ai方法的关键要素Wayve.ai描述了一种在简单的道路上训练现实世界中的自动驾驶汽车的方法。该方法由几个关键元素组成。
首先,他们训练特征提取器(这里是变分自动编码器或VAE)将图像压缩到较低维度的空间。该模型经过训练以重建输入图像,但包含一个瓶颈,迫使其压缩信息。
从原始数据中提取相关信息的这一步骤称为状态表示学习(SRL),是我的主要研究课题。这显然可以减少搜索空间,从而加快培训速度。下面的图表显示了SRL和端到端强化学习之间的联系,也就是说,从像素直接学习控制策略。
注意:训练自动编码器不是提取有用功能的唯一解决方案,您也可以训练例如逆动力学模型。
政策学习中的特征提取解耦
第二个关键要素是使用名为Deep Deterministic Policy Gradient(DDPG)的RL算法,该算法使用VAE特征作为输入来学习控制策略。每个剧集后都会更新此政策。该算法的一个重要方面是,它有一个记忆,被称为重播缓冲区,在那里它与它的环境之间的相互作用被记录下来,可以“回放”之后。因此,即使汽车不与世界互动,它也可以从这个缓冲区中获取经验来更新其政策。
对汽车进行培训,以便在人为干预之前最大化行驶的米数。这是最后的关键因素:一旦汽车开始离开,人类操作员就会结束这一事件。这种提前终止非常重要(如Deep Mimic所示)并且可以防止汽车探索无法解决任务的区域。
学会在几分钟内开车 - 更新的方法尽管Wayve.ai技术原则上可以起作用,但是它有一些问题需要解决,以便将其应用于自动驾驶的RC车。
首先,因为在每集之后训练特征提取器(VAE),所以特征的分布不是静止的。也就是说,这些特征随着时间的推移而发生变化,并可能导致政策培训的不稳定性。此外,在笔记本电脑上(没有GPU)训练VAE的速度非常慢,因此我们希望避免在每集后重新训练VAE。
为了解决这两个问题,我决定事先训练VAE并使用Google Colab笔记本来保存我的电脑。这样,策略就会使用固定的特征提取器进行训练。
在下图中,我们将探讨VAE学到了什么。我们在其潜在空间中导航(使用滑块)并观察重建的图像。
探索 VAE学到的潜在空间
然后,已知DDPG是不稳定的(从某种意义上说,它的性能在训练期间可能会发生灾难性的下降)并且很难调整。幸运的是,最近的一个名为Soft Actor-Critic(SAC)的算法具有相同的性能,并且更容易调整 。
使用了稳定基线编写的Soft Actor-Critic(SAC)实现 (如果你正在使用RL,我绝对建议你去看看;)),它有最新的算法改进它。
最后,更新了奖励功能和动作空间,以平滑控制并最大化速度。
奖励功能:快速前进但保持在轨道上!机器人车没有任何里程计(也没有速度传感器),因此行驶的米数(也不是速度)不能用作奖励。
因此,在每个时间步骤给予“生命奖励”(即,留在赛道上的 1奖励)并使用“崩溃罚款”(-10奖励)惩罚机器人以离开赛道。此外,我发现在太快的情况下惩罚车辆也是有益的:与油门成比例的额外负面奖励会增加到撞车罚款中。
最后,因为 我们想要快速行驶,因为它是一辆赛车,我添加了一个与当前油门成比例的“油门奖励”。 这样,机器人将尝试保持在轨道上并同时最大化其速度。
把它们加起来:
其中w1和w2只是常数,可以平衡目标(w1 << 10和w2 << 1,因为它们是次要目标)
避免摇摇欲坠的控制:学会顺利驾驶世界并不是真正随机的。如果您注意到 - 机器人不会自发地开始颤抖。除非你把RL算法连接到它。 - Emo Todorov
左:摇晃控制 - 右:使用所提出的技术进行平滑控制
如果你到目前为止应用所提出的方法,它将起作用:汽车将留在赛道上并试图快速前进。然而,你可能会得到一个不稳定的控制:汽车将如上图所示振荡,因为它没有动力不这样做,它只是试图最大化它的奖励。
平滑控制的解决方案是约束转向角的变化,同时利用先前命令(转向和节气门)的历史来增加输入。这样,你就可以在转向中保持连续性。
例如,如果当前汽车转向角为0°并且突然尝试以90°转向,则连续性约束将仅允许其例如以40°转向。因此,两个连续转向命令之间的差异保持在给定范围内。这种额外的限制需要多花一点培训。
回顾方法在方法中,我们将策略学习与特征提取分离,并添加额外约束以平滑控制。
首先,人类通过手动驾驶汽车来收集数据(手动驾驶约5分钟内的10k图像)。这些图像用于训练VAE。
然后,我们在探索事件(使用随机政策)和政策培训(当人类将车辆放回轨道以优化所花费的时间时完成)之间交替。
为了训练策略,首先使用VAE(这里具有64维的潜在空间)对图像进行编码,并且与最近采取的10个动作(节流和转向)的历史连接,从而创建84D特征向量。
控制策略由神经网络(2个完全连接的32和16个单元层,具有ReLU或ELU激活功能)表示。
该控制器输出转向角和油门。我们将油门限制在给定范围内,并且还限制当前和先前转向角之间的差异。(Originally published at towardsdatascience.com-Antonin RAFFIN)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved