В этом блоге мы собираемся научить простой ИИ ходить с помощью обучения с подкреплением. Давайте сначала вкратце разберемся, что такое обучение с подкреплением и что это за ИИ, который мы собираемся обучать.
Обучение с подкреплением, краткое введение
Обучение с подкреплением - это ветвь машинного обучения. Идея в том, что у вас есть агент и среда. Агент предпринимает действия, и среда выдает вознаграждение на основе этих действий. Цель состоит в том, чтобы научить агента оптимальному поведению, чтобы максимизировать вознаграждение, получаемое средой.
Например, взгляните на схему. Этот лабиринт представляет нашу среду. Наша цель - научить агента оптимальной политике, чтобы он мог решить этот лабиринт. Лабиринт предоставит агенту награду в зависимости от качества каждого его действия. Кроме того, каждое действие, предпринимаемое агентом, приводит его к новому состоянию в среде.
Об ИИ
ИИ, который мы собираемся обучить, представляет собой среду OpenAIGym, и его имя - BipedalWalker.
OpenAIGym - это набор действительно крутых сред. Вам следует посетить веб-сайт OpenAIGym, чтобы узнать больше о средах обучения с подкреплением и о том, как их использовать.
Теперь давайте подробно рассмотрим среду BipedalWalker.
Двуногий
Награда дается за продвижение вперед, всего 300+ баллов до дальнего конца. Если робот падает, он получает -100. Применение крутящего момента двигателя стоит небольшое количество очков, более оптимальный агент получит лучший результат. Состояние состоит из угловой скорости корпуса, угловой скорости, горизонтальной скорости, вертикальной скорости, положения шарниров и угловой скорости шарниров, контакта ног с землей и 10 измерений лидарного дальномера. В векторе состояния нет координат.
Пространство действий
У BipedalWalker 2 ноги. На каждой ноге по 2 сустава. Вы должны научить двуногого ходить, прилагая крутящий момент к этим суставам. Таким образом, размер нашего рабочего пространства равен 4, что соответствует крутящему моменту, приложенному к 4 суставам. Вы можете применить крутящий момент в диапазоне (-1, 1)
Награда
- Агент получает положительное вознаграждение, пропорциональное пройденному расстоянию по местности. Он может получить в общей сложности 300+ наград до самого конца.
- Если агент упадет, он получит награду -100.
- Существует некоторая отрицательная награда, пропорциональная крутящему моменту, приложенному к шарниру. Так что агент учится плавно ходить с минимальным крутящим моментом.
Существует две версии среды Двуногие в зависимости от типа местности.
- Слегка неровная местность.
- Жесткая местность с лестницами, пнями и ловушками.
Решение проблемы окружающей среды
Я использую алгоритм DDPG для решения этой проблемы. DDPG подходит, когда у нас есть непрерывное действие и пространство состояний a. Я использую библиотеку Pytorch.
В DDPG есть две разные сети, которые называются «Актер» и «Критик». Значение выходного действия актер-сеть при заданных ему состояниях. Критическая сеть выводит значение Q (насколько хороша пара состояние-действие), заданную пару значений состояния и действия (произведено актором-сетью). Вы можете подробно прочитать о DDPG из источников, доступных в Интернете. Я также прикрепил ссылку в конце.
Давайте сначала посмотрим на обучение BipedalWalker. Позже мы подробно рассмотрим алгоритм.
Визуализация тренировок (слегка неровная местность)
- Вначале ИИ ведет себя очень хаотично. Он не умеет держать ноги в равновесии.
- После 300 серий он учится ползать на одном колене и одной ноге. Этот ИИ сейчас перестраховывается, потому что если он упадет, он получит -100 награды.
- После 500 серий он начал балансировать на обеих ногах. Но еще нужно научиться правильно ходить.
- После 600 эпизодов он учится получать максимальные награды. Он идет в другом стиле. В конце концов, это ИИ, а не Человек. Это лишь один из способов пройтись, чтобы получить максимальную награду. Если я буду тренировать его снова, он может научиться другому оптимальному способу ходьбы.
Визуализация тренировок (хардкорная местность)
- Я сохранил свой вес после предыдущей тренировки на простой местности и возобновил тренировки на жесткой местности. Я сделал это, потому что агент уже знал, как ходить по простой местности, и теперь ему нужно научиться преодолевать препятствия во время ходьбы.
- После 1000 тренировок агент смог ходить по сложной местности. Но иногда падает. Чтобы иметь возможность полностью ходить по сложной местности, его нужно очень тщательно тренировать в течение большего количества времени.
Сетевая архитектура DDPG
Я выбрал для своей сети следующие гиперпараметры.
Ниже приведен фрагмент кода моей сети актеров. Актерская сеть состоит из 2 скрытых слоев с активацией batch-norm и relu. Размер скрытых слоев - 600 и 300. Я использую активацию tanh на последнем слое, потому что действие ограничено диапазоном (-1, 1). Вместо использования весов по умолчанию я инициализировал свои веса, что улучшило производительность.
Ниже приведен фрагмент кода моей сети критиков. Есть 2 скрытых слоя для состояния и 1 скрытое состояние для действия. Здесь я использую активацию batch-norm и relu. Скрытые слои действия и пространства добавляются вместе с активацией relu на нем.
После долгих экспериментов с сетевой архитектурой я выбрал именно эту. Я сохранил веса, чтобы вы могли поднять их и загрузить, если вам нужно. Я включаю ссылку на свой репозиторий Git, который содержит все необходимое.
Ресурсы
- Это отличный вводный блог по обучению с подкреплением.
- Я настоятельно рекомендую вам прочитать статью DDPG.
- Прочтите этот документ, чтобы узнать, как использовать тренажерный зал.
- Ознакомьтесь с другими классными средами на OpenAIGym.
- Ниже приведено мое репозиторий GitHub, содержащий полный код.