原文:
huggingface.co/learn/deep-rl-course/unit5/how-mlagents-works
在训练我们的代理之前,我们需要了解ML-Agents 是什么以及它是如何工作的。
Unity ML-Agents是 Unity 游戏引擎的工具包,允许我们使用 Unity 创建环境或使用预先制作的环境来训练我们的代理。
它由Unity Technologies开发,是 Unity 的开发者之一,Unity 是最著名的游戏引擎之一,被 Firewatch、Cuphead 和 Cities: Skylines 的创作者使用。
Firewatch 是用 Unity 制作的
使用 Unity ML-Agents,您有六个基本组件:
-
第一个是学习环境,其中包含Unity 场景(环境)和环境元素(游戏角色)。
-
第二个是Python 低级 API,其中包含用于与环境交互和操作的低级 Python 接口。这是我们用来启动训练的 API。
-
然后,我们有外部通信器,它连接学习环境(用 C#制作)与低级 Python API(Python)。
-
Python 训练器:使用 PyTorch 制作的强化学习算法(PPO、SAC 等)。
-
Gym 包装器:将 RL 环境封装在 gym 包装器中。
-
PettingZoo 包装器:PettingZoo 是 gym 包装器的多代理版本。
在学习组件内部,我们有两个重要元素:
-
第一个是代理组件,场景的执行者。我们将通过优化其策略来训练代理(这将告诉我们在每个状态下应该采取什么行动)。策略被称为Brain。
-
最后,有学院。这个组件协调代理和它们的决策过程。将这个学院想象成一个处理 Python API 请求的老师。
为了更好地理解其作用,让我们回顾一下 RL 过程。这可以被建模为一个循环,工作方式如下:
RL 过程:一个状态、动作、奖励和下一个状态的循环
来源:强化学习:一种介绍,Richard Sutton 和 Andrew G. Barto
现在,让我们想象一个代理学习玩平台游戏。RL 过程看起来像这样:
-
我们的代理从环境接收状态S0S_0S0 — 我们接收游戏的第一帧(环境)。
-
基于那个状态S0S_0S0,代理会采取动作A0A_0A0 — 我们的代理会向右移动。
-
环境进入一个新的状态S1S_1S1** — 新的帧。
-
环境给代理一些奖励R1R_1R1 — 我们还没有死亡(正奖励+1)。
这个 RL 循环输出一个序列状态、动作、奖励和下一个状态。代理的目标是最大化预期的累积奖励。
学院将会向我们的智能体发送指令,并确保智能体同步:
-
收集观察数据
-
使用你的策略选择动作
-
执行动作
-
如果你达到了最大步数或者已经完成了,就重置。
现在我们了解了 ML-Agents 的工作原理,我们准备好训练我们的智能体了。