

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon A SageMaker I 中使用强化学习
<a name="reinforcement-learning"></a>

强化学习 (RL) 结合了计算机科学、神经科学和心理学等领域，以确定如何将情况与行动相映射，从而最大化数字奖励信号。RL 中的奖励信号概念源于神经科学研究，研究了人类大脑如何决定哪些行动可最大限度提高奖励以及最大限度减少惩罚。在大多数情况下，人类不会获得明确指示要采取哪些行动，而是必须了解哪些行动可以产生最直接的回报，以及这些行动如何影响未来的局势和后果。

RL 问题是使用源自动力学系统理论的马尔可夫决策过程 (MDPs) 来形式化的。 MDPs 旨在捕捉学习代理在尝试实现某个最终目标时在一段时间内遇到的实际问题的高级细节。学习代理应当能够确定其环境的当前状态，并确定影响学习代理当前状态的可能操作。此外，学习代理的目标应该与环境状况密切相关。以这种方式制定问题解决方案被称为强化学习方法。

## 强化学习、有监督学习与无监督学习范式之间有什么区别？
<a name="rl-differences"></a>

机器学习可以分为三种不同的学习范式：有监督、无监督和强化。

在有监督学习中，外部监督方提供一个已标记样本的训练集。每个样本都包含有关某种情况的信息，属于某个类别，并具有标识其所述类别的标签。有监督学习的目标是泛化，以便正确预测训练数据中不存在的情况。

与之相反，RL 处理的是交互式问题，因此不可能收集到代理可能遇到的、具有正确标签的所有可能情况样本。如果代理能够准确地从自己的经验中学习并进行相应调整，这种学习方式最有前景。

在无监督学习中，代理通过发现未标注数据中的结构来学习。尽管 RL 代理可能会根据其经验，从发现结构中受益，但 RL 的唯一目的是最大化奖励信号。

