分类 AWS Deepracer Developer Guide 下的文章

AWS DeepRacer 服务架构

术语
AWS DeepRacer
RoboMaker
Amazon S3
SageMaker

AWS DeepRacer 服务建立在 AWS RoboMaker 和其他AWS服务(例如 Amazon S3)的基础上SageMaker。

SageMaker 是一个AWS机器学习平台,用于训练一般的机器学习模型。AWS 特别 DeepRacer 使用它来训练强化学习模型。AWS RoboMaker 是一项云服务,用于开发、测试和部署一般机器人解决方案。AWS DeepRacer 使用它来创建虚拟代理及其交互环境。Amazon S3 是一种经济的通用云存储解决方案。AWS DeepRacer 使用它来存储经过训练的模型工件。此外,AWS DeepRacer 使用内存数据库 Redis 作为体验缓冲区,从中选择训练数据来训练策略神经网络。

在 AWS DeepRacer 架构中,AWS RoboMaker 创建了一个模拟环境,供代理沿着指定轨道行驶。代理根据已在 SageMaker 中训练特定时间的策略网络模型进行驾驶。每次运行从起点线开始,以达到终点线或者偏离赛道为结束状态,一次运行也称为一个情节。对于每个情节,过程划分具有固定步骤数的区段。在每个分段中,体验被定义为与单个步骤相关的元组(状态、操作、奖励、新状态)的有序列表,作为体验缓冲区缓存在Redis中。 SageMaker 然后分批从体验缓冲区训练数据中随机抽取,并将输入数据馈送到神经网络以更新权重。然后,它将更新的模型存储在 Amazon S3 中 SageMaker 以供使用,以生成更多体验。该循环继续直至训练停止。

在首次训练第一个模型的开始之前, SageMaker 使用随机操作初始化经验缓冲区。

下图阐明了此架构。
deepracer-how-it-works-architecture.png

此设置允许运行多个模拟,同时在单个赛道的多个区段上训练一个模型,或者同时针对多个赛道训练模型。

AWS DeepRacer 解决方案工作流程

训练 AWS DeepRacer 模型涉及以下一般任务:

AWS DeepRacer 服务使用虚拟轨道、代表车辆的代理和背景来初始化模拟。代理体现了可以通过超级参数调整的策略神经网络,如 PPO 算法中定义。

代理根据给定状态(通过来自前置摄像头的图像表示)操作(通过转向角度和速度指定)。

模拟环境根据代理操作更新代理的位置,返回奖励和更新后的摄像头图像。以状态、操作、奖励和新状态形式收集的经验用于定期更新神经网络。更新后的网络模型用于创建更多经验。

您可以使用与代理所见相同的第一人称视角,沿着模拟赛道监控进行中的训练。您可以显示每个情节的奖励、损耗函数值、策略的纪元等指标。随训练进行,还可以显示 CPU 或内存利用率。此外,系统记录详细的日志供分析和调试。

AWS DeepRacer 服务会定期将神经网络模型保存到永久存储中。

训练过程会根据时间限制而停止。

您可以在模拟器中评估训练模型。为此,请提交经过训练的模型,在选定的赛道上对选定数量的跑步进行计时试验。

成功训练和评估模型后,可以将其上传到物理代理(AWS DeepRacer 车辆)。该过程涉及到以下步骤:

从其永久存储(Amazon S3 存储桶)下载经过训练的模型。

使用车辆的设备控制控制台将经过训练的模型上传到设备。使用控制台校准车辆,将模拟操作空间映射到物理操作空间。您还可以使用控制台检查油门是否相等、查看前置摄像头信号源、加载模型到推理引擎以及观看车辆在真实赛道上的行驶。

车辆的设备控制台是托管在车辆计算模块上的 Web 服务器。控制台可通过互联 Wi-Fi 网络和计算机或移动设备上的 Web 浏览器,从车辆的 IP 地址访问。

在不同照明、电池水平和表面纹路及颜色下试验车辆驾驶。

由于模型限制或训练不足,设备在物理环境中的性能可能与模拟环境中的性能不匹配。该现象称为 sim2real 性能差距。要减少差距,请参阅Simulated-to-real 性能差距。

AWS DeepRacer 训练算法

近端策略优化 (PPO) 与软行为体批评者 (SAC)

算法 SAC 和 PPO 都同时学习策略和价值函数,但它们的策略在三个显著方面有所不同:

ProSAC
可在离散和连续的动作空间中工作在连续的动作空间中工作
不偏不倚不在政策范围内
使用熵正则化将熵添加到最大化目标中

稳定与数据密集型对比

