Machine learning 在奖励总是-1的环境中,DQN是如何工作的

Machine learning 在奖励总是-1的环境中,DQN是如何工作的,machine-learning,keras,reinforcement-learning,openai-gym,q-learning,Machine Learning,Keras,Reinforcement Learning,Openai Gym,Q Learning,鉴于OpenAI Gym环境总是返回-1.0作为奖励(即使目标实现),我不明白DQN与经验回放如何融合,但我知道它会融合,因为我已经证明了这一点。通过工作,我的意思是当我培训代理人时,代理人很快(在300-500集内)学会了如何解决山车问题。下面是我训练有素的经纪人的一个例子。 我的理解是,最终需要找到一个“稀疏奖励”。然而,就我在openAI健身房所见,除了-1之外,没有其他奖励。这更像是一个“没有回报”的环境 什么几乎回答了我的问题,但事实并非如此:当任务很快完成时,情节的回报(奖励总和)

鉴于OpenAI Gym环境总是返回-1.0作为奖励(即使目标实现),我不明白DQN与经验回放如何融合,但我知道它会融合,因为我已经证明了这一点。通过工作,我的意思是当我培训代理人时,代理人很快(在300-500集内)学会了如何解决山车问题。下面是我训练有素的经纪人的一个例子。

我的理解是,最终需要找到一个“稀疏奖励”。然而,就我在openAI健身房所见,除了-1之外,没有其他奖励。这更像是一个“没有回报”的环境

什么几乎回答了我的问题,但事实并非如此:当任务很快完成时,情节的回报(奖励总和)会更大。因此,如果汽车从未找到国旗,则返回值为-1000。如果汽车很快找到国旗,返回值可能是-200。这不能回答我的问题的原因是,对于DQN和experience replay,这些返回(-1000,-200)永远不会出现在experience replay内存中。所有内存都是这种形式的元组(状态、动作、奖励、下一个状态),当然要记住,元组是随机从内存中提取的,而不是一集一集地提取的

这个特定的OpenAI健身房环境的另一个元素是在两种情况下返回“完成”状态:点击标志(yay)或在若干步后超时(boo)。然而,代理人对待这两个人一视同仁,接受-1的奖励。因此,就内存中的元组而言,从奖励的角度来看,这两个事件看起来是相同的

所以,我在记忆中没有看到任何迹象表明这一集演得很好


因此,我不知道为什么这个DQN代码适用于MountainCar。

在DQN中,您学习了Q函数,它基本上近似于您的回报。在内存中,用(s,a,s',r)存储元组,并在这些元组上重新训练Q函数。如果对于给定的元组,您表现良好(您很快到达了标志),那么您将通过重新使用元组进行训练来重新体验它,因为该元组的Q函数更高


无论如何,体验重播通常对任何问题都更有效,而不仅仅是山地车。

之所以有效,是因为在Q-learning中,您的模型试图估算每个可能动作的所有未来奖励的总和(技术上是时间衰减的总和)。在MountainCar中,你每走一步都会得到-1的奖励,直到你赢为止,所以如果你真的赢了,你得到的负面奖励会比平时少。例如,您获胜后的总分可能是-160而不是-200,因此您的模型将开始预测历史上导致赢得比赛的行为的更高Q值。

您是对的。记忆(体验重播)和模型在情节奖励中的表现之间没有直接联系。DQN中的Q值用于预测每个步骤中每个动作的预期回报。衡量您的模型有多好的绩效指标是实际奖励和预期奖励之间的差异(TD误差)

为非目标步骤部署-1是一个技巧,可以帮助RL模型选择可以更快完成这一集的操作。因为Q值是一个动作值。在每一步中,模型预测每一个可能动作的奖励,策略(通常是贪婪或ε贪婪)选择具有最显著值的动作。你可以想象一下,在某一时刻返回需要200步才能完成这一集,但向前走只需要100步。Q值将分别为-200(不打折)和-100。您可能想知道模型是如何知道每个动作的价值的,这是因为在重复的情节和连续的尝试和错误中。对模型进行训练,以最小化实际奖励和预期奖励之间的差异,即TD误差

在随机抽样的体验重播中,所有体验都被统一抽样和删除。但是,在优先级体验重播中,您可以重用那些具有高估计错误的体验。通常,优先级与预期Q值的TD误差(实际奖励-预期奖励)和当前模型的预测Q值成正比。优先级越高,意味着体验会有多么令人惊讶,这有助于加快培训


您可以在

中查看该想法,它可能有助于查看简化的问题。考虑:

States:
───┬───┬───┬───┬───┐
...│L2 │L1 │ S │ R1│
───┴───┴───┴───┴───┘

Actions:
left or right

r = -1 for all states
episode terminates upon reaching R1 or after 2 steps
内存:

  • (S,左,-1,L1)
    非终端
  • (右S,-1,R1)
    终端
  • (L1,左,-1,L2)
    终端
  • (L1,右-1,S)
    终端
  • 需要注意的明显但重要的一点是,尽管奖励都是相同的,但状态和行为却不相同。这些信息使我们能够根据当前状态推断下一个状态。 让我们看看我们正在更新的目标(不打折):

  • Q(S,左)->-1+max{a}Q(L1,a)
  • Q(S,右)-->-1
  • Q(L1,左)->-1
  • Q(L1,右)->-1
  • 在这个人为的例子中,只有过渡1表示额外的不稳定源。但是,随着时间的推移,由于对过渡3和4进行了足够的采样,L1上的动作值会收敛,因此过渡1上的目标也应该收敛。 在这一点上,当我们再次遇到转换1时,我们将有一个更好的估计
    Q(S,左)-->-1+-1

    当我们询问DQN如何从记忆中学习时,仅仅看奖励是不够的,因为它还使用下一个观察值来确定下一步行动价值的当前最佳估计值(),有效地将一切联系在一起,并缓慢地计算奖励。尽管它是以一种更不稳定的方式这样做的
    # Store transition in the replay buffer.
    replay_buffer.add(obs, action, rew, new_obs, float(done))
    
       if s_ is None:
            t[a] = r
        else:
            t[a] = r + GAMMA * numpy.amax(p_[i])