问题标签 [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.
machine-learning - 使用强化学习训练 Snake 以特定步数吃食物
这些天我正在尝试强化/深度 Q 学习。我从一个基本的“蛇”游戏开始。在这篇文章的帮助下:https : //towardsdatascience.com/how-to-teach-an-ai-to-play-games-deep-reinforcement-learning-28f9b920440a 我成功地训练了吃食物。现在我希望它以特定的步数吃食物,说“20”,不要多,不要少。奖励制度和政策将如何改变?我尝试了很多事情,几乎没有结果。例如我试过这个:
谢谢你。这是程序: https ://github.com/maurock/snake-ga
machine-learning - 我的 DDQN 网络是否正确实施?
这是我的重播/训练功能实现。我制作了 DDQN,以便在回放/训练期间model
落后model2
1 个批量大小。通过设置self.ddqn = False
它成为一个正常的 DQN。这是否正确实施?我使用这篇论文作为参考:
http://papers.nips.cc/paper/3964-double-q-learning.pdf
DDQN 代码
python - q 代理正在学习不采取任何行动
我正在训练一个深度 q 网络来交易股票;它有两种可能的动作;0:等待,1:没买就买,买了就卖。作为输入,它获取所购买股票的价值、股票的当前价值以及与股票相关的前 5 个时间步长的股票价值。所以像
奖励只是销售价格和购买价格之间的差额。任何其他动作的奖励都是 0,尽管我尝试过让它为负数或其他没有结果的东西。
很简单,对吧?不幸的是,代理总是收敛于采取“0”行动。即使我放大了以盈利或任何数量出售的回报。我真的把头发拉出来了,我错过了什么明显的东西吗?
python - dqn 状态值是否应该仅为 0 到 1
如果 DQN 中的状态值只需要为 0 到 1,例如 state = [0, 0, 0, 1, 1, 1, 1, 0, 1, 0]
或者它的状态值大于 1 eh state = [6, 5, 4, 1, 1, 1, 2, 3, 15, 10]
deep-learning - 是否可以删除最古老的 DQN 体验
我创建了一个最大内存大小为 100000 的 DQN。如果它的大小大于最大大小,我有一个函数可以删除内存中最旧的元素。当我运行 200 集时,我注意到在第 125 集时内存已经满了。我的 DQN 可以删除剩余剧集的最旧体验吗?
python - PyTorch 模型训练:RuntimeError:cuDNN 错误:CUDNN_STATUS_INTERNAL_ERROR
在 GPU 上训练 PyTorch 模型几个小时后,程序失败并出现错误
RuntimeError:cuDNN 错误:CUDNN_STATUS_INTERNAL_ERROR
培训条件
nn.LSTM
神经网络: PyTorch 4 层nn.Linear
输出- Deep Q 网络代理(带有重放内存的 Vanilla DQN)
state
传入forward()
具有形状(32, 20, 15)
,32
批量大小在哪里- 每集 50 秒
- 错误发生在大约 583 集(8 小时)或 1,150,000 步之后,其中每一步都涉及通过 LSTM 模型的前向传递。
我的代码在训练开始之前还设置了以下值
我们如何解决这个问题?由于这发生在培训的 8 小时内,因此一些有根据的猜测在这里会非常有帮助!
谢谢!
更新:
注释掉这两torch.backends.cudnn...
行没有用。CUDNN_STATUS_INTERNAL_ERROR
仍然会发生,但要早得多,大约在第 300 集(585,000 步)左右。
系统
- PyTorch 1.6.0.dev20200525
- CUDA 10.2
- cuDNN 7604
- 蟒蛇 3.8
- 视窗 10
- 英伟达 1080 GPU
错误回溯
更新:try... except
在我的代码上尝试了发生此错误的位置,除此之外RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
,我们还获得了该错误的第二次回溯RuntimeError: CUDA error: unspecified launch failure
reinforcement-learning - 随机环境的优先体验重放
我尝试使用以下论文来改进我的代理的学习https://arxiv.org/pdf/1511.05952.pdf
虽然它似乎在确定性环境中工作得很好,但我觉得它实际上会使它在随机环境中变得更糟。
假设对于状态 S_w 的动作 A_w,我们有 50% 的机会获得 +1000000 的奖励和 50% 的机会获得 -1000000 的奖励(在其他状态下可以忽略不计的确定性奖励)。因此,该动作的真实 Q 值将是 0。
在对任何一个可能的样本进行训练时(假设这两种情况都在回放内存中),这些样本的优先级将设置为 1000000,因此为即将到来的更新选择这些样本的概率将趋于 1(它们中的每一个如果我们不将新样本添加到重放内存中,则在 0 和 1 之间振荡。
因此,其他样本将永远不会被训练。
我的问题是:我们如何处理它?我应该在这样的环境中简单地放弃使用这种技术吗?
reinforcement-learning - 学习率衰减到累积奖励?
在深度强化学习中,有没有办法将学习率衰减为累积奖励。我的意思是,当智能体能够学习并最大化奖励时,学习率会衰减?
python - DQN 在验证模式下表现不佳
我做了一个 DQN 来学习井字游戏。到目前为止,我让代理玩所有的动作,以查看它是否学会总是做出合法的动作,从而导致一个或另一个玩家的平局或获胜。在对网络进行了大约 10.000 场比赛后,它能够在大约 30% 到 40% 的比赛中取得平局或胜利。
之后,我想在评估模式下测试网络。不幸的是,它的表现比只有大约 1% 的平局或获胜要差得多。训练和测试的代码如下所示:
唯一改变的是两行:
代理类如下所示:
谁能解释我为什么会这样?谢谢您的帮助!
附加信息:
事实证明,网络总是为它获得的任何状态计算相同的 q 值,所以基本上是以下行:
即使对于不同的状态观察,也总是给出相同的 q 值。例如:
第一行表示传递给 forward 方法的输入状态,第二行是可能动作的相应 qvalues。
deep-learning - 深度 Q 学习代理找到解决方案然后再次发散
我正在尝试训练 DQN 代理来解决 AI Gym 的 Cartpole-v0 环境。我从这个人的实现开始只是为了获得一些实践经验。我注意到的是,在训练过程中,经过多次训练后,智能体找到了解决方案,并且能够在最大时间步长内保持杆直立。然而,经过进一步的训练,该策略看起来变得更加随机,并且它不能再保持杆子直立并且进出一个好的策略。我对此感到很困惑,为什么进一步的培训和经验不能帮助代理?在剧集中,我对随机动作的 epsilon 变得非常低,所以它应该在进行下一个预测时运行。那么,为什么它在某些训练集未能保持杆子直立而在其他训练集成功呢?
这是我在上述链接实现的训练过程中的奖励-情节曲线的图片。