通过因果推理辅助构建决策流图¶
当我们不知道如何使用现有数据构建决策流时,可以借助REVIVE SDK提供的因果推理工具自动构建决策流 *.yaml
文件。
该工具是基于 因果推断 实现的。
借助因果推断方法,我们也可以简单地检查离线数据中哪些维度对学习环境或策略模型有用,以及这些维度的状态与行为之间的联系。
该工具是纯数据驱动的。在该工具的帮助下,用户可以很容易地获得生成的决策流图,
这可能有助于REVIVE更准确地学习虚拟环境并推断出更有效的策略。
该工具可以基于提供的 .yaml
和 .npz
文件自动生成决策流图。
Note
用户不必在 .yaml
文件中定义 graph
部分,REVIVE SDK会通过因果推断算法自动生成 graph
。
在某些情况下,生成的决策流图可能与用户的潜在想法有所不同。因此,用户可以在使用REVIVE训练环境模型和策略之前,检查生成的决策流图的合理性。
下面,我们使用一个任务示例来展示如何 使用REVIVE SDK 控制着陆器悬停
在该任务中,我们只需要构建 .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