**Topics**
+ [

## 强化学习、有监督学习与无监督学习范式之间有什么区别？
](#rl-differences)
+ [

## 为什么强化学习很重要？
](#rl-why)
+ [

## 马尔可夫决策过程 (MDP)
](#rl-terms)
+ [

## Amazon A SageMaker I RL 的主要特点
](#sagemaker-rl)
+ [

## 强化学习示例笔记本
](#sagemaker-rl-notebooks)
+ [

# 使用 Amazon A SageMaker I RL 的 RL 工作流程示例
](sagemaker-rl-workflow.md)
+ [

# 亚马逊 A SageMaker I 中的 RL 环境
](sagemaker-rl-environments.md)
+ [

# 使用 Amazon A SageMaker I RL 进行分布式训练
](sagemaker-rl-distributed.md)
+ [

# 使用 Amazon A SageMaker I RL 进行超参数调整
](sagemaker-rl-tuning.md)

## 为什么强化学习很重要？
<a name="rl-why"></a>

RL 非常适合解决大型复杂问题，例如，供应链管理、HVAC 系统、工业机器人、游戏人工智能、对话系统和自动驾驶汽车。由于 RL 模型的学习方法是连续处理代理采取的每个操作所获得奖励和惩罚，因此我们可以训练系统在不确定条件下和动态环境中做出决策。

## 马尔可夫决策过程 (MDP)
<a name="rl-terms"></a>

RL 基于称为马尔可夫决策过程 () MDPs 的模型。一个 MDP 包含一系列时间步长。每个时间步长由以下内容组成：

环境  
定义 RL 模型在其中运行的空间。这可以是真实的环境或模拟器。例如，如果您在实际道路上训练真实的自动驾驶车辆，则这就是一个真实的环境。如果您训练一个模拟自动驾驶车辆在道路上行驶的计算机程序，则这就是一个模拟器。

州  
指定所有环境相关信息以及与未来相关的过往步骤的信息。例如，在一个机器人能够以任意时间步长向任意方向移动的 RL 模型中，机器人在当前时间步长所在的位置是状态，因为如果我们知道了机器人的位置，就不必去了解机器人经过了多少步才到达那里。

Action  
代理的行为。例如，机器人前进一步。

奖励  
表示代理采取的上一步操作所导致的状态值的数值。例如，如果目标是让机器人找到宝藏，那么可以将找到宝藏的奖励设为 5，而没有找到宝藏的奖励设为 0。RL 模型试图寻找旨在优化长期累积奖励的策略。这种计划被称为*策略*。

观察  
代理在每一步可获得的环境状态相关信息。这可能是整个状态，也可能只是状态的一部分。例如，国际象棋模型中的代理能够在任何步骤观察整个棋盘的状态，但迷宫中的机器人可能只能观察迷宫中它当前占据的一小部分。

通常情况下，RL 中的训练包含许多*回合*。一个情节包含 MDP 中从初始状态直至环境达到最终状态的所有时间步长。

## Amazon A SageMaker I RL 的主要特点
<a name="sagemaker-rl"></a>

要在 SageMaker AI RL 中训练 RL 模型，请使用以下组件：
+ 深度学习 (DL) 框架。目前， SageMaker 人工智能支持 RL in TensorFlow 和 Ap MXNet ache。
+ RL 工具包。RL 工具包用于管理代理与环境之间的交互，并提供众多一流的 RL 算法以供选择。 SageMaker AI 支持英特尔 Coach 和 Ray RLlib 工具包。有关 Intel Coach 的信息，请参阅 [https://nervanasystems.github.io/coach/](https://nervanasystems.github.io/coach/)。有关 Ray 的信息 RLlib，请参见[https://ray.readthedocs.io/en/latest/rllib.html](https://ray.readthedocs.io/en/latest/rllib.html)。
+ RL 环境。您可以使用自定义环境、开源环境或商用环境。有关信息，请参阅 [亚马逊 A SageMaker I 中的 RL 环境](sagemaker-rl-environments.md)。

下图显示了 SageMaker AI RL 中支持的 RL 组件。

![\[SageMaker AI RL 中支持的 RL 组件。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/sagemaker-rl-support.png)


## 强化学习示例笔记本
<a name="sagemaker-rl-notebooks"></a>

有关完整的代码示例，请参阅 SageMaker AI Examples 存储库中的[强化学习示例笔记本](https://github.com/aws/amazon-sagemaker-examples/tree/main/reinforcement_learning)。

# 使用 Amazon A SageMaker I RL 的 RL 工作流程示例
<a name="sagemaker-rl-workflow"></a>

以下示例描述了使用 Amazon A SageMaker I RL 开发 RL 模型的步骤。

1. **表述 RL 问题** – 首先，将业务问题表述为 RL 问题。例如，自动扩缩使得服务可以根据您定义的条件动态增加或缩小容量。目前，此功能要求设置警报、扩展策略、阈值以及其他手动操作。为使用 RL 解决这个问题，我们定义了马尔可夫决策过程的各个组件：

   1. **目标** – 扩展实例容量，以便与所需的负载配置文件相匹配。

   1. **环境** – 包含负载配置文件的自定义环境。它会生成一个具有每天变化和每周变化以及临时峰值的模拟负载。这个模拟系统在请求新资源的时间与资源变为可用于处理请求的时间之间存在延迟。

   1. **状态** – 当前负载、失败的作业数以及活跃的机器数。

   1. **操作** – 删除、添加或保留相同数量的实例。

   1. **奖励** – 因事务成功而获得的积极奖励，因事务超过特定阈值而失败遭到的高额惩罚。

1. **定义 RL 环境** – RL 环境可以是与 RL 代理交互的真实世界，也可以是对真实世界的模拟。您可以连接使用 Gym 接口开发的开源和自定义环境，以及 MATLAB 和 Simulink 等商业模拟环境。

1. **定义预设** – 预设用于配置 RL 训练作业，并定义 RL 算法的超参数。

1. **编写训练代码-将训练代码**写成 Python 脚本并将该脚本传递给 A SageMaker I 训练作业。在训练代码中，导入环境文件和预设文件，然后定义 `main()` 函数。

1. **训练 RL 模型** — 使用 Amaz [on Pyth SageMaker on 软件开发工具包`RLEstimator`](https://sagemaker.readthedocs.io/en/stable)中的 A SageMaker I 开始 RL 训练作业。如果您使用本地模式，训练作业在笔记本实例上运行。使用 SageMaker AI 进行训练时，您可以选择 GPU 或 CPU 实例。如果您在本地模式下训练，则将训练作业的输出存储在本地目录中；如果您使用 A SageMaker I 训练，则存储在 Amazon S3 上。

   `RLEstimator` 要求将以下信息作为参数。

   1. 在其中上传环境、预设和训练代码的源目录。

   1. 训练脚本的路径。

   1. 您要使用的 RL 工具包和深度学习框架。这会自动解析为 RL 容器的 Amazon ECR 路径。

   1. 训练参数，例如实例计数、作业名称以及输出的 S3 路径。

   1. 要在日志中捕获的指标定义。这些也可以在 SageMaker 人工智能笔记本电脑中 CloudWatch 和笔记本电脑中进行可视化。

1. **可视化训练指标和输出**-使用 RL 模型的训练作业完成后，您可以在中查看您在训练作业中 CloudWatch定义的指标。您还可以使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)分析库在笔记本中绘制指标。可视化指标可帮助您了解以奖励衡量的模型性能如何随着时间推移而改进。
**注意**  
如果您以本地模式训练，您无法在 CloudWatch 中将指标可视化。

1. **评估模型** – 先前训练模型中的检查点数据可以传递到检查点通道中进行评估和推理。在本地模式下，使用本地目录。在 SageMaker AI 训练模式下，您需要先将数据上传到 S3。

1. **部署 RL 模型**-最后，使用在 SageMaker AI 容器上托管的端点或边缘设备上部署经过训练的模型。 AWS IoT Greengrass

有关带有 SageMaker AI 的 RL 的更多信息，请参阅在 [Pyth SageMaker on SDK 中使用 RL](https://sagemaker.readthedocs.io/en/stable/using_rl.html)。

# 亚马逊 A SageMaker I 中的 RL 环境
<a name="sagemaker-rl-environments"></a>

Amazon SageMaker AI RL 使用环境来模仿现实世界的场景。根据环境的当前状态和一个或多个代理采取的操作，模拟器处理操作的影响，并返回接下来的状态和奖励。对于在真实世界中训练代理不能确保安全的情况（例如，飞行无人机），或者强化学习算法需要很长时间才能收敛（例如下象棋）时，模拟器很有用。

下图显示与赛车游戏的模拟器交互的示例。

![\[与赛车游戏的模拟器交互的示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/sagemaker-rl-flow.png)


模拟环境包含一个代理和一个模拟器。在这里，一个卷积神经网络 (CNN) 使用模拟器提供的镜像，并生成操作来控制游戏控制器。借助多个模拟，此环境生成 `state_t`、`action`、`state_t+1` 和 `reward_t+1` 格式的训练数据。定义奖励并不是一件小事，会影响到 RL 模型的质量。我们想要提供一些奖励功能的示例，但希望让其可供用户配置。

**Topics**
+ [

## 在 AI RL 中 SageMaker 为环境使用 OpenAI Gym 接口
](#sagemaker-rl-environments-gym)
+ [

## 使用开源环境
](#sagemaker-rl-environments-open)
+ [

## 使用商业环境
](#sagemaker-rl-environments-commercial)

## 在 AI RL 中 SageMaker 为环境使用 OpenAI Gym 接口
<a name="sagemaker-rl-environments-gym"></a>

要在 AI RL 中使用 OpenA SageMaker I Gym 环境，请使用以下 API 元素。有关 OpenAI Gym 的更多信息，请参阅 [Gym 文档](https://www.gymlibrary.dev/)。
+ `env.action_space` – 定义代理可采取的操作，指定每项操作是连续还是离散的，并指定操作为连续操作时的最小值和最大值。
+ `env.observation_space` – 定义代理从环境中收到的观测值，以及连续观测的最小值和最大值。
+ `env.reset()` – 初始化训练回合。`reset()` 函数返回环境的初始状态，而代理使用初始状态以采取其第一个操作。然后，操作反复发送到 `step()`，直到回合达到最终状态。当 `step()` 返回 `done = True` 时，此情节结束。RL 工具包通过调用 `reset()` 重新初始化环境。
+ `step()` – 将代理操作作为输入，并输出环境的下一个状态、奖励、回合是否已终止，以及用于传递调试信息的 `info` 字典。环境负责验证输入。
+ `env.render()` – 用于具有可视化功能的环境。RL 工具包在每次调用 `step()` 函数后，调用此函数捕获环境的可视化内容。

## 使用开源环境
<a name="sagemaker-rl-environments-open"></a>

您可以通过构建自己的容器在 SageMaker AI RL 中使用开源环境（例如 EnergyPlus 和 RoboSchool）。有关的更多信息 EnergyPlus，请参阅 [https://energyplus.net/](https://energyplus.net/)。有关的更多信息 RoboSchool，请参阅 [https://github.com/openai/roboschool](https://github.com/openai/roboschool)。HVAC 和 A [SageMaker I RoboSchool 示例存储库中的示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)展示了如何构建用于 SageMaker AI RL 的自定义容器：

## 使用商业环境
<a name="sagemaker-rl-environments-commercial"></a>

您可以通过构建自己的容器在 A SageMaker I RL 中使用商业环境，例如 MATLAB 和 Simulink。您需要管理自己的许可证。

# 使用 Amazon A SageMaker I RL 进行分布式训练
<a name="sagemaker-rl-distributed"></a>

Amazon SageMaker AI RL 支持多核和多实例分布式训练。根据您的用例，可以分发训练 and/or 环境的部署。例如， SageMaker AI RL 适用于以下分布式场景：
+ 单一训练实例和具有相同实例类型的多个推出实例。有关示例，请参阅 [SageMaker AI 示例存储库中的神经网络压缩示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)。
+ 单一训练者实例和多个推出实例，其中用于训练和推出的实例类型是不同的。有关示例，请参阅 [SageMaker AI AWS RoboMaker 示例存储库中的 AWS DeepRacer /示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)。
+ 使用多个内核进行推出的单一训练者实例。有关示例，请参阅 [SageMaker AI 示例存储库中的 Roboschool 示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)。如果模拟环境是轻量型的且可以在单一线程上运行，这就很有用。
+ 多个实例用于训练和推出。有关示例，请参阅 [SageMaker AI 示例存储库中的 Roboschool 示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)。

# 使用 Amazon A SageMaker I RL 进行超参数调整
<a name="sagemaker-rl-tuning"></a>

您可以运行超参数调整任务来优化 Amazon A SageMaker I RL 的超参数。[SageMaker AI 示例存储库中示例笔记本中的 Roboschool 示例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)展示了如何使用 RL Coach 实现这一目标。启动器脚本说明如何从 Coach 预设文件中抽象出参数并优化它们。