问题标签 [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 回答
191 浏览

python - DDQN 无法解决井字游戏

很长一段时间以来,我一直在尝试使用 DDQN 方法解决井字游戏。我花了一段时间来填补我的知识空白,但现在我的代码看起来不错。但是,我不确定如何训练代理,因为它是一个两人游戏。目前,我让智能体与X一起玩,让O由一个随机玩家玩,该玩家做出随机但合法的动作,而智能体也可以下非法动作并因此获得负奖励。阶跃函数如下所示:

因此,如果代理获胜、平局或如果他下棋,则会给予积极的奖励,这会导致随机玩家下一个棋棋打成平局。

不幸的是,DDQN 没有收敛。我无法获得超过 0.5 的平均奖励。为了跟踪训练进度,我让代理使用当前参数和 0.01 的 epsilon 每 1000 场比赛进行 1000 场比赛。有时在找到一个好的策略后,平均值突然变为负数,因此它似乎也很不稳定。

我的超参数如下:

有人对我可以做得更好有什么建议吗?对于像井字游戏这样的简单游戏,预计需要多少个训练周期?

0 投票
1 回答
77 浏览

machine-learning - 之前的训练中断后如何继续DQN或DDPG训练?D

做强化学习的时候,每次都要从头开始训练。这需要很多时间。从以前的训练结果开始训练有什么解决办法吗?谢谢。

0 投票
1 回答
46 浏览

double - 双 QN 是如何工作的?

双QN背后的想法是什么?

用于计算 Q 值以更新在线网络的贝尔曼方程遵循以下方程:

用于计算原始 DQN 中 Q 值更新的贝尔曼方程为:

但是用于评估动作的目标网络是使用 online_network 的权重更新的,并且馈送到目标值的值基本上是动作的旧 q 值。

任何想法如何根据第一个网络的权重添加另一个网络有帮助?

0 投票
0 回答
223 浏览

machine-learning - 对于优先体验重放的 DQN,终端状态的 TD 误差是多少?

在 Prioritized Experience Replay 中计算目标网络的 TD 误差时,我们从附录 B 中的论文方程 2) 中得到:

$$\delta_t := R_t + \gamma max_a Q(S_t, a) - Q(S_{t-1}, A_{t-1})$$

如果 $S_t$ 是终端状态,则适用相同的公式对我来说似乎没有必要/不正确。这是因为在更新动作网络时计算误差时,我们会特别注意终端状态,并且不会为 go term 添加奖励(例如上面的 $\gamma max_a Q(S_t, a)$)。例如,请参见此处:https ://jaromiru.com/2016/10/03/lets-make-a-dqn-implementation/ 。

我的问题是:

  1. 在计算优先体验重放的 TD 误差时是否应该单独处理终端状态?
  2. 为什么/为什么不?
0 投票
0 回答
241 浏览

python - tensorflow 未使用所有 CPU 内核

我将强化学习与神经网络 (DQN) 结合使用。我有一台配备 6 核 i7 和 AMD GPU 的 MacBook。TensorFlow 看不到 GPU,因此它会自动使用 CPU。当我运行脚本时,我在活动监视器中看到 CPU 利用率从大约 33% 变为 ~50%,即没有使用所有 CPU 内核。我的 TensorFlow 版本是 2.2.0。我试过了:

with tf.device("/cpu:0"):

我也想试试:

sess = tf.Session(config=tf.ConfigProto(intra_op_parallelism_threads=NUM_THREADS))

但我不明白如何使用“sess”来训练模型。

脚本每集运行大约需要 64 秒。我的问题:如何确保我的 python 脚本利用所有 CPU 内核,从而减少训练模型所需的时间。

制作模型的功能:

包含 model.fit 和 model.predict 的函数

让我知道是否需要更多代码。请回答我。谢谢你。

0 投票
1 回答
496 浏览

deep-learning - 如何确定 DQN 模型中使用正奖励还是负奖励?

我是深度强化学习 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,因此代理试图最终获得比平时更少的负奖励。这里还解释了DQN 如何在奖励始终为 -1 的环境中工作

所以这让我很困惑如何确定动作或状态的奖励?在有限的时间步长内,似乎积极的奖励或消极的奖励都有意义?选择使用哪一个的原则是什么。我看到有时奖励可能是它们之间的浮点数。

以及如何避免“自杀”的情况,即代理自杀而不是试图达到目标,因为“活罚”(代理每一步都会受到惩罚,以加快探索阶段的利用阶段) . >https://datascience.stackexchange.com/questions/43592/rl-weighting-negative-rewards

