В наши дни машинное обучение стало своего рода алхимией.

Новичкам достаточно легко подключить компоненты, поиграть с параметрами и создать красивую модель, которая решает вашу задачу. Если бы вы хотели задействовать глубокую нейронную сеть для решения вашей проблемы, вы могли бы использовать тензорный поток, или pytorch, или keras, или paddlepaddle, или caffe (правда?), Или цепочку, или любую другую собственную библиотеку автодифференцирования. И вот он, мощный аппроксиматор функций. Подход к созданию неоптимально эффективных моделей довольно прост, и это неплохо. Это помогает привлекать молодые таланты, а кривая обучения для новичков совсем не крутая.

Но теперь давайте обсудим обучение с подкреплением. Существует ли де-факто выбор в пользу фреймворка, который предоставляет все инструменты, которые могут понадобиться исследователю RL (или любознательному ребенку) для исследовательской работы? Существуют ли какие-либо библиотеки для создания развертываемых продуктов на основе RL промышленного уровня? Каждую неделю в RL появляются новые замечательные статьи, а на github полно репозиториев студентов и исследователей, создающих собственные реализации современных алгоритмов. Но в этом много общего с некоторыми стандартными служебными задачами. Более того, почти для каждой задачи RL требуется игровая площадка, на которой может играть наш агент. Это требует, чтобы алгоритм аккуратно создавал некоторые API-интерфейсы для взаимодействия с игровой площадкой (или средой в технических терминах), и снова эта часть становится повторяющейся.

Крупные игроки, такие как Google, Intel, OpenAI, Facebook, классические фреймворки, такие как keras, и замечательные разработчики (многие из них) пытались решить эту проблему, и поэтому появляется множество таких связанных фреймворков, пытающихся конкурировать (или, может быть, сотрудничать?), чтобы стать универсальным решением для всех ваших проблем с RL.

Универсальное решение для всех ваших проблем с RL.

Эта статья посвящена сравнению этих фреймворков, чтобы вам, читателю, не приходилось тратить часы или дни, пытаясь настроить их для своей задачи, а затем понять, что это не работает для вас. Сравнение в первую очередь сосредоточено на 4 параметрах:

  1. Удобство использования для нового пользователя
  2. Разнообразие реализованных алгоритмов
  3. Поддержка широкого спектра сред моделирования
  4. Производительность реализованных алгоритмов и поддержка параллельного и / или распределенного обучения (это незначительная субъективная часть, потому что я не проводил сравнительные тесты для них всех)

Давайте начнем сейчас, ладно?

Часть 1. Базовые показатели OpenAI, RLlib, Intel's Coach, TensorForce

Часть 2: SLM-lab, keras-rl, chainer-rl, тензорные агенты, Facebook ELF.

Часть 3. Допамин Google, trfl Deepmind, заключение

  1. Базовые показатели OpenAI

Это одна из старейших попыток создания стандартизированного набора алгоритмов глубокого RL. Это началось, когда OpenAI экспериментировал с DQN и его вариантами (обучение Dueling Double Q с приоритетным воспроизведением, обучение Double Q с приоритетным воспроизведением, обучение Dueling Double Q, обучение Double Q и т. Д.). По их собственным словам, цель

Результаты обучения с подкреплением сложно воспроизвести: производительность очень шумная, в алгоритмах много движущихся частей, которые допускают незначительные ошибки, а во многих документах не сообщается обо всех требуемых трюках. Выпуская известные успешные реализации (и передовые методы их создания), мы хотим гарантировать, что очевидные улучшения RL никогда не будут результатом сравнения с ошибочными или ненастроенными версиями существующих алгоритмов.

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

  • Актер-критик с опытом воспроизведения (ACER)
  • АКТР
  • Глубокий детерминированный градиент политики (DDPG)
  • Глубокое Q-Learning (DQN)
  • Генеративное состязательное имитационное обучение (GAIL)
  • Воспроизведение ретроспективного опыта (ЕЕ)
  • Оптимизация проксимальной политики (PPO2)
  • Оптимизация политики доверительного региона (TRPO)

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

