问题标签 [dqn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
765 浏览

python - 在 TensorFlow 2.0 上实现 Dueling DQN

我正在尝试使用基于https://arxiv.org/pdf/1511.06581.pdf的 tensorflow 2 实现我自己的 Dueling DQN 。我实际上是在亚特兰蒂斯环境中训练它,但我无法获得好的结果(每场比赛的平均奖励不断减少,而TD 损失增加)。虽然我相信我从论文中得到了逻辑,但我不知道它是来自网络的直接实现还是来自所选参数。

编辑:使用 tf.keras.utils.plot_model 给了我这个

0 投票
2 回答
5569 浏览

python - 类型错误:__init__() 缺少 1 个必需的位置参数:使用 NoisyDense 类时的“单位”

我正在尝试在我的模型中实现嘈杂的网络。我在 GitHub 上找到了一个代码,它是NoisyDense Class的一个实现。我在我的模型中使用了这个类。这里的代码: -

但是遇到了一个错误,我似乎不知道如何解决它,也检查了 NoisyDense 的实现。我在 StackOverflow 上寻找了类似的问题,但没有得到任何适用于我的代码的解决方案。此外,当我不调用 NoisyDense 类而是使用 Dense 层时,相同的模型也有效。回溯中的 Train.py 文件调用了代理类,我猜没有什么比这更重要的了。使用的模型是 Keras 模型,它的版本是 2.3.1

0 投票
1 回答
207 浏览

deep-learning - DQN 不稳定预测

我在 Java 中从头开始实现 DQN,一切都是定制的。我做了它来玩蛇,结果非常好。但我有一个问题。

为了使网络尽可能稳定,我正在使用replay memoryand also target network. 网络融合得非常好。但过了一段时间它就坏了。

这是一个图表(X - 玩过的游戏,Y - 平均得分)

在此处输入图像描述

target在我用网络更新网络后,这种“中断”通常发生在几场比赛中policy

我用于 DQN 的设置:

有什么想法可能是错的吗?感谢您的回答。

0 投票
0 回答
175 浏览

pytorch - 强化学习中是否有任何方法可以选择多个同时动作?

我正在从事一个研究项目,该项目涉及将强化学习应用于规划和决策问题。通常,这些问题涉及根据排名 [max_q 到 min_q] 在一个状态中选择(采样)多个动作。RL 文献似乎侧重于从一组状态映射到单个动作而不是多个动作的策略。有谁知道不仅可以将状态映射到多个同时动作而且可以保持这些动作之间的关系的方法? 这里是DQN动作选择函数源码

谢谢

0 投票
0 回答
102 浏览

deep-learning - 深度纯价值强化学习:训练 V(s) 而不是 Q(s,a)?

是否有可用的基于价值的(深度)强化学习 RL 算法,它完全围绕仅学习状态-价值函数V(s)而不是状态-动作-价值函数Q(s,a)

如果没有,为什么不,或者,它是否可以很容易地实施?

Python 中是否有任何实现,比如 Pytorch、Tensorflow 或者 RLlib 中的更高级别?

我问是因为

  • 我有一个多智能体问题来模拟现实中一些有效的集中决策(i)成功地激励代表分散的智能体讲真话,以及(ii)基本上取决于各种参与者的价值函数 i(在 V i (s i,t+1 ) 上针对不同可实现的后期状态 s i,t+1对于所有参与者 i),定义代理的动作。从单个智能体的角度来看,渐进式学习的多智能体性质意味着只要训练没有完成,系统就会看起来是非平稳的,并且由于问题的性质,我相当相信学习任何自然的我的问题的 Q(s,a) 函数比简单地学习终端价值函数 V(s) 的效率要低得多'价值观。

  • 具有时间差异学习的典型 DQN 的数学似乎很自然地适用于 V(s) 而不是组合 Q(s,a) 的基于状态值的深度网络训练。然而,在基于价值的 RL 子域中,每个人似乎都专注于学习 Q(s,a),到目前为止我还没有发现任何纯粹的 V(s) 学习算法(除了分析和非深度的传统 Bellman-方程动态规划方法)。

我知道 Dueling DQN (DDQN),但它似乎并不是我正在寻找的。“至少” DDQN 有一个单独的学习器V(s),但总体而言,它仍然以Q(s,a)分散的方式轻松学习,这在我的情况下似乎不利于。

0 投票
1 回答
251 浏览

python - 我应该如何为类似网格世界的环境定义状态?

我要解决的问题其实不是这么简单,而是一种玩具游戏,可以帮助我解决更大的问题。

所以我有一个 5x5 矩阵,其值都等于 0 :

目标是让代理将所有值变成 1,所以我有:

我创建了一个具有 5 个动作的类 Player,可以向左、向右、向上、向下或翻转(将值 0 变为 1 或 1 变为 0)。对于奖励,如果代理将值 0 更改为 1,则获得 +1 奖励。如果它将 1 变成 0 得到负奖励(我尝试了从 -1 到 0 甚至 -0.1 的许多值)。如果它只是向左、向右、向上或向下移动,它会得到奖励 0。

因为我想将状态提供给我的神经网络,所以我将状态重塑如下:

然后我将代理的标准化位置添加到这个数组的末尾(因为我认为代理应该知道它在哪里):

但我没有得到任何好的结果!它就像它的随机一样!我尝试了不同的奖励功能,不同的优化算法,例如体验回放,目标网络,Double DQN,决斗,但似乎都不起作用!我想问题在于定义状态。任何人都可以帮助我定义一个好的状态吗?

非常感谢!

ps:这是我的阶梯函数:

0 投票
1 回答
2713 浏览

python-3.x - 实现 Atari Breakout 时出现错误“AttributeError: 'NoneType' object has no attribute 'shape'”

我编写了一个代码来解决 Atari Breakout。我面临一个小问题,但我不能说它是什么。

这是代码

这是回放内存的问题。

问题出在这些线的位置。 set_trace()用于弹出交互式shell。从那里,如果我运行for i in range(batch_size): print(batch[3][i].shape),我得到了这个输出

如何改进该代码以避免此类错误?

0 投票
0 回答
29 浏览

python - 尽管您可以看到代理正在学习,但为什么没有收敛?

最近我一直在解决强化学习的问题(我在该领域非常新)。问题很简单。我们有一个大小为 NxN 的矩阵,所有元素都为零。目标是让代理将所有值更改为 1。我可以看到代理正在学习,但无论我做什么,我的输出图中都有很多噪音,我看不到收敛!另一方面,超参数的微小变化可能会破坏我的学习过程!从学习到不学习!

例如,我使用了 5x5 矩阵。探索/开发权衡的 epsilon 函数如下:

epsilon 函数降低了每个时间步(不是插曲)中的随机性。我设置了 5000 集,每集有 50 个时间步长。此外,我正在使用目标网络的经验回放,每个隐藏层。这些是我的超参数:

这是每集奖励相对于集数的总和: 在此处输入图像描述

可见有学习但有两个问题。首先,代理每集可以获得的最大奖励是 25,但在这里我们可以看到它获得的最大奖励是 20。

通过将每集的探索次数更改为 100(像素数的 4 倍),我得到了 25,但我仍然没有看到任何收敛并且解决方案不稳定: 在此处输入图像描述

当我试图增加剧集的数量时,我没有看到任何更好的结果。似乎真正影响结果的一件事是每集的探索次数。但它不遵循线性传递。例如,如果我有一个 3x3 矩阵(9 个像素),则每集 18 个时间步就足够了(即 2x 个像素)。对于 5x5,100 个时间步有效(我也放了 200,但结果没有太大变化),但我的实际问题要复杂得多!无论是目标配置还是大小(最小 20x20 矩阵),它都非常耗时,因为在每个时间步骤中,都会在后台运行复杂的模拟!因此,考虑到我有时间,仅仅玩弄该问题的参数对我来说几乎是不可能的!

有没有一种通用的方法来优化超参数,而不必一遍又一遍地检查所有内容?比如有什么食谱吗?为什么我在这里看不到收敛?(我已经使用了更多的剧集,但我仍然有问题!)我该如何解决这个收敛问题?

非常感谢!如果您需要有关我的代码的更多信息,我也可以将其放在这里!

0 投票
0 回答
88 浏览

python - Q 学习状态动作对,“状态”到底是什么?

大家好,我正在尝试编写一个深度 q 学习网络,我没有使用任何类型的健身房环境或任何东西,只是使用屏幕抓取的 cnn。因为我没有使用很好编码的用户友好环境的健身房。我实际上为我的“状态”保存了什么仅仅是网络作为输入的图像?除了状态,动作,奖励,下一个状态之外,我的动作和奖励编码没有问题。我不确定我用于“状态”的内容是原始像素数据还是卷积图像?这行得通吗?任何帮助是极大的赞赏。希望我明白了这一点,我需要在回放记忆中保存状态、动作、奖励和下一个状态以回馈网络,如果你不使用开放式 AI 健身房,我只是不确定是什么状态。

0 投票
0 回答
405 浏览

python - 由于未知原因,OpenAI Gym LunarLander 的执行速度大大减慢

我一直在使用 OpenAI Gym LunarLander 测试 DQN 神经网络。我已经到了慢慢学习的地步。由于我从 CartPole 问题开始,该问题在几分钟/几集内就解决了,我最初认为 LunarLander 将以相似的速度运行,但事实证明我错了。在拥有可以正确运行的体面代码并让神经网络正确学习大约一个小时后,我认为在经过一段时间的训练后为模型设置一个保存系统是个好主意,这样我可以稍后再回来.

我设置了所有我想要的元素,以确保我可以正确跟踪神经网络的运行情况,但是在一切正常运行之后,当我启动它时env.render(),前几个步骤执行得不错速度,但随后,在特定点之后,整个渲染速度减慢,好像代码中的某些内容需要很长时间才能处理(我还没有设法确定发生这种情况的确切时间)。

由于我最近开始在 python 中更深入地使用 keras 和机器学习,我仍然不熟悉组件在系统中的行为方式以及哪些组件会对计算能力产生重大影响。

这是运行我所拥有的代码所必需的两部分代码:

LunarLanderConfig.py

LunarLander_AI.py

概括

我让上面的代码顺利运行了几秒钟,然后渲染就像幻灯片一样,我目前不知道我用来识别原因的工具。我想知道是否有人可以清楚地看到冗余的代码部分并导致执行速度减慢,或者某些部分是否只是贪婪而应该被排除在外以提高性能和执行速度。

我正在运行 16Gb 的 RAM、i7-9700K 和 RTX 2070 Super,如果这有任何用处的话