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

reinforcement-learning - 多智能体(非深度)强化学习?建模问题

我有N个代理/用户访问一个无线频道,每次只有一个代理可以访问该频道并获得奖励。

每个用户都有一个可以存储B个数据包的缓冲区,我假设它是无限缓冲区。

如果时隙t中的数据包成功或失败(冲突),每个用户n从环境中得到观察。如果多个用户访问该频道,他们将受到惩罚。

由于我们只有一个频道,因此来自频道的反馈对于所有用户都是相同的。奖励是- B_n(缓冲区中数据包数量的负数)。每个用户都希望最大化自己的奖励并尝试清空缓冲区。

数据包按照泊松过程到达每个用户,每个时隙平均 $\lambda$ 个数据包。

每个用户都有前 10 个时隙的历史,它用作 DQN 的输入,以输出采取行动A_n的概率:保持沉默或传输。历史是(A_n,F,B_n)

每个用户都不知道其他用户的动作和缓冲区状态。

我正在尝试使用多智能体强化学习对我的问题进行建模,到目前为止,我已经使用 DQN 进行了尝试,但结果或多或少类似于随机方案。可能是用户没有太多上下文信息来了解其他用户的行为?或者还有其他原因吗?

我想知道如何为我的环境建模,因为状态(在 RL 意义上)是静态的,环境不会改变。唯一改变的是每个用户在每个时间段的历史记录。所以我不确定它是否是一个部分可观察的 MDP,或者它是否应该被建模为我不知道是否正确的多智能体单臂老虎机问题。

第二个问题是我尝试过 DQN 但它没有奏效,我想知道这样的问题是否可以与表格 Q 学习一起使用?我还没有看到有人使用 QL 的多代理工作。任何见解都可能会有所帮助。

0 投票
1 回答
248 浏览

python - 如何在 Keras DQN 中实现梯度上升

已经构建了一个以可变长度序列作为输入的强化学习 DQN,并为动作计算正负奖励。我在 Keras 中的 DQN 模型存在一些问题,这意味着尽管模型运行,但随着时间的推移,在单个和多个 epsilon 周期内,平均奖励会减少。即使经过大量培训,这种情况也不会改变。 epsilon 的单周期,平均奖励递减

多个 epsilon 周期,平均奖励减少

我的想法是这是由于在 Keras 中使用 MeanSquareError 作为损失函数(最小化错误)。所以我正在尝试实现梯度上升(以最大化奖励)。如何在 Keras 中做到这一点?我现在的模型是:

在尝试实现梯度上升时,通过“翻转”梯度(作为负损失还是反向损失?),我尝试了各种损失定义:

但这些都会产生错误的操作数 [for unary] 错误。

如何适应当前的 Keras 模型以最大化奖励?或者这种梯度上升甚至不是问题?行动政策可能有问题吗?

0 投票
0 回答
405 浏览

machine-learning - 为自定义环境创建观察空间时,断言观察不是无 AssertionError

编辑:最终修复它。问题底部的解决方案

我想创建一个自定义环境来玩游戏。它通过使用游戏的屏幕抓图作为输入并使用 DQN 输出跳跃或不跳跃来播放。我尝试了几种创建观察空间的方法,但似乎都没有奏效。全部给我错误:断言观察不是无断言错误。

我创建这样的空间:

我的步进函数如下所示:

有没有为 1920x1080 图像制作观察空间的好方法?它不会改变大小。抱歉,如果我第一次在 stackoverflow 上提出这个问题,并且我对批评/提示持开放态度,那么这个问题的表述很糟糕。

编辑:我设法让盒子变成与代表我的图像的 numpy 数组相同的形状:

但我仍然得到错误:断言观察不是无 AssertionError。

编辑2:显然观察空间根本不是问题,而是重置功能。重置游戏后我忘记返回观察结果。现在我将游戏的屏幕抓图作为标准化的 numpy 数组返回。

0 投票
2 回答
628 浏览

python - DQN 理解输入和输出(层)

我对 DQN 的输入和输出(层)有疑问。

例如

两点:P1(x1, y1) 和 P2(x2, y2)

P1 必须走向 P2

我有以下信息:

  • 当前位置 P1 (x/y)
  • 当前位置 P2 (x/y)
  • 到 P1-P2 的距离 (x/y)
  • 到 P1-P2 的方向 (x/y)

P1 有 4 个可能的操作:

  • 向上
  • 剩下
  • 正确的

如何设置输入和输出层?

  • 4个输入节点
  • 4个输出节点

那是对的吗?我与输出有什么关系?我得到了 4 个数组,每个数组有 4 个值作为输出。在输出上做 argmax 是否正确?

