1

开发人员,

我找到了一堆 DQN 实现的例子,但是因为我不是 TensorFlow 专家,所以我有点困惑。

让我们看看这里就是其中之一。

我可以理解,在第 73 行,我们对一批存储的数据进行[{state, action, reward, newState, done}]精确切片,然后我们得到currentStateswhich is [[s1, s2, ...]],然后在 75 上我们使用模型来获取currentQs应该是,我怎么理解,[[act1, act2, ...]]因为我们的模型是用来获取动作的从 env 的状态。newCurrentStates和 也是如此futureQs

但是在 88 上,我们看到了let maxFutureQ = Math.max(futureQs);. 这里发生了什么?futureQs是每个futureState 的具有动作概率的数组吗?然后maxFutureQ应该是一个动作概率,为什么还要加上这个来奖励呢?这部分让我很困惑。

我也无法理解为什么我们需要currentQ[action] = newQ;在 94 上做。

拜托,有人可以帮我理解这里发生了什么并留下评论吗?

提前致谢。

编辑:

讨论的代码: 讨论的代码

4

1 回答 1

0

让您感到困惑的部分Bellman approximation是用于更新Q-values被定义为s执行给定操作的状态的a部分。

在此处输入图像描述

Q对于这个状态,s和行动,a,等于预期的即时奖励和目标状态的折扣长期奖励。

Q-values(or the value of the action)我们在状态的值中取最大值,s'这是从状态开始的下一个状态s,带有一个动作,因为从一个状态到一个状态a'时我们可以采取的动作是一组互斥的离散集(即,您的环境允许您在向上、向左、向右或向下的方向上移动),因此最佳操作将是导致该操作的最高值的操作。ss'

在此处输入图像描述

以上图为例。代理从状态开始,s0并且能够向上、向左、向右或向下移动,这些都是动作。代理可以采取的行动本质上是随机的,不是确定性的,但即当代理打算向上时0.33%,代理可能会改为向左或向右移动。我将在这里为 gamma 分配一个值 1。

这就是你如何计算Q-values状态s0和动作up的值,进入状态的值是代理收到的即时奖励,V1 = 1, V2 = 2, V3 = 3, V4 = 4

Q(s0,up) = 0.33 * V1 + 0.33 * V2  0.33 * V4  
         = 0.33 * 1 + 0.33 * 2 + 0.33 * 4 
         = 2.31

接下来,如果您计算所有其他可能状态及其动作的 Q 值,您将得到以下结果:

Q(s0,left) = 1.98
Q(s0,right) = 2.64
Q(s0,down) = 2.97

因此,状态的最终值s0maximum那些动作的值,即2.97。这就是您在代码中真正尝试做的所有事情。

至于做什么currentQ[action] = newQ;,它正在对当前的动作执行更新,Q-values从其旧值到剧集结束时的新更新值。

关于它为什么这样做,您必须了解的一件事是,代理Q-values在一集之后对其进行更新,然后再次进行训练并重复该过程,直到代理设法完成其目标(对于 Atari 论文这个算法是从引入的,那个目标的平均得分我认为是 19,这相当于在 21 场比赛中赢了 19 场)。

您可以从原始论文中了解有关整个过程的更多信息。

但我认为在此之前你需要更多地了解贝尔曼方程,因为它对于理解强化学习非常重要。DeepMind 有一个关于这方面的优秀 Youtube 系列,可以在这里找到

更好的是,它的创始人 Richard Sutton 和 Andrew Barto 有一本关于强化学习的免费书籍。我相信他们会在第 4 章详细介绍这一点。

编辑:

我不太清楚你所说的它如何影响训练是什么意思,但我会概述整个过程,让你了解训练是如何为此工作的:

在此处输入图像描述

于 2021-01-10T07:19:11.487 回答