问题标签 [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.
python - 了解 tf.random.seed 的行为
在使用 tensorflow 时,我通常会为实验的可重复性设置种子。在这种情况下,我的代码如下:
为这个简单的 DNN 模型设置种子,哪些操作会影响优化?我想到的唯一步骤是网络参数的初始化。选择小批量以执行 SGD 更新(或任何其他优化器选择)所涉及的随机性在这里并不重要,因为我正在实现 DQN,因此我将缓冲区中随机选择的批次作为输入传递(不设置种子) .
有没有其他方法可以修复使用此代码的随机性?当我传递不同的种子作为输入时,我的问题与理解不同实验的结果有关。现在我想改变种子只会改变权重的初始化,但我想确定这一点。
我已经阅读了tensorflow 的文档大量随机种子,但它并没有多大帮助。
input - 如何解决 LSTM DQN 的数组输入形状错误?
我正在使用 LSTM 层构建 DQN。尝试将 96 个时间段、33 个特征数组传递给模型,用于训练,即:shape=(96, 33) 还尝试实现后填充掩码 (val=0.) 以适应可变长度序列(最大长度=96)。
当我提交一个名为 current_states 的序列时,形状为 (96, 33),使用:
要生成 q 值,返回错误:
我认为 32 是被提交给模型的第一个序列的屏蔽长度(超出最大长度 96),并被转储......试图在屏蔽层之前立即添加一个输入层:
但没有解决方案,只有更多的错误。请问如何重写模型输入层以在 [96,33] 数组上接收和训练?或者我是否需要将一批序列(例如:4 个序列)合并到一个数组中作为 [4, 96, 33] 然后提交给模型?
deep-learning - DQN的奖励函数设计原理是什么?
我正在设计 DQN 模型的奖励函数,这是深度强化学习部分中最棘手的部分。我参考了几个案例,并注意到通常奖励将设置在 [-1, 1] 中。考虑到如果负奖励被触发的次数更少,与正奖励相比更“稀疏”,正奖励可能低于 1。
我想知道为什么我要设置总是尝试将奖励设置在这个范围内(有时可以是[0,1],其他时候可能是[-1,0]或简单地-1)?范围背后的理论或原理是什么?
我经历了这个答案;它提到将 500 设置为正奖励,将 -1 设置为负奖励将破坏网络。但它会如何破坏模型呢?
我可以模糊地理解它与梯度下降相关,实际上它是奖励之间的差距,而不是符号或绝对值。但我仍然没有明确提示它如何破坏,以及为什么在这样的范围内。
此外,我什么时候应该使用像 [0,1] 这样的奖励或只使用负奖励?我的意思是,在给定的时间步长内,这两种方法似乎都可以推动代理找到最高的总奖励。只有在我想让代理尽快到达终点的情况下,负奖励似乎比正奖励更合适。
是否有衡量奖励设计合理的标准?就像使用Sum the Q value of good action和bad action一样,它是对称的,最终的Q应该在零附近,这意味着它会收敛吗?
python - Deep Q - 在 Python 中使用 Tensorflow 学习 Cartpole
我知道在 StackOverflow 上讨论了很多类似的话题,但是我在 StackOverflow 和互联网上都做了很多研究,但我找不到解决方案。我正在尝试实现经典的 Deep Q 学习算法来解决 openAI 健身房的推车游戏: OpenAI Gym Cartpole
令人惊讶的是,代理通过在每个情节中从(-1.0 到 1.0)简单地生成 4 个随机均匀权重 [w1, w2, w3, w4] 在许多情节中设法达到 200 步(这是最大值)。
所以,我决定实现一个只有 4 个权重和 2 个偏差的简单 DQN,并让代理随着时间的推移学习这个游戏。权重将在开始时随机初始化,并且在代理执行步骤时将使用反向传播来更新它们。
我使用 Epsilon Greedy 策略让代理在开始时进行探索,然后利用 Q 值。然而,与随机代理相比,结果令人失望:
我尝试调整很多参数和不同的架构,结果变化不大。所以,我的问题如下:
问题: 我是否对 DQN 进行了错误的实现,或者一个简单的 DQN 无法击败cartpole?你有什么经验?它确实减少了损失(错误),但并不能保证一个好的解决方案。提前致谢。
tensorflow - 使用带有 DQN 算法的张量板
对于强化学习,我读到张量板并不理想,因为它提供了每集和/或步骤的输入。由于在强化学习中有数千个步骤,它并没有给我们提供内容的概述。我在这里看到了这个修改过的张量板类: https ://pythonprogramming.net/deep-q-learning-dqn-reinforcement-learning-python-tutorial/
班上:
我想让它与这一层一起工作:
但我还没有让它工作。任何曾经使用过 tensorboard 的人,你知道如何设置它吗?非常感谢任何见解。
python - 为什么我安装 keras 后出现 ModuleNotFound 错误?
我这样做是为了学习DQN
。我确定我已经安装了keras
,因为当我输入命令提示符时,pip install keras
我得到的只是Requirement is Already Satisfied
.
我的代码:
得到错误:
python - 如何减少我的 DQN 中的剧集时间?
我已经从 OpenAi 修改了cartpole环境,使其从倒立位置开始,并且必须学习上摆。我使用 Google collab 来运行它,因为它比我的笔记本电脑要快得多。我想。超级慢……我需要 40 秒。对于一集,和我的笔记本电脑上的时间差不多。我什至尝试为谷歌 TPU 优化它,但没有任何改变。消费者的主要时间是.fit()
和.predict()
,所以我相信。我.predict()
在这里使用
def get_qs(self, state): return self.model.predict(np.array(state).reshape(-1,*state.shape), workers = 8, use_multiprocessing = True)[0]
还有这里.fit()
有人可以帮我把东西固定好吗?
python - 一段时间后DQN没有任何进展
这是我的代码,它是一个简单的 DQN,可以学习玩蛇,例如,我不知道为什么它会在一段时间后停止学习。它知道蛇头应该撞墙,但它没有学会吃水果,即使我给靠近水果的奖励和更远的负奖励(这是为了让蛇明白)它应该瞄准水果)。但由于某种原因,分数永远不会超过 1 或 2:“””############################### ##########################MAIN.py
reinforcement-learning - 网格世界的深度 Q 学习
有没有人实施过深度 Q 学习来解决网格世界问题,其中状态是玩家的 [x, y] 坐标,目标是达到某个坐标 [A, B]。每一步的奖励设置可以是-1,达到[A,B]的奖励设置可以是+10。[A, B] 总是固定的。
令人惊讶的是,我没有在 google 上找到这样的实现。我自己使用taxi-v3尝试了DQN,但没有成功。因此,寻找这样的参考实现来解决我的问题。
reinforcement-learning - 我可以在不更新训练代理的情况下训练 DQN 吗?
我是 RL 的新手,所以如果我问愚蠢的问题,请原谅我:)
我现在正在做一个 DQN 项目,它与最简单的蛇游戏非常相似。该游戏是用js编写的,并有一个演示(其中蛇随机移动)。但是由于我不会写js,所以在trainng过程中无法将动作值传递给游戏,所以我现在正在做的是生成随机游戏图像并训练dqn模型。
我想问的是:这样可以吗?Q(s,r) 还能收敛吗?如果可以的话,有什么需要注意的吗?我还需要 Episilon 参数吗?
非常感谢:)