因果辅助构图
当我们不知道如何使用现有数据构建决策流时,可以借助 REVIVE 提供的因果推理工具自动构建决策流 *.yaml 文件。该工具是基于 因果推断 实现的。借助因果推断方法,我们也可以简单地检查离线数据中哪些维度对学习环境或策略模型有用,以及这些维度的状态与行为之间的联系。该工具是纯数据驱动的。在该工具的帮助下,用户可以很容易地获得生成的决策流图,这可能有助于 REVIVE 更准确地学习虚拟环境并推断出更有效的策略。
该工具可以基于提供的 .yaml 和 .npz 文件自动生成决策流图。
重要提示
用户不必在 .yaml 文件中定义 graph 部分,REVIVE 会通过因果推断算法自动生成 graph。
需要注意的是因果算法也是基于数据分析进行构图的。在某些情况下,生成的决策流图可能会和业务知识存在冲突。因此,用户可以在使用 REVIVE 训练环境模型和策略之前,检查生成的决策流图的合理性。
下面,我们使用一个任务示例来展示如何 着陆器悬停任务。在该任务中,我们只需要构建 .yaml 中的 columns 部分,如下:
metadata:
columns:
- obs_0:
dim: obs
type: continuous
- obs_1:
dim: obs
type: continuous
- obs_2:
dim: obs
type: continuous
- obs_3:
dim: obs
type: continuous
- action:
dim: action
type: category
values: [0, 1, 2, 3]在 .yaml 文件中,我们不需要定义 graph 部分。之后,我们将此 .yaml 文件与相应的 .npz 文件一起提供给因果推断工具。该工具将使用用户定义的名称来输出重构的 .yaml 和 .npz 文件。
重构的 .yaml 示例如下:
metadata:
columns:
- obs_0:
dim: action_realated_obs
type: continuous
- obs_1:
dim: action_realated_obs
type: continuous
- obs_2:
dim: translation_related_obs
type: continuous
- obs_3:
dim: translation_related_obs
type: continuous
- action:
dim: action
type: category
values:
- 0
- 1
- 2
- 3
graph:
action:
- action_realated_obs
next_action_realated_obs:
- action_realated_obs
- translation_related_obs
- action
next_translation_related_obs:
- action_realated_obs
- translation_related_obs
- action在生成的 .yaml 文件中,因果推断工具只构建 graph 部分。columns 部分是不变的。
生成的 .yaml 文件显示,因果推断工具将 obs 数据的四个维度分为两个节点。前两个维度具有新的节点名称 action_realated_obs,该节点与 action 直接关联。obs 的另两个维度现在被命名为 translation_related_obs。拆分的两个 obs 节点被视为两个过渡节点,如 graph 所示。
新构建的 graph 显示了 obs 节点和 action 节点的因果关系。值得注意的是,我们提供的数据是由基于坐标信息的规则模型生成的。换言之,数据中的 action 仅由坐标信息决定。可以看到的是,因果推断工具可以正确地解析数据节点的因果关系,将原始 obs 节点中的坐标信息与 action 节点进行关联,避免了其他不相关信息的干扰。
对于构建决策流图比较困难的任务,REVIVE SDK 的因果推理工具可能是一个不错的选择,用户也可以对生成的决策流图进行调整。
因果推断工具还可以推断数据中那些没用的维度。在上述任务中,比如 obs 节点数据中具有两维不相关的随机特征。因果推断工具可以发现 obs 自动将附加的特征 obs_3 和 obs_4 标记为 useless_obs 节点,这意味着这两个维度被从 obs 中删除。这个结果也符合我们的认知。
metadata:
columns:
- obs_0:
dim: obs
type: continuous
- obs_1:
dim: obs
type: continuous
- obs_2:
dim: obs
type: continuous
- obs_3:
dim: useless_obs
type: continuous
- obs_4:
dim: useless_obs
type: continuous
- action:
dim: action
type: continuous
graph:
action:
- obs
next_obs:
- obs
- action