【问题标题】:Simple policy gradients (REINFORCE) overfits one action when playing Atari Breakout玩 Atari Breakout 时,简单的策略梯度 (REINFORCE) 会过度拟合一个动作
【发布时间】:2020-03-16 06:37:25
【问题描述】:

自包含代码: https://colab.research.google.com/drive/1HYEXMpicymPUySkhGOaCJdJ3pN4RzXYd

问题:我正在尝试使用 CNN 从像素播放 Atari 突破(Breakout-V0 OpenAI 健身房)。我正在尝试使用在 PyTorch 中实现的简单策略梯度算法来执行此操作。这个游戏有四种可能的动作[<NO-OP>, <FIRE> (play), <LEFT>, <RIGHT>]

预期结果:我希望策略学会以大致相等的概率玩<NO-OP>, <LEFT>, <RIGHT>,并且只在游戏的第一帧玩<FIRE>

实际结果:在大约 4 次权重更新后,网络以接近 100% 的概率预测 ONE 动作。这意味着梯度消失并且策略永远不会恢复。

我的尝试:

  1. 只在游戏开始时进行随机动作(采取越来越贪婪的动作来遵循策略)。您可以在笔记本中摆弄它。
  2. 我只奖励了一个动作,只是为了向自己证明它学会了只玩那个动作。确实如此,所以我想我可以排除任何 PyTorch 特定的实现错误。
  3. 对损失引入熵惩罚以阻止对行动的高度信心。

我的理解是,这不应该是显式引入随机动作的必要条件,因为action = categorical.sample() 会这样做。如果一项行动变得占主导地位,但没有带来回报,那么它应该随后被劝阻。

我的想法是我的训练批次有偏差,因此采取行动<RIGHT> 会导致每集的奖励多于惩罚,因此这种可能性不断增加。我原以为在游戏开始时采取完全随机的动作,然后慢慢开始听政策就可以解决这个问题,但在我的实验中,它没有。

我真的很困惑为什么这不起作用。非常感谢任何可以提供帮助的人。我昨天尝试用 RL 的博士学位调试了 5 个小时,但没有任何进展。

额外问题

  1. 是否经常玩例如? 1000 个 rollout,然后从这个 rollout 缓冲区中随机抽样一批来学习?我对策略梯度的理解是,策略在每一集之后都会更新。
  2. 我认为在策略梯度中,您仅通过从中选择动作的神经元进行反向传播,但梯度通过 softmax 分布到所有网络权重,我是否正确?

【问题讨论】:

    标签: machine-learning deep-learning conv-neural-network pytorch reinforcement-learning


    【解决方案1】:

    我们在使用 VPG(Vanilla Policy Gradient)训练​​ Breakout 时遇到了类似的问题。解决方案是在以下情况下强制熵损失

    • Entropy loss 超过策略模型输出(惩罚选择具有高可能性的特定操作)
    • Scaling the MSE 在奖励和价值函数之间

    不确定您是否知道这一点,但请使用 Deepmind 的 Atari wrapper

    Q 1 : 经常玩吗? 1000 个 rollout,然后从这个 rollout 缓冲区中随机抽样一批来学习?我对策略梯度的理解是,策略在每一集之后都会更新。

    A 1:在实践中,最好在 single batch. 中批量处理多个剧集

    问题 2:我认为在策略梯度中,您仅通过从中选择动作的神经元进行反向传播,但梯度通过 softmax 分布到所有网络权重,我是否正确?

    A 2 :基于预期的奖励,选择特定行动的可能性被抑制或鼓励,并且模型作为此信息的背景

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 2017-03-19
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多