标签: reinforcement-learning

如何摆脱“粘性”状态?

问题:

我已经训练了一个代理在网格世界中执行一个简单的任务(在不碰到障碍物的情况下到达网格的顶部),但是似乎总是会发生以下情况。它发现自己处于状态空间的一个简单部分(没有障碍物),因此不断收到强烈的正强化信号。然后,当它发现自己是状态空间的困难部分(楔在两个障碍物旁边)时,它只是选择与以前相同的动作,但没有任何效果(它上升并击中障碍物)。最终,这个值的 Q 值与负奖励相匹配,但此时其他动作的 Q 值甚至更低,因为在状态空间的简单部分无用,因此误差信号降为零,错误动作仍然总是选择了。

我怎样才能防止这种情况发生?我想到了一些解决方案,但似乎都不可行:

  • 使用总是探索重的策略。由于障碍物需要大约 5 个动作才能绕过,因此不时进行单个随机动作似乎无效。
  • 使奖励函数使重复出现的不良行为变得更糟。这使得奖励函数破坏了马尔可夫性质。也许这不是一件坏事,但我根本不知道。
  • 仅奖励代理完成任务。任务需要一千多个动作才能完成,所以训练信号太弱了。

任务的一些背景:

因此,我为尝试 RL 算法制作了一个小测试平台——类似于 Sutton 书中描述的网格世界的更复杂版本。世界是一个大的二进制网格(300 x 1000),在 0 的背景下以随机大小的矩形形式填充 1。一个 1 的带环绕着世界的边缘。

一个代理在这个世界上占据一个空间,周围只有一个固定的窗口(41 x 41 窗口,代理在中心)。代理的动作包括在四个主要方向中的任何一个方向上移动 1 个空间。代理只能通过标记为 0 的空间,1 是不能通过的。

当前要在此环境中执行的任务是从底部的随机位置开始,使其到达网格世界的顶部。成功向上移动将获得 +1 奖励。任何会撞到障碍物或世界边缘的移动都会给予 -1 的奖励。所有其他状态的奖励为 0。

代理使用带有神经净值函数逼近器的基本 SARSA 算法(如 Sutton 书中所述)。对于政策决策,我尝试了 e-greedy 和 softmax。

machine-learning reinforcement-learning neural-network

5
推荐指数
1
解决办法
1293
查看次数

平均奖励问题的 SARSA 算法

我的问题是关于在强化学习中使用 SARSA 算法来解决一个未折现的、持续的(非情节)问题(它可以用于这样的问题吗?)

我一直在研究 Sutton 和 Barto 的教科书,他们展示了如何修改 Q-learning 算法,以便它可以用于解决未打折扣的问题。他们在第 6.7 章中将新算法(用于未折现的问题)称为 R-learning。基本上,在 R-learning 中,每次迭代 Q(s,a) 的更新规则是:

