Почему моя реализация DQN с использованием TensorFlow в среде FrozenWorld не работает? Задать вопрос
Задано 6 лет назад Изменено сегодня Просмотрено 562 раза
2 $\begingroup$ Я пытаюсь протестировать DQN на среде FrozenWorld в gym, используя TensorFlow 2.x. Правило обновления — (внеполитичное) $$Q(s,a) \leftarrow Q(s,a)+\alpha (r+\gamma~ max_{a'}Q(s',a')-Q(s,a))$$ Я использую политику эпсилон-жадности. В этой среде награда начисляется только при успехе. Поэтому я исследовал с 100% до тех пор, пока не достигну 50 успехов. Затем я сохранил данные об ошибках и успехах в разные контейнеры. Затем я случайным образом отбирал (с заменой) из этих контейнеров и использовал их для обучения Q-сети. Однако независимо от того, как долго я тренирую агента, кажется, что он не учится. Код доступен в Colab . Я делаю это уже несколько дней. PS: Я модифицировал код для SARSA и Expected SARSA; ничего не работает. reinforcement-learning tensorflow dqn gym sarsa Поделиться Улучшить вопрос Следите за изменениями отредактировано 20 февраля 2020 г. в 23:11 nbro 43,3 тыс. 14 14 золотых значков 122 122 серебряных значков 222 222 бронзовых значков задано 20 февраля 2020 г. в 21:07 kosa 121 3 3 бронзовые значки $\endgroup$ 7 1 $\begingroup$ В общем, довольно сложно проводить код-ревью и поиск ошибок, поэтому вы можете не получить ответа. Чтобы увеличить ваши шансы, вам следует предоставить больше контекста на сайте, чтобы ваш вопрос не зависел от людей, которые будут уходить с сайта и вовлекаться в ваш проект. Например, какие диагностические данные были собраны и каковы результаты? Вы наблюдали что-то большее, чем "агент не кажется, что он учится", которое стоило бы поделиться? Какое представление состояния вы используете для ввода в НС, и какая у него приблизительная архитектура НС — размеры слоев, функция активации выходного значения, функция потерь и т.д. $\endgroup$ Neil Slater – Neil Slater 2020-02-20 21:51:46 +00:00 Комментарий 20 февраля 2020 г. в 21:51 $\begingroup$ Frozen lake относительно сложнее для решения, чем ожидалось, поскольку это очень стохастическая среда. У вас будет трудности с решением этой задачи с помощью DQN. Попробуйте решить ее с помощью обычного Q-обучения. Эпсилон-жадность не является идеальной, потому что вы застрянете в локальных оптимумах и не сможете выбраться, поскольку исследование уменьшится. Попробуйте использовать стратегию UCB, которая обычно лучше, чем e-greedy для табличных методов. Также полезно полностью сбрасывать счетчики после определенного количества эпизодов в UCB при этом. $\endgroup$ Brale – Brale 2020-02-20 22:11:50 +00:00 Комментарий 20 февраля 2020 г. в 22:11 $\begingroup$ @Brale_ Я пробовал обычное Q-обучение. Оно не обучалось. В любом случае я также попробую UCB. $\endgroup$ kosa – kosa 2020-02-20 22:32:30 +00:00 Комментарий 20 февраля 2020 г. в 22:32 $\begingroup$ @NeilSlater Я использовал НС с 2 скрытыми слоями (размер = 50)+'relu' активациями, которые выдают 4 значения (по одному для каждого действия). Я использовал Adam с постоянной скоростью обучения для минимизации ошибки MSE. Я не использовал никаких признаков для представления состояния. Я просто использовал состояние как вход в НС. $\endgroup$ kosa – kosa 2020-02-20 22:40:25 +00:00 Комментарий 20 февраля 2020 г. в 22:40 1 $\begingroup$ @kosa Если ваш алгоритм обычного Q-обучения не работает, то и DQN не сможет работать. Нейронная сеть в DQN — это просто устройство хранения для замены таблицы Q-факторов, если вы исчерпаете память. Моя интуиция заключается в том, что ваша цель в функции test_fun является настоящим виновником. В настоящее время она просто $Q^{new}$, ее следует заменить на $(1-\alpha)Q^{old}+\alpha Q^{new}$. Также Frozen lake — очень простая задача (по сравнению со Starcraft или Go), вам не нужно 2 скрытых слоя. $\endgroup$ Hai Nguyen – Hai Nguyen 2020-02-21 11:52:36 +00:00 Комментарий 20 февраля 2020 г. в 11:52 | Показать 2 дополнительных комментария 1 Ответ 1 Отсортировано по: Сброс к значению по умолчанию Наивысший рейтинг (по умолчанию) Измененная дата (новые первыми) Созданная дата (старые первыми) 0 $\begingroup$ Я вижу как минимум 3 проблемы с вашим кодом DQN, которые необходимо исправить: У вас не должно быть отдельных игровых памяти для успехов/неудач. Поместите все свои опыты в одну игровую память и отбирайте из нее случайным образом. Ваша игровая память чрезвычайно мала, всего 2000 выборок. Вам нужно значительно увеличить ее.
← Вернуться к списку
Почему моя реализация DQN с использованием TensorFlow на окружении FrozenWorld не работает?
Краткое содержание
Я пытаюсь протестировать DQN в среде FrozenWorld в gym с использованием TensorFlow 2.x. Правило обновления такое: (off-policy)$$Q(s,a) \leftarrow Q(s,a)+\alpha (r+\gamma~ max_{a'}Q(s',a')-Q(s,a))$$Я использую политику epsilon-greedy. В этой среде награда дается только в случае успеха. Поэтому я исследовал среду на 100% до тех пор, пока не достигну 50 успехов. Затем я сохранил данные об ошибках и успехах в разные контейнеры. Затем я случайно выбирал (с возвращением) из этих контейнеров и использовал их для обучения Q-сети. Однако, независимо от того, как долго я тренирую агента, похоже, что он не учится. Код доступен в Colab. Я занимаюсь этим несколько дней. PS: Я модифицировал код для SARSA и Expected SARSA; ничего не работает.