Как найти оптимальные признаки и награды, чтобы глубокое обучение ИИ на основе метода перекрестной энтропии хорошо обучалось?

Вопрос или проблема

Я новичок в программировании, но мне удалось создать небольшую игру в пинг-понг. Для моих учебных занятий мне нужно было понять ИИ, который решал задачу среды Lunar-Lander-V2 с использованием API Gymnasium. ИИ использовал глубокое обучение и метод кросс-энропии. Это было написано на pytorch.

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

Краткое описание игры в пинг-понг: она состоит из двух ракеток (прямоугольников) на обеих сторонах экрана и одного мяча, который случайным образом движется в одном направлении. Мяч отскакивает от ракеток и направляется в другую сторону. Цель – завести мяч за ракетку с противоположной стороны, чтобы забить гол.

В моей игре мяч ускоряется каждый раз, когда его ударяет ракетка. Из-за этого ракетки также ускоряются, если одно действие (вверх, вниз) выполняется несколько раз подряд. Это позволяет игроку все равно попадать по мячу, если он ускоряется.

Я изменил правую ракетку на прямоугольник, который покрывает всю правую сторону. Таким образом, случайное движение мяча не приводит к случайным голам для левой стороны, которую контролирует ИИ. Моей мыслью было, что, таким образом, ИИ “только” нужно научиться следовать за мячом с помощью ракетки, чтобы его отбить. Чтобы добиться этого, я ввел несколько вознаграждений. Я немного поэкспериментировал с функциями и вознаграждениями, но результаты всегда были довольно плохими.

Вот мой последний эксперимент: сначала только удар приносит 50 очков, а пропуск гола отнимает 30 очков. Также есть динамическое вознаграждение, которое увеличивается по мере удаления мяча от центра ракетки. Оно будет вычитаться из общего вознаграждения. Движение ракетки вверх или вниз также приносит небольшое вознаграждение. В конце я добавил еще одно вознаграждение, которое добавляет один балл к вознаграждению за каждый кадр, после первых 100 (чтобы не учитывать позицию появления мяча), в котором y-позиция мяча находится между верхним и нижним концами ракетки.

Кроме того, я предоставил ИИ 5 функций.

  1. Позиция y ракетки
  2. Позиция y мяча
  3. Скорость ракетки
  4. Информация о том, находится ли мяч на одной высоте по оси y с какой-либо точкой на поверхности ракетки в виде булевой переменной
  5. Информация о том, попал ли мяч в ракетку, в виде булевой переменной

Как бы то ни было, в итоге среднее вознаграждение за пакет из 1000 игр всегда было около -200, а порог (верхние 98 %, надеясь на лучшие результаты,…) системы находился между -30 и -100 баллов. Это были результаты после 1000 эпизодов. (В моей голове должно быть возможно получить достаточно положительное вознаграждение за один удар и движение ракетки, чтобы превысить отрицательное вознаграждение от динамического расстояния и пропущенного гола. Но похоже, что так не работает…)

Я использую оптимизатор Adam и скорость обучения 0,01. Я разделил все функции на фиксированное число. (нормализовал их вокруг нуля). Это позволило ИИ выбирать следующую акцию с нормальными вероятностями. Действия: 0, 1, 2, где 0 = стоять на месте, 1 = вверх, 2 = вниз.

Мои основные вопросы, надеюсь, что это решит все проблемы =P :

  1. Достаточно ли хорошие вознаграждения и функции, которые я даю ИИ, чтобы он мог обучаться?

  2. Если нет, как найти хорошие? Есть ли способ?

  3. Может, я что-то упустил? (Я в этом почти уверен (; )

Спасибо за ваше время. Надеясь на хорошие новости, К

Ответ или решение

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

Теория

Метод перекрестной энтропии (CEM) представляет собой оптимизационную технику, основанную на выборке параметров вероятностного распределения, которые максимизируют ожидаемую полезность. Этот метод эффективно используется для улучшения стратегий обучения агентов в различных задачах. В вашем случае задача состоит в обучении модели ИИ играть в Pong, используя метод CEM в среде PyTorch.

Основные аспекты, которые необходимо учитывать:

  1. Признаки (Features): Должны обеспечивать агенту всю необходимую информацию для принятия решений. Они должны быть значимыми и релевантными для задачи.

  2. Система вознаграждений (Rewards): Должна способствовать максимизации желаемого поведения. Вознаграждения должны подкреплять успешные действия и помогать избегать нежелательных.

Пример

Рассмотрим точный набор признаков и вознаграждений, предложенные вами, и оценим их:

  1. Признаки:
    • Уровень по оси Y для ракетки
    • Уровень по оси Y для мяча
    • Скорость ракетки
    • Положение мяча относительно поверхности ракетки (булево значение)
    • Факт удара по мячу ракеткой (булево значение)

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

  1. Вознаграждения:
    • +50 за попадание по мячу
    • -30 за пропущенный мяч
    • Динамическое наказание за удалённость мяча от центра ракетки
    • Маленькое вознаграждение за движение вверх или вниз
    • Вознаграждение за совпадение позиции мяча и ракетки после первых 100 кадров

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

Применение

Теперь рассмотрим, как можно улучшить ваш подход на практике:

  1. Расширьте Признаки:

    • Направление мяча: Добавьте признаки, отражающие скорость мяча по обеим осям (X и Y), чтобы агент мог предвидеть траекторию.
    • Контекст окружения: Включите информацию о границах поля и потенциальных маршрутах мяча.
  2. Уточните Cистему Вознаграждений:

    • Балансировка поощрений и наказаний: Пересмотрите баланс между поощрением за попадание и штрафом за пропуск, чтобы игра была сложной, но достижимой.
    • Мотивирование прогресса: Попробуйте добавлять небольшие вознаграждения за удержание мяча в игре на определённый период времени.
  3. Гиперпараметры и обучение:

    • Изменение скорости обучения: Текущая скорость обучения (0.01) может быть слишком высокой, попробуйте её снизить, чтобы избежать скачков в обучении.
    • Усложнение модели: Рассмотрите возможность добавления скрытых слоёв и увеличение нейронов в модели для расширения её возможностей.
  4. Анализ обучения и отладки:

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

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

Оцените материал
Добавить комментарий

Капча загружается...