后见之明体验回放,如何定义部分已知的最终目标

数据挖掘 强化学习
2021-10-12 13:19:13

后见之明体验回放的要求之一是为 DQN 提供我们希望最终达到的状态和目标(期望的最终状态):

<currState, goal>    <-- For Hindsight Experience Replay;
<currState>          <-- This would be an input for a usual DQN;

本文允许在奖励稀疏时快速学习。换句话说,当奖励在大多数情况下是统一的时,只有少数罕见的奖励值真正脱颖而出。

问题:

假设我想让玩家在我的游戏中被怪物杀死。因此,我的“目标状态”必须包含 0 值来表示玩家的生命值。但是,状态向量还包括他的位置(xyz 坐标)、旋转向量、装备物品的 ID:

inputVec = <hp,  x1,x2,x3,  q1,q2,q3,  chestID, handsID, headID, feetID>

我不想强加一个球员的特定位置,等等——我只是想让他死。我只知道他的“hp”应该是什么(应该是零),我不关心其他值。

因此,我无法提供完美定义的目标向量——这是否意味着我无法使用事后经验回放?

编辑: 我的理解是组件必须具有相同的组件currStategoalState我们不能让这两个向量大小不同或存储不同的东西


接受答案后编辑:

正如@lfelipesv 提到的,第4页告诉我们:

我们假设每个目标gG对应于某个谓词fg:S{0,1}并且代理的目标是达到任何满足fg(s)=1. 在我们想要准确指定我们可能使用的系统的期望状态的情况下S=Gfg(s)=[s=g]

目标也可以只指定状态的一些属性,例如假设S=R2 我们希望能够用给定的 x 坐标值实现任意状态。在这种情况下G=Rfg((x,y))=[x=g].

2个回答

使用 Hindsight Experience Replay 您应该能够替代已实现的目标,因此使用目标作为最终 HP(在您的情况下为零)可以使学习更加困难。

我的想法是使用类似于特定玩家的 (1 - Current_HP/Max_HP) 来标准化 HP。所以当玩家有最大HP时它会是0,当玩家死亡时它会是1。最终目标将始终为 1,然后您可以根据我之前提出的规范化公式计算已实现的目标(以替代事后经验重播算法)

<currState, goal>    <-- For Hindsight Experience Replay;
goal = 1
achieved_goal = 1 - current_hp/max_hp

我得到了作者的回答:

最简单的解决方案是有两种类型的目标 - a) 特定的马力和位置;b) 特定马力,任意位置。我还没有尝试过这样的事情。

根据响应,我认为如果我们执行以下操作可能会起作用:使用占位符值,可能用于输入向量的最后一个分量。
这样 DQN 会注意到,当这个“最后一点”打开时,只有健康很重要。

<hp,  x1,x2,x3,  q1,q2,q3,  chestID, handsID, headID, feetID,   placeholder0or1>

编辑:如果您知道更好的方法,请分享它作为答案!