Я нахожусь в процессе реализации модели DQN с нуля в PyTorch с целевой средой Atari Pong.После некоторой настройки гиперпараметров я не могу заставить модель достичь производительности, о которой сообщается в большинстве публикаций (награда ~ +21; это означает, что агент выигрывает почти каждый залп).
Мои самые последние результаты показаны на следующем рисунке.Обратите внимание, что ось X - это эпизоды (полных игр до 21), но общее количество итераций обучения составляет ~ 6,7 млн.
Особенности моей настройкиследующие:
Модель
class DQN(nn.Module):
def __init__(self, in_channels, outputs):
super(DQN, self).__init__()
self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=8, stride=4)
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=4, stride=2)
self.conv3 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1)
self.fc1 = nn.Linear(in_features=64*7*7 , out_features=512)
self.fc2 = nn.Linear(in_features=512, out_features=outputs)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.relu(self.conv3(x))
x = x.view(-1, 64 * 7 * 7)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x # return Q values of each action
Гиперпараметры
- Размер пакета: 32
- Объем памяти воспроизведения: 100000
- начальный эпсилон: 1,0
- эпсилон отжигается линейно до 0,02 на 100000 шагов
- случайные эпизоды горячего старта: ~ 50000
- обновлять целевую модель каждые: 1000 шагов
- optimizer = optim.RMSprop (policy_net.parameters (), lr = 0,0025, альфа = 0,9, eps = 1e-02, импульс = 0,0)
Дополнительная информация
- Окружающая среда OpenAI Pong-v0
- Загрузка стеков моделей из 4 последних наблюдаемых кадров, масштабированных и обрезанных до 84x84 таким образом, что видна только «игровая зона».
- Лечить потерю залпа (конецof-life) как состояние терминала в буфере воспроизведения.
- Использование smooth_l1_loss , которое действует как потеря Хьюбера
- Обрезание градиентов от -1 до 1 перед оптимизацией
- Я смещал начало каждого эпизода с 4-30 шагами без операции, как написано в документах
Есть кто-нибудьбыл подобный опыт застрять около 6 - 9 в среднем награду за эпизод, как это?
Будем весьма благодарны за любые предложения по изменению гиперпараметров или нюансов алгоритмов!