Почему я считаю, что инструменты RL имеют значение

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

Инструменты RL, которые есть у каждого

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

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

Я не говорю о создании какой-то массивной, разработанной, впечатляющей библиотеки только для вас и любых коллег, которые сочтут ее полезной (я имею в виду, что если вы откроете исходный код и вам повезет, возможно, всем понравится это), а скорее я говорю о том, чтобы потратить немного дополнительного времени в начале нового проекта, чтобы правильно настроить его как репозиторий и как редактируемый пакет Python, чтобы упростить повторное использование вашего кода в будущем. Если вам нравится Jupyter Notebooks, я думаю, что nbdev — отличный ресурс для такого рода вещей.

Инструменты RL, которые нам нужны

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

Я думаю, что широко используемая и надежная коллекция оберток среды была бы превосходной. Такие вещи, как укладка кадров, нормализация состояния и вознаграждения, а также обертки meta-env, были бы чрезвычайно полезны. Некоторые библиотеки включают некоторые из этих оболочек, но я еще не видел, чтобы кто-нибудь помещал их в центр своего пакета. Я думаю, что слишком много внимания уделяется реализации алгоритмов для запуска людьми и недостаточно внимания предоставлению отдельных инструментов, которые исследователи могут использовать при создании новых идей. Как будто на самом деле просто нужно несколько высококачественных реализаций алгоритма RL (надеюсь, в целом набор масштабируемых реализаций для каждой среды DL) для целей тестирования и производственной работы (если вы можете производить RL, серьезные реквизиты) и тому подобное. Кроме того, я подозреваю, что полезнее предоставить фреймворк, который позволяет исследователям реализовывать только новые части своей работы и использовать готовые компоненты там, где они могут.

Это было немного разглагольствованием, но эта проблема беспокоила меня в последнее время. К сожалению, кажется, что модульные фреймворки RL, которые, как мне кажется, выглядят простыми и приятными в использовании, сделаны DeepMind, а это означает, что они работают с JAX и TensorFlow, но не с PyTorch. Меня, как пользователя и любителя PyTorch, это огорчает. Я имею в виду, что JAX тоже кажется потрясающим, но, помимо работы полный рабочий день, просто трудно выделить время для изучения нового фреймворка.

Недавно вышел PFRL, и я думаю, что он немного помогает решить эту проблему, но, конечно, еще есть над чем работать. И я до сих пор не нашел пакета, предлагающего набор высококачественных модульных оберток среды!

Если кто-то написал набор обёрток, которые работали с массивами NumPy (поскольку именно это Gym принимает в качестве аргументов и что он возвращает), то людям, использующим фреймворки, будет легко преобразовать эти массивы NumPy в формат массива выбранного ими фреймворка. Может быть, я сам этим займусь, посмотрим.

Инструменты, которые я люблю

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

ПиТорч

Я использую PyTorch для всех общих NN и математических вещей, для которых он создан.

PyTorch-Молния

PyTorch-Lightning — это круто. Использование его для RL может показаться немного странным и хакерским, но оно навязывает общую структуру кода, которая просто фантастична. Кроме того, он поставляется с кучей бесплатных вещей, таких как обучение GPU/многоузлов, автоматическая регистрация экспериментов и так далее. Я не буду делать полную рекламную презентацию PyTorch-Lightning, но ознакомьтесь с их документацией, если вы являетесь пользователем PyTorch.

Спортзал OpenAI

Пакет Gym предоставляет стандартный набор сред RL и предоставляет API для реализации новых сред. Некоторое время он был гибким и полезным в исследованиях RL.

Пуля

Мне еще предстоит создать пользовательскую среду с помощью PyBullet, но мне нравится, что она с открытым исходным кодом и что они предоставляют альтернативы средам MuJoCo. Он хорошо работает, его легко установить и он быстро работает на моем ноутбуке (MacBook Pro). Любить это.

Веса и уклоны

Это лучший регистратор экспериментов, который я использовал. Если вы выполняете RL и включаете свою среду в монитор, то Weights and Biases могут автоматически записывать видео вашего агента в среде на свою панель управления.

nbdev

Если вам нравится Jupyter Notebooks, я думаю, что nbdev — отличная вещь для создания вашего кода в виде пакета. Все, что вы не экспортируете в свой пакет, становится тестами для вашего кода, поэтому тесты в значительной степени встроены в ваш блокнот! Тем не менее, мне также нравится экспериментировать с файлами Python, поэтому я также нашел это полезным в случае, когда вы очищаете и упаковываете некоторый код, который вы предварительно написали.

Завершение

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

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

Думаю, это все просто пища для размышлений.