使用 Unity 游戏引擎的强化学习代理简介

针对机器学习最棘手领域之一的分步交互式指南。使用 Unity 游戏引擎强化学习代理简介一文首先出现在 Towards Data Science 上。

来源:走向数据科学

, 强化学习 — 从观察和奖励中学习 — 是最类似于人类(和动物)学习方式的方法。

尽管存在这种相似性,但它仍然是现代机器学习中最复杂和最令人烦恼的领域。引用著名的 Andej Karpathy 的话:

强化学习很糟糕。碰巧我们之前所经历的一切都更糟。

为了帮助理解该方法,我将构建一个代理学习在使用 Q-Learning 的环境中导航的分步示例。文本将从首要原则开始,以一个可以在 Unity 游戏引擎中运行的功能齐全的示例结束。

对于本文,需要具备 C# 编程语言的基础知识。如果您不熟悉Unity游戏引擎,只需认为每个对象都是一个代理,即:

  • 在程序开始时执行一次 Start(),
  • 和 Update() 与其他代理连续并行。
  • 本文的随附存储库位于 GitHub 上。除非另有说明,所有图片均由作者提供。

    什么是强化学习

    在强化学习(RL)中,我们有一个代理能够采取行动,观察这些行动的结果,并从这些行动的奖励/惩罚中学习。

    代理在特定状态下决定操作的方式取决于其策略。策略 π 是定义代理行为的函数,将状态映射到操作。给定一组状态 S 和一组动作 A,策略是直接映射:π: S → A。

    此外,如果我们希望智能体有更多可能的选择,有了选择,我们可以创建一个随机策略。然后,策略决定在给定状态下采取每个动作的概率,而不是单个动作:π: S × A → [0, 1]。

    导航机器人示例

    奖励将使用枚举与图块类型一起编码:

    public enum TileEnum { 水 = -1, 草 = 0, 奖励 = 1 }

    我们将地图存储在具有以下实用功能的图块 TileGrid 中: