NEAT с использованием метода воспроизведения опыта с акцентом на уроках прошлого

NEAT с акцентом на уроках прошлого

После реализации NEAT в Unity несколько недель назад, я попытался подумать о способах улучшения его производительности.

Я помню, что читал о новой технике, используемой в алгоритмах обучения с подкреплением, известной как Hindsight Experience Replay. С помощью этой техники неудачные состояния, которые достигает агент, отслеживаются и изучаются так, как будто они были успешными.

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

Я сразу же приступил к тестированию своих идей.

Тестовая среда

Среда настроена следующим образом:

Источник: Изображение автора

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

Агент выглядит так.

Источник: Изображение автора

На вход агент получает (нормализованные):

Разницу между положением цели и положением агента

Положение агента

Скорость по оси y агента

Находится ли агент на земле и может ли прыгнуть

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

На выходе агент дает:

Один выход для перемещения влево (<0.5) или вправо (>0.5)

Один выход для прыжка или его отсутствия (>0.5)

Настройка

25% каждого поколения создавалось с помощью асексуального размножения. Часть поколения, созданная с помощью скрещивания, имеет 35% шанс мутации. Лучшие два генома в каждом виде оставались неизменными, и существовала 5% вероятность межвидового скрещивания. В начальном поколении было 2000 геномов, чтобы обеспечить популяции достаточное количество членов, способных пройти первую платформу, но последующие поколения имели только 500 геномов. Популяция считается неудачной, если не найден ни один агент, достигающий звезды в течение 500 поколений.

Hindsight Experience Replay потребовало некоторой настройки для работы с NEAT, но в конечном итоге я остановился на такой стратегии:

Выбираются цели/опыт (последняя платформа, на которой был геном, чтобы убедиться, что цели не висят в воздухе) от каждого генома в конце поколения, соответствующие следующим критериям:

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

Цели добавляются в вид каждого генома, чтобы каждый вид имел отдельный список целей.

При создании нового поколения каждому виду назначаются две цели из его списка целей таким образом, чтобы цели с наивысшей успешностью были наименее вероятны для назначения. Обратите внимание, что новые выбранные цели считаются имеющими успешность 0%. Каждое поколение затем оценивается три раза: один раз для реальной цели и два раза для выбранных целей.

Фитнес рассчитывается с помощью следующих двух значений:

(начальное_расстояние – ближайшее_расстояние) / начальное_расстояние

для вознаграждения агента за приближение к цели

(начальное_расстояние – конечное_расстояние) / конечное_расстояние

для вознаграждения агента за нахождение рядом с целью.

Если агент слишком долго находится внизу, он удаляется из симуляции и получает штраф. Это в основном для ускорения оценки.

Для NEAT с HER награда возводится в куб, чтобы усилить разницу между хорошими и плохими решениями. Эти значения могут быть отрицательными, если агент движется в сторону от цели.

Каждому виду даны два начальных образца (представленные синими ромбами), чтобы обеспечить оценку три раза, но впоследствии это было необязательно (извините за ужасную шутку). Источник: Изображение автора

Результаты

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

Стандартный NEAT не может подняться выше

С другой стороны, NEAT с HER показывает хорошие результаты. Он решает задачу с медианой в 149 поколений (Stddev: 90) и не проваливается ни разу, хотя на худший попытке потребовалось 415 поколений. Интересно, что NEAT с HER разворачивался как поиск новшеств: по мере того, как ранние образцы становились реже из-за метода назначения, агенты были вынуждены исследовать новые и труднодоступные области окружающей среды. Важно отметить, что целевая цель, кажется, была найдена случайно, хотя дальнейшее обучение может научить агентов достигать любой точки в окружающей среде без запоминания последовательности шагов.

Выборочные цели способствуют исследованию и уменьшают вероятность преждевременной сходимости.

Однако важно не преувеличивать это достижение. Используя функцию вознаграждения, которая вознаграждает агентов на основе их значения y, стандартный NEAT решает это с медианой в 94 поколения (Stddev: 36) и меньшим временем оценки, но проваливается один раз.

Выводы

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