Единственным недостатком здесь является то, что он поддерживает только тренажерный зал OpenAI и игровые задачи Atari. На самом деле это имеет смысл, потому что эта библиотека предназначена только для обеспечения надежных реализаций алгоритмов, которые вы можете сравнить со своими собственными. Итак, если у вас есть какая-то другая задача, вам нужно будет выяснить, как связать ее с этими алгоритмами.

2. RLlib

Эта библиотека, разработанная исследователями из лаборатории RISE Калифорнийского университета в Беркли, построена на основе Ray, системы для параллельного и распределенного Python, объединяющей экосистему машинного обучения. Основная философия RLlib:

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

И эта философия определенно работает. RLlib - одна из немногих сред, поддерживающих как мультиагентную, так и мульти-политическую обучающую среду (что обычно является сложной задачей). Он также предоставляет простые API-интерфейсы Python для распараллеливания обучения по нескольким ядрам, а также для распределенного обучения. (Подробности см. В этой статье)

Рассматриваемые алгоритмы также весьма разнообразны (подробнее см. Здесь).

Документы также содержат информацию о том, как использовать RLlib в кластерах, и примеры сценариев, которые помогут вам начать работу с параметрами, которые хорошо работают. RLlib также интегрирован с RayTune, инструментом для поиска гиперпараметров. Он также поддерживает несколько структур для определения нейронной сети, таких как tenorflow, keras, pytorch, и это возможно благодаря изоляции графов политик, которые инкапсулируют основной алгоритм RL.

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

3. Тренер Intel

Создан компанией Nervana Systems, которая была приобретена Intel в 2016 году и выпущена с открытым исходным кодом год назад. Это структура, которая приближается к мечте RL «одна остановка для всех». Он поддерживает множество алгоритмов и связан со всеми основными исследователями среды моделирования. Установка проста, легко приступить к работе, компоненты имеют модульную структуру и возможность многократного использования, а также имеется собственная панель инструментов для визуализации обучения (до свидания). Фреймворк построен на основе Intel Optimized Tensorflow и собственной платформы Intel Neon для DL.

Некоторые из поддерживаемых сред

  • Тренажерный зал OpenAI
  • ViZDoom
  • Робошкола
  • GymExtensions
  • PyBullet
  • КАРЛА
  • Старкрафт:
  • DeepMind Control Suite:

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

4. TensorForce

Tensorflow - один из предшественников RL-фреймворков, которые не разрабатываются и не поддерживаются гигантами. Основными инициаторами разработки являются три разработчика: Майкл Шааршмидт, Александр Кунле и Кай Фрике. Основная мотивация фреймворка - решить такие проблемы, как тесная связь логики RL с дескрипторами моделирования, фиксированная сетевая архитектура и несовместимые интерфейсы состояние / действие.

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

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

  • A3C с использованием распределенного TensorFlow или многопоточного раннера
  • Оптимизация политики доверенного региона (TRPO)
  • Нормализованные функции преимущества (NAF)
  • DQN
  • Двойной DQN
  • N-шаговый DQN
  • Градиенты ванильной политики (VPG / REINFORCE)
  • Актер-критик модели
  • Глубокое Q-обучение от демонстрации (DQFD)
  • Проксимальная оптимизация политики (PPO)
  • Случайные и постоянные агенты для проверки работоспособности

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

Скоро появится поддержка большего количества сред

  • Робот-симулятор беседки - ссылка
  • Карла, Симулятор с открытым исходным кодом для исследования автономного вождения - ссылка
  • Игровой движок Unity - ссылка (я реализую это: D)
  • Проект Майнкрафт Биндниг Мальме - ссылка
  • Обучающая среда DeepMind Starcraft 2 - ссылка
  • DeepMind control, dm_control - ссылка
  • OpenAI roboschool - ссылка
  • DeepGTAV - среда исследования беспилотных автомобилей GTA 5 - ссылка
  • Тест Siemens Industrial Control - ссылка

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

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