本文章将介绍 DI-engine 中用于高效构建和标准化不同类型决策环境的系列工具,从而方便我们将各式各样的原始决策问题转化为适合使用强化学习方法解决的形式。
前言
对于“决策环境复杂性”的问题,这里描述的是在强化学习(RL)领域中,如何处理和简化复杂决策环境的挑战。决策环境可以非常广泛,包括虚拟世界的视频游戏、现实世界的棋类游戏、自动驾驶等场景。所有这些环境都有一个共同点:需要智能体(agent)在其中做出一系列决策。为了使这些环境适用于强化学习,必须将它们转化为标准的马尔可夫决策过程(MDP),这需要对环境的各个方面(如观测、动作和奖励)进行预处理和变换。
为什么要进行预处理&环境的复杂性:
- 复杂性:实际问题的复杂性导致了预处理步骤的必要性。在没有预处理的情况下,原始的决策问题可能无法直接应用现有的RL算法。
- 多样性:不同类型的决策问题需要不同的预处理方法。这增加了学习和转移这些技术的成本,因为每个新问题可能需要一套全新的预处理策略。
- 缺乏标准化:许多预处理技术(如one-hot编码、位置编码等)分散在不同的代码库中,没有统一的管理和标准化。
- 复杂的状态空间:环境状态可以非常复杂,包含大量的信息,可能是高维的、连续的,或者包含许多不同类型的数据。
- 多样化的动作空间:动作可能是离散的,如棋类游戏中的不同走法;也可能是连续的,如自动驾驶中的方向盘角度和油门控制。
- 动态变化的环境:环境可能会随时间变化,如多人游戏中其他玩家的策略变化或现实世界的交通条件变化。
- 不同的奖励机制:环境中的奖励可能是立即的,也可能是延迟的,而且其大小和频率可能会根据任务的不同而有很大差异。
预处理技术的示例:
One-hot 编码
目的:One-hot 编码是用来处理离散类别信息的一种方法,它将每个类别转换为一个稀疏的二进制向量。这种表示方法为每个类别分配一个独立的维度,使得模型能够更清晰地区分不同的类别,而不是将它们视为数值上的连续性。
示例:例如,假设我们有一个类别特征,它有三个可能的值:猫、狗、鸟。在one-hot编码中,猫可以被编码为[1, 0, 0],狗为[0, 1, 0],鸟为[0, 0, 1]。这样,每个类别都有一个对应的向量,其中一个元素为1表示类别,其余为0。
Position encoding
目的:位置编码用于给序列数据添加位置信息,这对于序列模型如RNN和Transformer非常重要,因为它们需要使用元素的顺序信息来做出预测。
示例:在实施位置编码时,可以使用一系列三角函数(如正弦和余弦)来为序列中的每个位置生成一个唯一的编码,或者通过模型学习得到位置的表示。
Discretization
目的:离散化是将连续的状态或动作空间转换为离散空间的过程。这在强化学习中很常见,因为许多算法更擅长处理离散动作。
示例:将连续空间划分为几个离散的区间(或“桶”),每个区间有一个代表值。例如,车速的连续范围可以划分为“低速”、“中速”和“高速”。
Normalization
目的:数据归一化是将数据缩放到一个共同的范围内的过程,例如[0, 1]或[-1, 1]。这有助于加快模型的收敛速度并提高性能。
示例:常见的归一化方法包括最小-最大归一化和Z得分归一化。前者将数据缩放到0和1之间,后者则将数据转换为均值为0,标准差为1的分布。
Abs->rel (Absolute to Relative)
目的:转换绝对位置信息为相对位置信息可以帮助模型更容易地学习移动和位置变化。
示例:例如,如果我们正在处理一个跟踪对象移动的问题,我们可以将对象的位置相对于前一帧来表示,而不是相对于整个场景的固定坐标系。
Padding & Mask & Resize
目的:对于变长的序列数据,需要统一长度以便模型可以处理。
示例:通过添加特殊的padding符号来增加序列长度,或者通过mask来指示哪些部分是有效的,哪些部分是填充的。在需要的情况下,也可以通过截断长序列来减少长度。
DI-engine 的解决方法
DI-engine 结合了 DI-zoo 中的实践经验,抽象出了两类重要的功能组件:环境包装器(Env Wrapper)和环境管理器(Env Manager)。这些组件的目的是为了更方便和高效地完成强化学习决策环境的预处理和标准化工作,这在接下来的内容中将会进行详细介绍。
环境包装器(Env Wrapper)
在训练决策智能体时,经常需要对环境的马尔可夫决策过程(MDP)定义进行预处理和转换,以期获得更好的训练效果。这些处理技巧在不同环境中有着一定的普适性。例如,观测状态的归一化是一个常见的预处理技巧,它通过统一量纲和缩小尺度使训练更快且更加稳定。
DI-engine 根据多种类型决策环境的实践经验,将一些通用的预处理流程集成到环境包装器中。具体来说,环境包装器就是在常见的 gym 格式环境之外附加相应的预处理模块,以便在保持原始环境特性的同时,方便地加入对于观测(obs)、动作(action)和奖励(reward)的预处理函数。
例如,创建一个 Atari Pong 环境并添加了一些预处理功能的代码片段可能如下所示:
点击DI-engine强化学习入门(八)如何高效构建决策环境 - 古月居可查看全文