Глубокое обучение с подкреплением - среднее значение Q как показатель оценки

Aug 18 2020

Я настраиваю модель глубокого обучения для учащегося игры Space Invaders (изображение ниже). Состояние определяется как относительное эвклидово расстояние между игроком и врагами + относительное расстояние между игроком и 6 ближайшими вражескими лазерами, нормализованное высотой окна (если положение игрока$(x_p,y_p)$ и позиция врага $(x_e,y_e)$, относительное евклидово расстояние равно $\frac{\sqrt{(x_p-x_e)^2+(y_p-y_e)^2}}{HEIGHT}$HEIGHT - высота окна). Следовательно, размерность пространства наблюдения составляет (10 + 6), что приводит к входу моей глубокой нейронной сети из 16 единиц.

Мой агент, похоже, не учится (функция вознаграждения не увеличивается), и я подумал, что проверю средние значения Q, которые являются выходными данными моей основной глубокой нейронной сети, и вместо увеличения я заметил, что средние значения Q не увеличиваются, а стабилизируются (как показано на рисунке ниже). Я изменил многие параметры настройки (размер пакета, архитектура нейронной сети и параметры ...), но у меня все еще есть та же проблема. Есть идеи, почему средние значения Q не увеличиваются?

Вот некоторые результаты об ученике:

Ответы

NeilSlater Aug 20 2020 at 04:35

Я думаю, ваша главная проблема - это использование относительного расстояния в качестве ключевой характеристики. У него два основных недостатка:

  • Расстояние до объекта не определяет его направление. Все варианты лучших действий критически зависят от направления. Например, вражеский лазерный выстрел на 0,1 единицы прямо над игроком представляет собой непосредственную опасность, требующую действий уклонения, в то время как один 0,1 единиц слева или справа не представляет опасности и собирается покинуть игровое окно. Ваша характеристика относительного расстояния не делает различий между этими сценариями, но это критическая разница.

  • Немного менее важно, но чистое расстояние не передает никакого ощущения движения. Если враги движутся последовательно, шаг за шагом, но не всегда в одном и том же направлении или с одинаковой скоростью, то их скорости также должны быть частью состояния.

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

Я думаю, вам следует использовать нормализованный $x, y$положение как функции для каждого отслеживаемого элемента плюс нормализованная скорость$dx, dy$ для любого типа объекта, который может менять направление (если вражеские лазеры всегда падают прямо вниз, вам может ничего не понадобиться).

К тому же:

  • Если края окна важны, вы должны включить хотя бы относительную $x$одного из них, поэтому агент знает свое абсолютное положение на экране и сколько места у него есть для маневра. Это верно независимо от того, заблокирован ли игроку возможность двигаться дальше влево или вправо, или же игрок «оборачивается» на другую сторону экрана. Оба типа эффектов существенно повлияют на ход игры у края экрана.

  • Чтобы отслеживать прогнозируемое значение, вам необходимо отслеживать местоположение ракет игрока. Недостаточно просто позволить агенту предсказать, когда лучше всего выстрелить - для того, чтобы точно отслеживать функцию значения, ему нужно «видеть», может ли ракета, выпущенная им несколько шагов назад, поразить цель или не попасть в цель.

  • Как для вражеских лазеров, так и для ракет игроков можно фильтровать и сортировать данные по некоторым критериям (например, расстоянию до игрока). Пока это согласовано, такая предварительная обработка может даже очень помочь.