Как я могу улучшить производительность сети с прямой связью в качестве аппроксиматора функции q-значения?
Я пытаюсь перемещаться по агенту в домене *n gridworld, используя Q-Learning + нейронную сеть с прямой связью в качестве аппроксиматора q-функции. По сути, агент должен найти лучший / кратчайший путь для достижения определенной конечной позиции цели (+10 награда). Каждый шаг, который делает агент, получает -1 награду. В gridworld есть также некоторые позиции, которых агент должен избегать (-10 вознаграждение, терминальные состояния тоже).
До сих пор я реализовал алгоритм Q-обучения, который сохраняет все Q-значения в Q-таблице, и агент работает хорошо. На следующем шаге я хочу заменить Q-таблицу нейронной сетью, обучаемой онлайн после каждого шага агента. Я попробовал NN с прямой связью с одним скрытым слоем и четырьмя выходами, представляющими Q-значения для возможных действий в мире сетки (север, юг, восток, запад). В качестве входных данных я использовал нулевую матрицу nxn, которая имеет "1" на текущих позициях агента.
Чтобы достичь своей цели, я попытался решить проблему с нуля:
Исследуйте мир сетки с помощью стандартного Q-Learning и используйте Q-карту в качестве обучающих данных для Сети после завершения Q-Learning -> отлично работали
Используйте Q-Learning и предоставьте обновления Q-map в качестве обучающих данных для NN (batchSize = 1) -> сработало хорошо
Замените Q-карту полностью NN. (Это тот момент, когда становится интересно!)
-> ПЕРВАЯ КАРТА: 4 x 4 Как описано выше, у меня есть 16 "дискретных" входов, 4 выхода, и он отлично работает с 8 нейронами (relu) в скрытом слое (скорость обучения: 0,05). Я использовал жадную политику с эпсилоном, которая уменьшается с 1 до 0,1 в течение 60 эпизодов. Тестовый сценарий показан здесь. Производительность сравнивается между стандартным qlearning с q-map и "нейронным" qlearning (в этом случае я использовал 8 нейронов и разные скорости выпадения).
Подводя итог: Neural Q-Learning хорошо работает для небольших сетей, а также производительность в порядке и надежна.
-> Большая карта: 10 х 10
Теперь я попытался использовать нейронную сеть для больших карт. Сначала я попробовал этот простой случай.
В моем случае нейронная сеть выглядит следующим образом: 100 входных данных; 4 выхода; около 30 нейронов (relu) в одном скрытом слое; снова я использовал уменьшающийся фактор исследования для жадной политики; в течение 200 эпизодов скорость обучения снижается с 0,1 до 0,015 для повышения стабильности.
У меня были проблемы с конвергенцией и интерполяцией между отдельными позициями, вызванные дискретным входным вектором. Чтобы решить эту проблему, я добавил несколько соседних позиций в вектор, значения которых зависят от их расстояния до текущей позиции. Это значительно улучшило обучение, и политика стала лучше. Производительность с 24 нейронами видна на картинке выше.
Резюме: простой случай решается сетью, но только с большой настройкой параметров (количество нейронов, коэффициент исследования, скорость обучения) и специальным входным преобразованием.
Теперь вот мои вопросы / проблемы, которые я до сих пор не решил:
(1) Моя сеть способна решать действительно простые случаи и примеры на карте 10 x 10, но она терпит неудачу, поскольку проблема становится немного более сложной. В случаях, когда сбой очень вероятен, сеть не имеет изменений, чтобы найти правильную политику. Я открыт для любой идеи, которая может улучшить производительность в этих случаях.
(2) Есть ли более умный способ преобразования входного вектора для сети? Я уверен, что добавление соседних позиций к входному вектору, с одной стороны, улучшает интерполяцию q-значений по карте, но, с другой стороны, усложняет обучение особых / важных позиций в сети. Я уже пробовал стандартный декартовый двумерный ввод (x/y) на ранней стадии, но потерпел неудачу.
(3) Существует ли другой тип сети, кроме сети прямой связи с обратным распространением, который обычно дает лучшие результаты с приближением q-функции? Вы видели проекты, где FF-nn хорошо работает с большими картами?
1 ответ
Известно, что Q-Learning + нейронная сеть с прямой связью как аппроксиматор q-функции может дать сбой даже в простых задачах [Boyan & Moore, 1995].
У Рича Саттона есть вопрос в FAQ его веб-сайта, связанный с этим.
Возможное объяснение - феномен, известный как интерференция, описанный в [Barreto & Anderson, 2008]:
Помехи возникают, когда обновление одной пары состояние-действие изменяет значения Q других пар, возможно, в неправильном направлении.
Вмешательство естественным образом связано с обобщением, а также происходит в обычном обучении под наблюдением. Тем не менее, в парадигме подкрепляющего обучения его эффекты имеют тенденцию быть гораздо более вредными. Причина этого двоякая. Во-первых, сочетание помех и начальной загрузки может легко стать нестабильным, поскольку обновления больше не являются строго локальными. Доказательства сходимости для алгоритмов, полученных из (4) и (5), основаны на том факте, что эти операторы являются сжимающими отображениями, то есть их последовательное применение приводит к последовательности, сходящейся к неподвижной точке, которая является решением для уравнения Беллмана [14,36]. Однако при использовании аппроксиматоров эта асимптотическая сходимость теряется, [...]
Еще один источник нестабильности - это следствие того факта, что в режиме онлайн-обучения подкреплению распределение поступающих данных зависит от текущей политики. В зависимости от динамики системы агент может некоторое время оставаться в области пространства состояний, которая не является представительной для всей области. В этой ситуации алгоритм обучения может выделять избыточные ресурсы аппроксиматора функции для представления этой области, возможно, "забывая" предыдущую сохраненную информацию.
Одним из способов решения проблемы помех является использование аппроксиматора локальной функции. Чем более независимы все базисные функции друг от друга, тем менее серьезна эта проблема (в пределе у каждого есть одна базисная функция для каждого состояния, что соответствует случаю таблицы соответствия) [86]. Класс локальных функций, которые широко используются для аппроксимации, - это радиальные базисные функции (RBF) [52].
Таким образом, в вашей проблеме (n*n gridworld) нейронная сеть RBF должна давать лучшие результаты.
Рекомендации
Boyan, JA & Moore, AW (1995) Обобщение в обучении подкреплению: безопасное приближение к функции стоимости. NIPS-7. Сан-Матео, Калифорния: Морган Кауфманн.
Андре да Мотта Саллес Баррето и Чарльз У. Андерсон (2008) Алгоритм ограниченного градиентного спуска для приближения значения-функции в обучении с подкреплением, Искусственный интеллект 172 (2008) 454–482