问题标签 [policy-gradient-descent]

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 回答
78 浏览

python - DDPG Actor 更新(Pytorch 实现问题)

这是来自https://github.com/MoritzTaylor/ddpg-pytorch/blob/master/ddpg.py实现,我猜大多数 ddpg 实现都是这样写的。

然而,在 policy_loss.backwad() 之后,我认为相对于评论家参数,梯度留在评论家网络中。这不应该影响评论家的下一次更新吗?

如果是这样,可能的解决方案是什么?

0 投票
0 回答
28 浏览

tensorflow - keras 中的一次反向传播

我想训练一个基于策略梯度方法的神经网络。训练涉及找到用户定义损失的梯度(一次反向传播)。我知道渐变是在编译过程中自动完成的,如下所示

但是,此代码通过 NN 进行了多次向前和向后传递。我正在寻找的是单一的反向传播。我的问题是是否可以在 keras 中进行一次反向传播,或者我需要在 Pytorch 或 tensorflow 中进行。

0 投票
0 回答
43 浏览

tensorflow - ValueError:没有为actor-critic网络中的任何变量提供梯度

我已经使用 TF2 构建了一个演员评论家网络。我在以下代码部分中不断收到错误消息:

该错误actor_grad专门[None, None, None, None, None, None]针对actor_grad. 当我使用该mapp_raw_batch_actions函数将参与者网络中的原始操作映射到策略中的合法操作时,会出现此错误。但是,当我没有将参与者的原始行为映射到法律行为时,我不会遇到这个错误,但它会影响我的最终结果。任何人都知道如何解决这个问题?

PS我的法律行动比演员网络的原始行动要大得多。我的原始动作是由tanh.

0 投票
0 回答
42 浏览

reinforcement-learning - 策略梯度强化学习中的动作概率分布

这些天我正在学习策略梯度 RL 算法。我很好奇策略梯度RL算法中如何选择动作概率分布。例如,我们可以使用正态分布对动作进行采样,但为什么我们使用正态分布而不是其他类型的分布呢?

0 投票
0 回答
75 浏览

python - 如何为 REINFORCE 算法的多维连续动作空间采样动作

因此,我正在处理的问题可以总结如下:

  1. 观察空间是一个 8x1 向量,都是连续值。其中一些在 [-inf, inf] 范围内,一些在 [-360, 360] 范围内。

  2. 动作空间是一个 4x1 向量。所有值都在 [-1, 1] 范围内。

  3. 目前,我正在尝试使用策略梯度算法,特别是 REINFORCE 算法来解决它。

  4. 由于动作空间是连续的,在输出层我得到了 4 mu 和 4 sigma 的值,我将它们用作正态分布的参数来对动作进行采样。

  5. 使用神经网络作为函数逼近器和 NN 架构是:

    • 输入层:8个神经元
    • 隐藏层 1:256 个具有 ReLU 激活的神经元
    • 隐藏层 2:具有 ReLU 激活的 256 个神经元
    • 输出层:8个神经元
    • 没有激活函数的 mu 有 4 个神经元,因此可以取 [-inf, inf] 范围内的任何值。但是,稍后在对动作进行采样后,我将它们的值剪辑在 [-1, 1] 之间。用于 sigma 的 4 个神经元,激活 ELU +0.001,以将标准偏差值保持在 [0.001, inf] 范围内。
  6. 我的奖励功能是在一个情节中,

    • 在代理处于某个目标区域内的每个时间步长上,它都会获得 +6000 奖励
    • 每次不在区域内的时间步都会得到 -20
    • 在剧集结束时,如果它不在目标区域内,它会得到 -20000
    • 如果它在剧集中进入 BAD 状态,它将获得 -100000 奖励并且剧集立即结束。
  7. 损失函数是:

    • loss = - log_prob(action) * R
  8. 解决方案似乎没有收敛,因为平均值不断增加并且 sigma 值停留在 0.001(这是它们的最小可能值)。我想问的问题是:

    • 我对动作进行采样的方式是否正确?
    • 损失函数看起来对吗?
    • 我是否也应该在输入层使用 ReLU 激活(虽然这对我来说听起来不对,但是,在我看到的一些 PPO 算法的实现中,人们也在输入端使用 ReLU)
  9. 如果需要指出问题,我也可以共享代码。

  10. 也欢迎任何其他建议。