Q(s,a) = Q(s,a) + alpha * [r - rho + max_a{Q(s',a)} - Q(s,a)]

在这里,只有在状态 s 选择贪婪动作时,才会在每次迭代中更新 rho。rho 的更新规则是:

rho = rho + beta * [r - rho + max_a{Q(s',a)} - max_a{Q(s,a)}]

(这里,alpha 和 beta 是学习参数。)现在,我的问题是关于 SARSA,而不是 Q-learning。我想修改 SARSA 算法,使其适用于平均奖励(未折扣)问题,就像修改 Q-learning 以用于平均奖励问题一样(我不知道这是否可能?) . 然而,在文献中我找不到关于如何针对平均奖励问题修改 SARSA 的确切解释。

以下是我对 SARSA 应如何用于未贴现问题的猜测。我猜更新规则应该是:

Q(s,a) = Q(s,a) + alpha * [r - rho + Q(s',a') - Q(s,a)], …

artificial-intelligence reinforcement-learning q-learning

5
推荐指数
1
解决办法
1026
查看次数

Q-Learning 收敛到最优策略

我正在使用基于 rlglue 的python-rl框架进行 q-learning。我的理解是,随着情节的发展,算法会收敛到一个最优策略(这是一个映射,说明在什么状态下采取什么行动)。

问题 1:这是否意味着经过若干集(比如 1000 集或更多)后,我应该基本上得到相同的状态:动作映射?

当我绘制奖励(或平均超过 100 集的奖励)时,我在此链接中得到类似于图 6.13 的图表。

问题 2:如果算法已经收敛到某个策略,为什么奖励会下降?奖励是否有可能发生巨大变化?

问题 3:是否有一些标准方法可以用来比较各种 RL 算法的结果?

reinforcement-learning q-learning

5
推荐指数
1
解决办法
3836
查看次数

model.predict() 和 model.fit() 有什么作用?

我正在学习这个强化学习教程 ,到目前为止它真的很棒,但有人可以解释一下吗

newQ = model.predict(new_state.reshape(1,64), batch_size=1)
Run Code Online (Sandbox Code Playgroud)

model.fit(X_train, y_train, batch_size=batchSize, nb_epoch=1, verbose=1)
Run Code Online (Sandbox Code Playgroud)

意思?

至于在什么做的论点bach_sizenb_epochverbose做什么?我知道神经网络,所以用它来解释会很有帮助。

您还可以向我发送一个链接,其中可以找到这些函数的文档。

python reinforcement-learning deep-learning keras

5
推荐指数
1
解决办法
4万
查看次数

张量流中交叉熵计算之前的掩蔽概率

我处于强化学习环境中,我的环境动作空间取决于状态。因此,我在对行为动作进行采样时会经历以下过程:

(1) 为所有可能的动作生成概率对数

(2) 在这些 logits 上计算 softmax

(3) 屏蔽在这种状态下无效的动作(通过乘以一个由 0 和 1 组成的向量),这将一些概率归零

(4) 重新归一化有效动作概率

(5) 来自这个分布的样本

这对于生成动作非常有效。但是,当我需要计算策略梯度更新时遇到了问题。通常执行以下操作:

tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=A)
Run Code Online (Sandbox Code Playgroud)

其中 logits 是概率 logits,A 是采样的动作。但是,由于我执行 softmax执行此屏蔽/重新归一化,因此上面的代码片段在我的情况下不是正确的交叉熵。我想知道是否有一种优雅的方法来处理这种情况。我的理解是,为了数值稳定性,应该始终使用 tensorflow 的交叉熵计算,但是我不确定如何正确地合并这种掩蔽/重整化。

machine-learning reinforcement-learning tensorflow cross-entropy

5
推荐指数
0
解决办法
915
查看次数

为什么 Sutton 的 RL 书中没有 n-step Q-learning 算法?

我想我把事情搞砸了。

我一直认为:
- 1-step TD on-policy = Sarsa
- 1-step TD off-policy = Q-learning

因此我得出结论: - n-step TD on-policy = n-step Sarsa
- n-step TD off-policy = n-step Q-learning

然而,在 Sutton 的书中,他从未介绍过 n-step Q-Learning,但他确实介绍了 n-step off-policy Sarsa。现在我感到很困惑。

有人可以帮我命名吗?

链接到 Sutton 的书(第 149 页的 Off-Policy n-step Sarsa)

reinforcement-learning q-learning sarsa

5
推荐指数
1
解决办法
2416
查看次数

CartPole-v0 的得分恰好为 200

我正在研究 openai 健身房提供的 CartPole-v0。我注意到我的程序从来没有超过 200。在某些时候它停留在 200 并且不会更多。我想知道是否有我在 openai 健身房中遗漏的任何配置。有没有人发现这个问题?

reinforcement-learning openai-gym

5
推荐指数
1
解决办法
1818
查看次数

DDPG(Deep Deterministic Policy Gradients),actor是如何更新的?

我目前正在尝试在 Keras 中实现 DDPG。我知道如何更新评论家网络(普通 DQN 算法),但我目前坚持更新演员网络,它使用等式:

方程

因此,为了将演员网络 wrt 的损失减少到其权重 dJ/dtheta,它使用链式法则来获得 dQ/da(来自评论家网络)* da/dtheta(来自演员网络)。

这看起来不错,但我无法理解如何从这两个网络中推导出梯度。有人可以向我解释这部分吗?

reinforcement-learning keras

5
推荐指数
1
解决办法
2013
查看次数

Gym (openAI) 环境动作空间取决于实际状态

我正在使用 Gym 工具包来创建我自己的 env 和 keras-rl 在代理中使用我的 env。问题是我的行动空间发生了变化,这取决于实际状态。例如,我有 46 种可能的操作,但在特定状态下只有 7 种可用,而且我无法找到对其进行建模的方法。

我读过这个问题open-ai-environment-with-change-action-space-after-each-step

但这并没有解决我的问题。

在 Gym 文档中没有执行此操作的说明,只有他们的 Github 存储库(仍然打开)上的一个问题。我无法理解代理(keras-rl、dqn 代理)如何选择一个动作,它是随机选择的吗?但从哪里来?

有人可以帮助我吗?想法?

reinforcement-learning openai-gym keras-rl

5
推荐指数
1
解决办法
852
查看次数

为什么要打开 openAI 健身房?

我试图在使用 openAI 健身房作为学习环境的同时深入了解强化学习。我通过阅读《使用 Python 进行强化学习》一书来做到这一点。在本书中,提供了一些代码。通常,代码不起作用,因为我必须先解开它,如图所示:openaigym env.P, AttributeError 'TimeLimit' object has no attribute 'P'

但是,我个人仍然对这种展开的原因感兴趣。为什么需要拆开?这究竟是做什么的?为什么在书中没有这样编码?它是 Giuliov 假设的过时软件吗?

提前致谢。

reinforcement-learning python-3.x openai-gym

5
推荐指数
1
解决办法
4363
查看次数