У меня есть алгоритм DQN, который обучается (потери сходятся к 0), но, к сожалению, он изучает функцию значения Q, так что оба значения Q для каждого из 2 возможных действий очень похожи. Стоит отметить, что значения Q меняются очень незначительно при каждом наблюдении.
Подробности:
Алгоритм воспроизводит CartPole-v1 из OpenAI Gym, но в качестве наблюдения использует пиксели экрана, а не 4 предоставленных значения.
Функция вознаграждения, которую я предоставил, обеспечивает вознаграждение в размере: 0,1, если игра не окончена, и -1, если игра окончена.
Скорость затухания (гамма) 0,95
epsilon равен 1 для первых 3200 действий (для заполнения некоторой части памяти воспроизведения), а затем отожжен более 100000 шагов до значения 0,01
память воспроизведения имеет размер 10,000
Архитектура конвенционной сети:
- input layer of size screen_pixels
- Слой свёртки 1 с 32 фильтрами с ядром (8,8) и шагом (4,4), функцией активации relu и дополнен таким же размером на выходе, что и на входе
- Слой свертки 2 с 64 фильтрами с ядром (4,4) и шагом (2,2), функцией активации relu и дополнен, чтобы на выходе иметь тот же размер, что и на входе
- Слой свертки 3 с 64 фильтрами с ядром (3,3) и шагом (1,1), функцией активации relu и дополнен, чтобы на выходе иметь тот же размер, что и на входе
- сглаживающий слой (это необходимо для изменения формы данных, чтобы они могли затем передаваться на полностью связанный слой)
- Полностью связанный слой с 512 узлами и функцией активации relu
- Выходной полностью связанный слой с 2 узлами (пространство действий)
- Скорость обучения сверточной нейронной сети составляет 0,0001.
- Код был разработан в keras и использует воспроизведение опыта и двойное глубокое обучение.
- Исходное изображение уменьшается с (400, 600, 3) до (60, 84, 4) путем масштабирования серого, изменения размера, кадрирования и последующего объединения 4 изображений вместе перед передачей их в сверточную сеть.
- Целевая сеть обновляется каждые 2 сетевых обновления онлайн.