调试强化学习模型(MsPacman)

时间:2020-06-17 22:21:45

标签: python pytorch reinforcement-learning

我是RL的新手,我正在尝试训练RL经纪人在PyTorch中扮演MsPacman。我已经针对我的问题从PyTorch页面上的tutorial中修改了代码。 DQN具有以下架构:

DQN(
  (conv1): Conv2d(1, 32, kernel_size=(8, 8), stride=(4, 4), padding=(2, 2))
  (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (conv2): Conv2d(32, 64, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
  (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (bn3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (linear1): Linear(in_features=7040, out_features=512, bias=True)
  (linear2): Linear(in_features=512, out_features=9, bias=True)
)

我正在使用具有以下设置的具有重播内存的actor(策略)和commentor(目标)方法:

  • 重播缓冲区:100,000
  • 目标更新:每10,000步
  • 浴池大小:128
  • 折扣率:0.999

为了进行权衡,我使用具有以下曲线的epsilon-greedy: enter image description here

其中x轴是步数(百万),y是选择随机动作的概率。

策略网络的更新如下:

# next_state_values = Q-values precited by the target network
# GAMMA = discount rate (0.999)
# reward_batch = rewards for the states
expected_state_action_values = (next_state_values * GAMMA) + reward_batch

损失计算:

# state_action_values = actions taken by the policy agent
# expected_state_action_values - this is calculated above
loss = F.smooth_l1_loss(state_action_values, expected_state_action_values.unsqueeze(1))

更新策略(限制了梯度):

optimiser.zero_grad()
loss.backward()
for param in policy_net.parameters():
    param.grad.data.clamp_(-1, 1)
optimiser.step()

在训练代理人时,我绘制了下面显示的每个情节的持续时间(橙色线显示了前100个情节的平均值):

enter image description here

在4,000集后,代理人并没有真正进步,陷入了如下困境:

enter image description here

enter image description here

任何想法可能是什么问题?一些提示和指示将非常有帮助。

1 个答案:

答案 0 :(得分:0)

看到情节奖励会很有趣,因为这是代理人正在优化的。代理商从一开始就陷入困境吗?如果是这样,我猜想epsilon贪婪策略(开始时几乎是纯随机的)没有正确实施。我认为代理人会因为吃点而获得奖励,因此应该积极地走动。

尝试一个纯粹的随机代理,看看它是如何进行的,您可以将其绘制为基线,以告诉您代理是否在学习任何东西。