Почему DQN дает одинаковые значения всем действиям в пространстве действий (2) для всех наблюдений?

У меня есть алгоритм 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 сетевых обновления онлайн.

person MichaelAndroidNewbie    schedule 02.08.2017    source источник


Ответы (1)


Предоставление положительной награды в размере 0,1 на каждом шаге, пока игра не закончена, может сделать игру более -1 наказание практически несущественным. Особенно учитывая коэффициент скидки, который вы используете.

Трудно судить, не глядя на исходный код, но сначала я бы посоветовал вам предоставить только отрицательное вознаграждение в конце игры и удалить положительные награды.

person Juan Leni    schedule 02.08.2017
comment
Спасибо за ваш ответ. Я понимаю, что в конечном итоге это может стать большой проблемой, и ваше предложение может решить проблемы в дальнейшем (с точки зрения обучения). Но на данный момент алгоритм имеет тенденцию выполнять только около 12 действий за эпизод (не более 30). Сами значения Q довольно сбивают с толку, учитывая функцию вознаграждения; они обычно находятся в диапазоне -1,8 ‹q_values‹ -1. Я не понимаю, как значение могло когда-либо стать меньше -1 с учетом функции вознаграждения, но, возможно, это ключ к разгадке проблемы. - person MichaelAndroidNewbie; 03.08.2017
comment
Я мог бы очистить и загрузить свой код в общедоступный репозиторий github или вставить все это в свой вопрос, если вы хотите посмотреть, но это около 250 строк кода - person MichaelAndroidNewbie; 03.08.2017
comment
При обновлении значения Q вы загружаетесь и используете оценку нейронной сети. В самом начале значения, генерируемые сетью, могут быть намного меньше -1. Может пройти некоторое время, прежде чем сеть предоставит правильные оценки. - person Juan Leni; 03.08.2017
comment
Но потери настолько малы, что, по крайней мере, в моем понимании, сеть узнала значения этих конкретных состояний, но они являются ошибочными значениями. Я должен упомянуть, что алгоритм был запущен с разными настройками (воспроизведение опыта, функция потерь и т. Д.) На двух разных машинах за ночь и выполнил около 80000 действий каждый (я понимаю, что изучение хорошей политики может занять гораздо больше времени, чем это, но, тем не менее, это сбивает с толку). - person MichaelAndroidNewbie; 03.08.2017