【发布时间】: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 动作。这意味着梯度消失并且策略永远不会恢复。
我的尝试:
- 只在游戏开始时进行随机动作(采取越来越贪婪的动作来遵循策略)。您可以在笔记本中摆弄它。
- 我只奖励了一个动作,只是为了向自己证明它学会了只玩那个动作。确实如此,所以我想我可以排除任何 PyTorch 特定的实现错误。
- 对损失引入熵惩罚以阻止对行动的高度信心。
我的理解是,这不应该是显式引入随机动作的必要条件,因为action = categorical.sample() 会这样做。如果一项行动变得占主导地位,但没有带来回报,那么它应该随后被劝阻。
我的想法是我的训练批次有偏差,因此采取行动<RIGHT> 会导致每集的奖励多于惩罚,因此这种可能性不断增加。我原以为在游戏开始时采取完全随机的动作,然后慢慢开始听政策就可以解决这个问题,但在我的实验中,它没有。
我真的很困惑为什么这不起作用。非常感谢任何可以提供帮助的人。我昨天尝试用 RL 的博士学位调试了 5 个小时,但没有任何进展。
额外问题:
- 是否经常玩例如? 1000 个 rollout,然后从这个 rollout 缓冲区中随机抽样一批来学习?我对策略梯度的理解是,策略在每一集之后都会更新。
- 我认为在策略梯度中,您仅通过从中选择动作的神经元进行反向传播,但梯度通过 softmax 分布到所有网络权重,我是否正确?
【问题讨论】:
标签: machine-learning deep-learning conv-neural-network pytorch reinforcement-learning