强化学习代理政策不会更新

时间:2020-05-18 10:57:49

标签: python machine-learning deep-learning reinforcement-learning ray

我目前正在使用Ray在连续的环境中训练深度强化学习模型。

我正在使用的环境是由另一个人在OpenAI Gym中使用基线进行编码的,我正在研究该人试图在Ray中进行复制,以便可以将其并行化。尽管我无法复制此模型,但该模型在数千次发作后收敛于基线的大约5%时间。

我的问题是,AI停止非常快速地更改其策略,然后在其余的运行中平均收益保持大致相同。这与我尝试更改的每个参数无关。到目前为止,我已经尝试更改:

  • 学习算法:我使用过PPO,A3C和DDPG
  • 学习率:我已经完成了从1e-6到10的超参数扫描
  • 片段长度:我在complete_episodes中使用了truncated_episodesbatch_mode。我使用了rollout_fragment_length,并确保train_batch_size始终等于rollout_fragment_length乘以工人人数
  • entropy_coeff在A3C中
  • PLI中的
  • kl_targetkl_coeffsgd_minibatch_size
  • 网络体系结构:我已经尝试了广泛和深入的网络。默认的Ray网络是2x256层。我尝试将其更改为4x2048和10x64。成功的基准网络是8x64。
  • 更改激活功能:ReLU返回NaN,但是tanh允许程序运行
  • 增加L2损耗以防止连接权重爆炸。这样可以在一定的时间后阻止tanh激活返回NaN(学习率越高,返回到NaN的速度越快)
  • 规范化:我将返回给代理的状态从0规范化为1。动作没有被规范化,因为它们都从-6变为6。
  • 按比例分配奖励:Ive的奖励范围为1e-5至1e5。这对代理的行为没有影响。
  • 更改奖励功能
  • 使工作更轻松(条件更宽松)

注意:我正在docker映像中运行此程序,并已验证这是在另一台计算机上发生的,因此这不是硬件问题。

以下是我认为可能相互关联的危险信号的列表:

  • 使用ReLU时,我本来会得到NaN(Ray返回了NaN动作),但将激活功能切换为tanh。
  • 当我包含L2损失时,PPO中的KL发散系数cur_kl_coeff几乎立即变为零。据我了解,这意味着在最初的几次迭代之后,该模型并未进行有意义的权重更改。 enter image description here

但是,当损失仅仅是保单损失时,cur_kl_coeff通常会发生变化。

  • 平均而言,损失基本不变,也从未收敛 enter image description here

  • 奖励基本不变reward_mean总是收敛到大致相同的值。即使reward_mean由于随机权重初始化而开始高于平均水平或最初增加至高于平均水平时,也会发生这种情况。 Here, mean iteration reward starts around average but quickly increases in the first few iterations before falling back. This may look like coincidence on this graph but I have observed the phenomenon countless times.

注意:这不是代理商找不到更好的途径或奖励功能不重视良好行动的问题。

Note that the max reward is an order of magnitude higher than the mean reward

缩小显示平均奖励为何达到峰值。该特工的表现惊人,但无法重现成功。

enter image description here

而且,我不能对此施加太大压力,这不是我没有让代理运行足够长时间的问题。我已经在数十次运行中观察到了相同的行为,并且累积了数万次迭代。我知道模型可能需要很长时间才能收敛,但是模型始终会取得的进展。

tldr; 尽管在某些跑步中获得了很高的回报,但我的模型并没有以任何有意义的方式改变其政策。

0 个答案:

没有答案
相关问题