在探索环境时通过PPO和SAC算法的策略获得的信息的使用方式不同。PPO使用政策学习,这意味着它从当前探索环境的政策的观察中学习其价值功能。SAC使用非政策学习,这意味着它可以利用先前政策对环境的探索得出的观察。非政策学习和非政策学习之间的权衡通常是稳定性与数据效率。非政策算法往往更稳定,但需要大量数据,而非政策算法往往恰恰相反。

勘探与开发

勘探与开发是 RL 的关键挑战。算法应该利用以前经验中的已知信息来获得更高的累积奖励,但它也需要探索以获得新的经验,这些经验可用于在future 寻找最佳策略。当策略经过多次迭代训练并更多地了解环境时,为给定的观测结果选择操作就变得更加确定了。但是,如果该政策的探索性不够,即使尚未达到最佳状态,它也可能会坚持使用已经学到的信息。PPO 算法鼓励通过使用熵正则化进行探索,从而防止代理向局部最优值收敛。SAC 算法通过在其最大化目标中添加熵,在探索和开发之间取得了非凡的平衡。


=

在这种情况下,“熵” 是衡量政策不确定性的指标,因此可以将其解释为衡量政策在为特定州选择行动方面的信心程度。低熵的政策对选择行动非常有信心,而熵高的政策则不确定该选择哪种行动。

SAC 算法的熵最大化策略与 PPO 算法使用熵作为正则化器的优势类似。与 PPO 一样,它鼓励更广泛的探索,并通过激励代理选择具有更高熵的动作来避免趋同于糟糕的局部最优值。与熵调节不同,熵最大化具有独特的优势。它倾向于放弃选择不良行为的政策,这是SAC算法往往比PPO更高的数据效率的另一个原因。

使用 SAC alpha 超参数调整 SAC 中的熵量。最大 SAC α熵值 (1.0) 有利于探索。最小值 (0.0) 恢复了标准 RL 目标并抵消了激励探索的熵加成。开始实验的良好 SAC alpha 值是 0.5。在对模型进行迭代时进行相应的调整。

尝试PPO和SAC算法,实验它们的超参数,然后在不同的动作空间中进行探索。

AWS DeepRacer 行动空间和奖励函数

代理 - Agent(人工智能体,虚拟或者物理实体)

动作空间

在强化学习中,代理与环境交互时可用的所有有效动作或选择的集合称为动作空间。在 AWS DeepRacer 控制台中,您可以在离散或连续的操作空间中训练代理。

离散的动作空间

离散的动作空间表示代理在有限集合中每种状态下可能发生的所有动作。对于 AWS DeepRacer 而言,这意味着对于每种逐渐不同的环境情况,代理的神经网络会根据其摄像头和(可选)LiDAR 传感器的输入为汽车选择速度和方向。选择仅限于一组预定义的转向角度和油门值组合。

临近转弯的离散动作空间中的 AWS DeepRacer 汽车可以选择加速或刹车,然后向左、向右或直行。这些动作被定义为转向角度和速度的组合,为代理创建一个选项菜单,即 0-9。例如,0 可以表示 -30 度和 0.4 m/s,1 可以表示 -30 度和 0.8 m/s,2 可以表示 -15 度和 0.4 m/s,3 可以表示 -15 度和 0.8 m/s,依此类推,直到 9。负度使汽车向右转,正角度使汽车向左转,0 度使车轮保持笔直。

AWS DeepRacer 默认离散操作空间包含以下操作:
AWS DeepRacer 默认离散操作空间

操作数量操控方向速度
0-30 度0.4 米/秒
1-30 度0.8 米/秒
2-15 度0.4 米/秒
3-15 度0.8 米/秒
40 度0.4 米/秒
50 度0.8 米/秒
615 度0.4 米/秒
715 度0.8 米/秒
830 度0.4 米/秒
930 度0.8 米/秒

持续的行动空间

连续操作空间允许代理从每种状态的一系列值中选择一项操作。就像离散的动作空间一样,这意味着对于每种逐渐不同的环境情况,代理的神经网络会根据其摄像头和(可选)LiDAR 传感器的输入为汽车选择速度和方向。但是,在连续操作空间中,您可以定义代理从中选择操作的选项范围。

在此示例中,连续动作空间中接近转弯的 AWS DeepRacer 汽车可以选择 0.75 m/s 到 4 m/s 的速度,然后通过选择 -20 到 20 度的转向角度向左、向右或向斜行驶。

离散与连续

使用连续动作空间的好处是,你可以编写奖励函数,训练模型,激励赛道上特定点的速度/转向动作,从而优化性能。从一系列动作中进行选择还可能使速度和转向值平稳变化,在训练有素的模型中,这些变化可能会在现实生活条件下产生更好的结果。