提前致谢!

0 投票
0 回答
426 浏览

python - 奖励在 DQN 模型问题中没有收敛

我最近在关注 Sentdex 关于 DQN 的教程(https://pythonprogramming.net/deep-q-learning-dqn-reinforcement-learning-python-tutorial/),他教玩家在环境中移动并获得“食物”我决定尝试推断 DQN 问题来教玩家玩第三人称自上而下的射击游戏。我知道这本身就是一个难题,从我的角度来看,这实际上是两个不同的问题——移动和射击。

这个游戏的好处是它实时提供环境值。因此,我没有在图像上训练它,而是在 env 值上训练它。我将输入的 52x4 矩阵分为 4 类(敌人位置 + 生命值、物品位置、弹丸位置,最后是 2 行“传感器”,确定最近的障碍物在 8 个不同方向内——N、NW、W、 ETC)。

我从问题的运动部分开始。我最初使用具有 2 个 64 个神经元(relu)的隐藏层和 9 个动作的输出(所有 8 个方向上的 1 个像素移动和无方向的额外动作)的 NN。

这最终给我带来了不必要的损失,并呈指数级增长。

损失图

这是输入值的示例(我用零填充,以便它可以接受可变数量的敌人、物品和射弹):

我最终使用了 Sentdex/Daniel 的代码,它使用 CNN 来训练模型。

不幸的是,虽然我的平均奖励和最大奖励随着时间的推移而增加,但最小奖励似乎随着时间的推移而减少——最终平均奖励和最大奖励也直线下降,因为最小奖励随着 epsilon 的减少而减少。

有没有更好的方法/回归模型架构可以更好地适应我的问题?

相关资料

  • 学习率:0.001
  • ε:1 到 0.001
  • ε衰减:.99975

这是我的 DQN 代理的更大片段:

0 投票
0 回答
137 浏览

python - 为 4 个数组类型的观察设置观察空间

我是健身房 RL 框架的初学者,目前正在使用健身房建立强化学习环境。我对如何设置观察空间感到完全困惑。由于我的问题是一个二元分类问题,所以我对动作空间没有任何问题。它是离散的(2)。

对于观察,代理从环境中获得 4 个输入,所有四个都是数组,以下是这些数组的形状。

谁能帮我定义上述 4 个观察的观察空间?

0 投票
1 回答
91 浏览

reinforcement-learning - DQN:在将观察空间转换为 Box 环境后访问原始观察结果?

我正在改编 Tabor 的 DQN 课程( https://github.com/philtabor/Deep-Q-Learning-Paper-To-Code )中的 Pytorch 代码,以使用 vizdoomgym 库,之前已经设法使版本工作在 TF 中。

训练我的代理后,我会将其性能可视化为 .mp4 视频。以前,我使用 SK-video 库来录制播放中的代理,因为内部的 Monitor 类不能与 VZDgym 库一起使用。这是通过简单地将每个观察结果保存到图像阵列中来实现的。

我遇到了一个问题,因为我遵循的代码调用包装器以便将观察空间转换为 Box 环境,因此图像实际上是失真的。这些包装器可以在 utils.py 文件中找到,主要方法如下所示:

我注意到预处理包装器继承了观察方法,这意味着我应该能够在预处理之前访问观察并存储它们。但是,我不熟悉这种解决方案的内存管理问题,是否可行?另一种方法是尝试将观察结果从扭曲的表示中“恢复”回原始形式,但这似乎不可行。

任何建议表示赞赏。

0 投票
0 回答
288 浏览

matlab - 为什么我的代理总是在 RL 中采取相同的行动?

0

我正在尝试重现论文 Demand Response for Home Energy Management Using Reinforcement Learning and Artificial Neural Network 中的工作。我想优化家用电器的功耗。动作空间是家用电器的不同额定功率。我的奖励函数是 = -(额定功率 * 电价)。

我在 Matlab 上使用 DQN 算法训练了一个 RL 代理。我有代理应该从中选择的动作空间,但我的代理总是采取相同的动作,而不管状态如何。我检查了我的奖励函数,算法没有选择奖励最高的动作。任何人都可以想到为什么代理会这样?

我的代码:

在此处 输入图像描述 在此处输入图像描述 我在训练时得到什么:

在此处输入图像描述

而且我的代理总是采用相同的额定功率,无论状态如何(电价)。为什么?