我是深度强化学习DQN模型的新手。我使用Open AI Gym进行了分别名为CartPole-v0
和MountainCar-v0
的实验。
我引用了来自Github的代码,CartPole-v0
:https://gist.github.com/floodsung/3b9d893f1e0788f8fad0e6b49cde70f1
MountainCar-v0
:https://gist.github.com/floodsung/0c64d10cab5298c63cd0fc004a94ba1f
。
这两个模型都可以成功运行,并且可以按预期获得测试情节的奖励。 但是,两种模型在每个时间步长上的奖励都是不同的。
对于CartPole-v0
,奖励是+1和0。每个情节都有300个时间步长,并且业务代表会尝试尽可能多地获得总奖励。源代码如下:https://github.com/openai/gym/blob/master/gym/envs/classic_control/cartpole.py
但是在MountainCar-v0
中,所有动作的奖励始终为-1,因此代理试图最终获得比平常少的负面奖励。 How does DQN work in an environment where reward is always -1也在此处进行了说明。
所以这让我感到困惑,如何确定对行为或状态的奖励?在有限的时间范围内,似乎正面的奖励还是负面的奖励都有意义?选择使用哪个原则是什么。而且我看到有时候奖励可能是它们之间的浮点数。
以及如何避免“自杀本身”的情况,在这种情况下,由于“实时惩罚”,代理人自杀而不是试图达到目标(代理人在每一步都受到惩罚,以加快开发阶段探索)。 > https://datascience.stackexchange.com/questions/43592/rl-weighthing-negative-rewards
谢谢!
答案 0 :(得分:0)
有两点要考虑:
首先,在DQN中,代理尝试通过以下方法最大化Q-
值的近似值:
Q(s_t,a) = r(s_t,a_t) + \gamma * \max_{a} Q(s_{t+1}, a)
因此,无论奖励是什么,DQN都希望学习使长期奖励最大化的策略,即Q(s,a)
。在您的两个示例中,DQN都会选择获得更高奖励的动作,CartPole
中的奖励是200,而MountainCar
中接近零的奖励是最好的。
第二点是DQN使用目标网络获取目标值并训练Q网络。在目标网络中,目标值为:
target-value = r(s_t,a_t) + (1-done)*\gamma * \max_{a} Q(s_{t+1}, a)
其中target-value
等于r(s_t,a_t)
,如果done==1
。换句话说,DQN可以访问处于终端状态的知识,并以此来学习智能策略。