编辑:

输入/状态:

网络:

0 投票
1 回答
103 浏览

reinforcement-learning - 决斗 DQN 更新模型架构并导致问题

我使用以下架构创建了一个初始网络模型。

然后我调用更新网络架构的 DQNAgent

这样做会导致更新的网络架构 - 正如预期的那样。现在的问题是,当我尝试调用这个拟合的新网络时,原来的创建模型函数不能接受保存的模型权重,因为层架构根本不合适。

因此,在不训练新的 dqn 的情况下,我需要找到一种方法来创建一个网络架构,该架构是在原始架构的基础上创建的,但会应用 dqn 模型更改。

0 投票
1 回答
121 浏览

tensorflow - 观察中的深度强化学习运动

我正在尝试为自动驾驶车辆实施 DRL(深度强化学习)代理。我目前正在使用一个简单的摄像头教我的代理人不要撞到其他汽车。有很多方法可以加快训练速度,但目前,我专注于在我的观察中添加运动感

互联网上的每个人(包括谷歌关于 Atari 游戏的文章)都提到,为了在观察中添加运动是捕获 3-4 帧,而不是 1 帧并将它们作为一个观察值馈送到 QNetwork。但是,这在使用相机数据时不太实用,因为它需要大量的计算能力来训练代理。例如:

假设您使用分辨率为 256x256 的灰度相机,我们使用一个简单的统一回放内存,最多可容纳 20000 个观测值。那么,存储在内存中的像素数为:

此外,假设您使用 64 个观察的批量大小来为代理提供数据,该代理在第一层包含 32 个过滤器的 CNN,那么您需要:

这是一个疯狂的数据量,需要代理处理 1 个简单的灰度相机,只是为了增加运动感。

我正在考虑另一种添加运动感的方法,但是,我在互联网上找不到任何关于它的信息。既然我们已经知道了车辆的速度,那么我们可以给代理喂食:

  • 1 包含相机数据的帧。
  • 1帧在图像中心包含车辆速度的归一化值(例如在图像中心保留一个32x32窗口,其中包含车辆的归一化速度(0.0-1.0),其余像素的值为0。

这样,我们将数据的大小减少了一半。你认为这可能是一个好方法吗?

0 投票
1 回答
392 浏览

pytorch - 具有策略和目标网络的 DQN 在 LunarLander 环境中无法正确学习

我正在尝试掌握强化学习的窍门,因此我正在遵循以下指南: pytorch.org/tutorials/

他们实施了 DQN,用计算机视觉解决了 CartPole。基本上,我复制了他们的代码并对其进行了修改,以解决没有计算机视觉的 LunarLander 环境。但我得到了奇怪的结果。该模型似乎正在学习,因为它提高了它的分数(有很多小问题),直到它严重失败并卡住,做奇怪的动作而不是学习。

学习进度图

不同模型的另一个学习进度图

您可以看到两个模型在学习结束时都以相同的方式失败。

我无法弄清楚为什么这个解决方案不起作用。你能看看我的代码,也许能找到并指出错误吗?

全局变量:

学习循环:

优化方法:

模型:

如果有人愿意在本地运行我的代码,请告诉我。我将清理代码并通过 Github 分享。

0 投票
1 回答
198 浏览

python - 如何使用自定义参数保存/加载 tensorflow 2.3.1 序列化模型(DoubleDuelingDQN Agent)?

在学习了几个教程和 Stackoverflow 问题之后,我设法在我的自定义环境中学习了 Double Dueling DQN Agent。

现在我无法使用它的优势()参数保存和加载代理的网络模型。如何保存和加载此类自定义序列化网络?

Python 3.8.5 张量流 2.3.1 Keras 2.4.3

到目前为止,我的方法很简单:

加载保存的模型并继续学习会导致该错误:

AttributeError:“DuelingDeepQNetwork”对象没有属性“优势”

网络:

0 投票
0 回答
84 浏览

python - DQN 不学习

我正在尝试使用 Pytorch 在 CarPole 环境中实现 DQN。我不知道为什么,但是无论我尝试训练代理多久,即使分数普遍增加,它们也只是波动而没有保持高分。该代码来自为 tensorflow 编写的 DQN 教程,该教程运行正常,但是当我尝试转换为 Pytorch 时,它无法学习。这是模型:

...并训练:

如果有人能给我任何建议/建议,将不胜感激!!!现在很迷茫。谢谢!

0 投票
1 回答
306 浏览

javascript - 这种 DQN 算法在 TensorFlowJs 上的实现是如何工作的?

开发人员,

我找到了一堆 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 上做。

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

提前致谢。

编辑:

讨论的代码: 讨论的代码