Отладка модели обучения с подкреплением (MsPacman) - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в RL и пытаюсь обучить агента RL играть в MsPacman в PyTorch. Я адаптировал код из этого учебника на странице PyTorch для своей проблемы. 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)
)

Я использую метод субъект (политика) и c (цель) с памятью воспроизведения, который имеет следующие параметры:

  • Буфер воспроизведения : 100000
  • Целевое обновление : каждые 10000 шагов
  • Размер ванны : 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

После 4000 эпизодов агент не т действительно прогрессирует и застревает в углах, как показано ниже:

enter image description here

enter image description here

Любая идея, что может быть проблема? Несколько советов и указателей были бы чрезвычайно полезны.

1 Ответ

0 голосов
/ 20 июня 2020

Было бы интересно увидеть награды за эпизод, так как это то, для чего агент оптимизирует. Агент с самого начала застревает в углах? Если это так, я бы предположил, что жадная политика epsilon (которая вначале в значительной степени является чистой случайностью) не реализована должным образом. Я предполагаю, что агент получает вознаграждение за поедание точек, поэтому он должен быть мотивирован к перемещению. ваш агент вообще чему-нибудь учится.

...