В течение последних недель здесь, в SOUTHWORKS, мы играли с новой технологией Microsoft под названием Project Bonsai — платформой искусственного интеллекта, которая в настоящее время находится в состоянии предварительного просмотра. Это позволяет решать проблемы машинного обучения с помощью глубокого обучения с подкреплением, не требуя обширного опыта машинного обучения.

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

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

Обучение с подкреплением

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

Когда начинается эпизод, система переходит в предопределенное состояние (St). На основе состояния агент выбирает действие (At), затем среда предоставляет вознаграждение за выполненное действие (Rt) и вычисляет новое состояние системы (St+1). Цель агента — выбрать действия, которые максимизируют его совокупное вознаграждение за эпизод.

Бонсай

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

  • Определение состояния системы.
  • Список действий, которые он может выбрать.
  • Конкретная цель для достижения (т. е. условия, которые должны быть выполнены или которых необходимо избежать в соответствии с состоянием системы) или функция вознаграждения, основанная на текущем состоянии системы и предпринятом действии.
  • Подключение к смоделированной среде, которая может рассчитать новое состояние системы на основе текущего состояния системы и действий, предпринятых агентом.

На основе этих входных данных Bonsai создаст агента (называемого BRAIN — Basic Recurrent Artificial Intelligence Network), который выбирает действия на основе текущего состояния и обучает его выполнять указанные цели или максимизировать совокупное вознаграждение. Для создания этого агента он автоматически выберет модель машинного обучения на основе структуры проблемы и автоматически настроит свои гиперпараметры во время обучения.

Что мы сделали?

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

Вот 3 разных сценария, которые мы собираемся обсудить здесь:

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

Сценарий выхода из дома

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

Вариант для маленького дома

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

После определения входных данных для этого очень простого сценария на жаргоне Bonsai (Inkling — это DSL), мы смогли обучить мозг достигать выхода из любой исходной комнаты примерно за 100 000 итераций обучения, как показано на изображении ниже:

Вариант большого дома

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

Как и в предыдущей версии, в этой научились добираться до выхода из дома, начиная с любой из 10 разных комнат. Обучение заняло примерно 160 000 итераций.

Большой дом: вариант кратчайшего пути

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

Для обучения этой версии потребовалось около 1,5 миллиона итераций, что значительно дольше, чем предыдущая, но ей удалось достичь выхода, используя более короткие пути почти для всех стартовых комнат:

Сценарий крестики-нолики

Цель состояла в том, чтобы обучить агента играть в крестики-нолики против симулированного игрока. Агент будет выполнять роль игрока 1, тогда как среда будет имитировать игрока 2, который играет случайным образом.

После попытки обучить модель с помощью этой функции вознаграждения нам не удалось заставить агента правильно играть в крестики-нолики. Модель продолжала выполнять недопустимые ходы, и никаких существенных улучшений после нескольких вариантов функции вознаграждения не произошло — вы можете прочитать более подробные причины этого, просмотрев этот репозиторий.

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

Сценарий двуногого ходока

Двуногий ходок — это стандартный пример сценария, который можно получить в OpenAI (значительно более сложный, чем сценарий Покидая дом). Он состоит из равнинной местности фиксированной длины, по которой робот должен пройти от начальной точки до конечной. У этого робота есть корпус в виде головы и две ноги с двумя суставами на каждой: одна представляет собой бедро робота, а другая — колено. Дополнительно у робота есть дальномер LiDAR.

На изображении ниже показан пользовательский интерфейс с роботом, выходящим из начальной точки, отмеченной красным флажком:

Если вам интересно посмотреть, как мы определили состояние и действия для этого сценария тренировки мозга с помощью бонсай, вы можете перенаправить себя сюда. Хотя в этом разделе интересно посмотреть, как мы развивали функцию вознаграждения (которую мы кратко опишем далее), используя подход проб и ошибок, который привел нас к прогрессу и решению небольших проблем шаг за шагом.

Использование целей

В нашей первой версии использовались цели Бонсай:

  • Избегайте ходьбы назад: положение корпуса по горизонтальной оси должно быть больше 0.
  • Избегайте падения: робот должен избегать получения флага game_over, отправленного средой, если робот падает.
  • Достичь целевого положения: горизонтальное положение корпуса должно достигать конца местности.

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

Использование функций вознаграждения и терминала: достижение конечной точки

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

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

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

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

Использование функций вознаграждения и терминала: держите корпус высоко

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

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

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

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

Дополнительные шаги, которые следует рассмотреть в отношении этого сценария, заключаются в том, чтобы разложить проблему на несколько концепций и уроков, которые будут сосредоточены на том, чтобы заставить агента ходить «человеческим образом». Хотя это непростая задача, требующая мозгового штурма, разбивки экспериментов методом проб и ошибок, факт в том, что построение этого графика обучения может помочь нам достичь желаемых результатов — мы оставляем это для другой статьи.

Выводы

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

Если у пользователя есть небольшой опыт работы с машинным обучением, он может более детально настроить некоторые параметры — например, вручную выбрать алгоритм, используемый для агентов. Он также может использовать вознаграждения и функции терминала напрямую вместо целей, что требует немного больше опыта, но также дает пользователю больше контроля, что может привести к лучшим результатам. Однако не все может контролироваться пользователем напрямую — например, настройка гиперпараметров алгоритма выполняется Bonsai автоматически и не может быть переопределена.

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