在离散动作空间设置中,将代理人的选择限制在有限数量的预定义动作上,这使你有责任了解这些动作的影响,并根据环境(赛道、赛车形式)和奖励函数对其进行定义。但是,在连续动作空间设置中,代理学会从你通过训练提供的最小/最大边界中选择最佳速度和转向值。

尽管提供一系列值供模型选择似乎是更好的选择,但代理人必须训练更长的时间才能学会选择最佳动作。成功还取决于奖励函数的定义。

奖励函数

当代理探索环境时,代理学习价值函数。价值函数可帮助您的代理在观察环境后判断所采取的操作有多好。value 函数使用您在 AWS DeepRacer 控制台中编写的奖励函数对操作进行评分。例如,在 AWS DeepRacer 控制台的 follow the centres line 样本奖励函数中,良好的动作会使代理保持在轨道中心附近,并且得分要高于不良动作,后者会使代理远离轨道中心。

随着时间的推移,价值函数可以帮助代理学习增加总奖励的政策。最佳或最佳策略将在代理花在探索环境上的时间与利用或充分利用策略从经验中学到的知识所花费的时间之间取得平衡。

在 follow the center line AWS DeepRacer 示例奖励函数示例中,代理首先采取随机操作来探索环境,这意味着它在保持赛道中心方面做得不太好。随着时间的推移,代理开始了解哪些动作使其保持在中心线附近,但是如果它通过继续采取随机动作来做到这一点,则需要很长时间才能学会在整圈内保持在赛道中心附近。因此,当政策开始学习好的行动时,代理开始使用这些行动,而不是采取随机行动。但是,如果它总是使用或利用良好的行为,则该代理将不会做出任何新发现,因为它不再在探索环境。这种权衡通常被称为 RL 中的勘探与开发问题。

尝试使用默认的动作空间和示例奖励函数。探索完所有内容后,通过设计自己的自定义操作空间和自定义奖励功能,将您的知识付诸实践。

AWS DeepRacer中的强化学习

在强化学习中,以实现预期目标为目标的Agent(例如物理或虚拟 AWS DeepRacer 车辆)与环境进行交互,以最大限度地提高代理的总回报。Agent在称为策略的策略的指导下,在给定的环境状态下采取行动并达到新状态。任何操作都有关联的即时奖励。该奖励用于衡量操作的合用性。这种即时奖励视为由环境返回。

AWS DeepRacer中强化学习的目标 是学习给定环境中的最佳策略。学习是一个试验和出错的迭代过程。Agent采取随机初始操作来抵达新的状态。然后,Agent迭代步骤,从新状态进入下一个状态。随着时间的推移,Agent将发现能够带来最大长期奖励的操作。Agent从初始状态到最终状态的交互称为情节。

以下草图说明了此学习过程:
deepracer-reinforcement-learning-overview.png

代理体现了一个神经网络,该神经网络代表逼近函数策略的函数。来自车辆前置摄像头的图像是环境状态,而代理操作由代理的速度和转向角度定义。

代理保持在赛道上完成竞赛时,将收到正奖励,偏离赛道则会收到负奖励。当代理从赛道上的某个位置启动时,情节开始,代理偏离赛道或者完成一圈时,情节结束。

注意
严格来讲,环境状态是指与问题相关的一切信息。例如,车辆在赛道上的位置以及赛道的形状。通过安装在车辆前部的摄像头提供的图像无法捕捉到整个环境状态。出于这个原因,环境被视为部分观测到了,而代理的输入被称为观测而不是状态。为简单起见,我们在本文中使用的状态和观察可以互换。

在模拟环境中训练代理有以下优势:

  • 模拟可以估算代理已经完成了多少进度以及确定代理何时偏离赛道,用于计算奖励。
  • 通过模拟,训练人员得以避免像在物理环境中那样,每次车辆偏离赛道就要进行重置的繁琐工作。
  • 模拟可以加快训练过程。

仿真可以更好地控制环境条件,例如选择不同的轨道、背景和车辆条件。

强化学习的替代方法是监管学习,也称为模仿学习。此处为已知的数据集([图像, 操作] 元组),该数据集是从给定环境收集的,用于训练代理。通过模仿学习训练得到的模型可以应用于自动驾驶。只有当来自摄像头的图像与在训练数据集中使用的图像很相似时,它们才能很好地工作。为了实现稳健的驾驶,训练数据集必须全面。强化学习与之相反,不需要这种全面的标记工作,并且可以完全在模拟中训练。由于强化学习从随机操作开始,代理可以学习各种环境和赛道条件。这使得经过训练的模型很强大。