编辑:顺便说一句,我为这个问题编写了自己的健身房环境,这就是为什么您可能会注意到我的代码与用于解决 OpenAI 健身房相关问题的典型 RL 代码之间存在一些不一致的原因。运行 num_episodes 的主循环是:

py.train_net()如下_

0 投票
0 回答
13 浏览

keras - 在 ACTION SPACE 中使用熵调试策略梯度

我正在训练一个策略梯度,一个使用 keras 的深度模型。在DeepRLHacks之后,我Entropy在行动空间中使用以观察策略的行为。但是,我对熵的实现和观察结果有疑问。

我目前的策略是一个简单的 FCNN,如下所示:

该策略在当前状态下提供了下一个可能的操作,如下所示:

熵图如下所示:

在此处输入图像描述

基于DeepRLHacks

一个。如果熵没有下降,那么策略就不好,因为它真的是随机的 ->It looks like the entropy in my case is good enough to pass this one.

湾。如果熵下降得太快,那么策略就会变得确定性并且不会探索。->The entropy in my case is going to zero after 150 episodes. Is it too fast?

另外,ACTION SPACE 中熵的计算是否就在上面?任何建议/指南将不胜感激。

0 投票
0 回答
24 浏览

deep-learning - 如何反向传播已保存的经验

我正在尝试为 A2C 算法创建一个内存缓冲区,可以在https://github.com/raillab/a2c上看到。缓冲区应该可以保存多次迭代的经验,并在之后使用这些进行反向传播。我当前的实现可以在这里看到: https : //gist.github.com/sava17/0229a2eeca9f289c244b50f6653e8937 内存的保存发生在第 209 行:

当前的实现将记忆(状态、奖励、掩码、next_state、log_probs 和熵)保存在我保存在列表中的对象中。当前实现在第二次通过反向传播时给出以下错误:

如果模型只将当前观察作为输入,而不是保存的记忆,则不会发生此错误。我怀疑该错误是由于在尝试再次对它们进行反向传播时从 log_prob 和熵中删除梯度和熵而导致的。当内存被保存并需要从缓冲区中下次使用时,它会尝试在获取的具有空梯度的内存上反向传播。

由于这个理论,我测试了两种选择。

  1. 从内存中删除 log_prob 和熵,并使用从内存中获取观察值的模型计算它们。这个实现可以运行,因为只有 log_prob 和 entropy 具有渐变的火炬。但是,在此更改之后,该模型无法再在其训练示例(Atari Breakout)上获得任何好的结果。
  2. 在将 log_prob 和熵附加到内存对象之前,将它们包装在 Variable 类中。这也可以运行。我怀疑这是由于制作了两个火炬及其渐变的新副本,而不是保存参考。然而,这也导致模型不再收敛。我怀疑这是由于复制了实际上具有渐变和图形的两个元素。我怀疑我们丢失了他们反向传播到的图,这可能是我们想要训练的模型,因为 log_prob 和 entropy 来自调用模型上的 entropy() 和 log_prob()。
0 投票
0 回答
45 浏览

python - OpenAI-gym:FrozenLake-v0 未使用 REINFORCE 进行训练

我正在为 openAI 的 FrozenLake-v0 环境实现一个简单的 REINFORCE(策略梯度)算法。然而,它似乎并没有学到任何东西。

我为 openAI 的 CartPole-v0 使用了相同的神经架构,并使用 REINFORCE(策略梯度)对其进行了训练,并且效果很好。那么,我在 FrozenLake-v0 环境中做错了什么?

我的代码如下:

0 投票
0 回答
71 浏览

pytorch - 加强 Cartpole:训练不稳定

我正在为 Cartpole-V0 实施 REINFORCE。但是,训练过程非常不稳定。我没有对环境实施“提前停止”,并允许训练继续进行固定(高)数量的剧集。经过几千次迭代后,训练奖励似乎又下降了。这是由于过度拟合和提前停止是必不可少的,还是我执行不正确?

这是我的代码:

0 投票
1 回答
140 浏览

python - Cartpole-v0 的 PyTorch PPO 实现陷入局部最优

我已经为 Cartpole-VO 环境实施了 PPO。但是,它不会在游戏的某些迭代中收敛。有时它会陷入局部最优。我已经使用 TD-0 优势实现了算法,即

A(s_t) = R(t+1) + \gamma V(S_{t+1}) - V(S_t)

这是我的代码:

考虑到 Cartpole 环境的性质,我是否遗漏了什么,或者如果一个人使用简单的 TD-0 优势来实现 PPO,这种行为是预期的吗?