NeurIPS: как покорить лучшую конференцию по ML

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


hbkq-vnd_xgxhvcixlo-u8b_pmk.jpeg

NeurIPS поддерживает внедрение методов машинного обучения в различных научных дисциплинах. Ежегодно запускается порядка 10 дорожек, для решения актуальных проблем академического мира. По результатам соревнований победители выступают на самой конференции с докладами, новыми разработками и алгоритмами. Больше всего я увлечен обучением с подкреплением (Reinforcement Learning или RL), поэтому вот уже второй год участвую в RL-конкурсах, приуроченных к NeurIPS.


eic2usvfs-brxmsjczvkvygpfwq.png

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

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

Кроме того, вся конференция наполнена последними научными достижениями и state-of-the-art результатами, знать и следить за которыми людям из области data science крайне важно.

Начать участвовать в подобных конкурсах довольно просто. Если разбираешься в DL настолько, что можешь дообучить ResNet –– этого достаточно: регистрируйся и вперед. Всегда есть публичный лидерборд, на котором можно трезво оценить свой уровень по сравнению с остальными участниками. А если что-то непонятно –– всегда есть каналы в slack/discord/gitter/etc для обсуждения всех возникающих вопросов. Если тема действительно «твоя», то от получения заветного результата ничего не остановит –– во всех конкурсах, в которых я участвовал, все подходы и решения были изучены и реализованы прямо в процессе соревнования.


huwsd5weqocxiuqv3hugygmfqea.jpeg

Проблематика

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


Постановка задачи

Участникам был дан виртуальный скелет человека (в симуляторе OpenSim), у которого на месте одной ноги был протез. Задача состояла в том, чтобы научить скелет двигаться в определенном направлении с заданной скоростью. В ходе симуляции и направление, и скорость могли меняться.


odvjnpxb7xogj5h_5ll85iokhp0.jpeg

Для получения виртуальной модели управления скелетом предлагалось использовать reinforcement learning. Симулятор выдавал нам некоторое состояние скелета S (вектор из ~400 чисел). Требовалось предсказать, какое действие A необходимо совершить (силы активации мышц ног –– вектор из 19 чисел). По ходу симуляции скелету выдавалась награда R — как некая константа минус штраф за отклонение от заданной скорости и направления.


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

Обучение с подкреплением (Reinforcement Learning или RL) — область, которая занимается теорией принятия решений и поиском оптимальных политик поведения.

Вспомним, как обучают котика собачку новым трюкам. Повторяете какое-то действие, за выполнение трюка даете вкусняшку, за невыполнение — не даете. Собачке во всем этом следует разобраться и найти стратегию поведения («политику» или «policy» в терминах RL), которая максимизирует количество получаемых вкусяшек.

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

Развивая эту тему дальше, rule-based solutions — software 1.0, когда все правила задавались разработчиком, supervised learning — тот самый software 2.0, когда система обучается сама по имеющимся примерам и находит зависимости в данных, reinforcement learning — шаг чуть дальше, когда система сама учится исследовать, экспериментировать и находить требуемые зависимости в своих решениях. Чем дальше мы идем, тем лучше пытаемся повторить то, как обучается сам человек.


Особенности задачи

Задание выглядит типичным представителем обучения с подкреплением для задач с непрерывным пространством действий (RL for continuous action space). От обычного RL отличается тем, что вместо выбора какого-то конкретного действия (нажатия на кнопку джойстика), требуется это действие точно предсказать (а возможностей тут бесконечно много).

Базовый подход к решению (Deep Deterministic Policy Gradient) был придуман еще в 2015 году, что довольно давно по меркам DL, область продолжает активно развиваться в применении к робототехнике и real-world RL applications. Улучшать есть что: робастность подходов (чтобы не сломать реального робота), sample efficiency (чтобы не собирать данные с реальных роботов месяцами) и другие проблемы RL (exploration vs exploitation trade-off, etc). В этом соревновании реального робота нам не давали — только симуляцию, зато сам симулятор был в 2000 раз медленнее Open Source аналогов (на которых все и проверяют свои RL алгоритмы), а потому выводил проблему sample efficiency на новый уровень.


Этапы соревнования

Само соревнование проходило в три этапа, на протяжении которых задача и условия несколько видоизменялись.


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

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

Во время 1-го и 2-го этапа прогресс каждого участника отображался на лидерборде. Финальное решение требовалось прислать в виде docker-образа. В нем были предусмотрены ограничения на время работы и ресурсы.


Coolstory: public leaderboard and RL

Из-за доступности лидерборда никто не показывает свою лучшую модель, чтобы в финальном раунде выдать «чуть больше обычного» и удивить соперников.


Почему так важны docker-образы

В прошлом году произошел небольшой инцидент при оценке решений в самом первом раунде. На тот момент проверка проходила через http-взаимодействие с платформой, и был найден лик условий проведения тестирования. Можно было узнать, в каких именно ситуациях оценивался агент и переобучить его только под эти условия. Что, конечно же, никак не решало реальную проблему. Именно поэтому приняли решение о переносе системы сабмитов на docker-образы и запуск на удаленных серверах организаторов. Dbrain пользуется такой же системой подсчета результата на конкурсах ровно из этих же соображений.


Команда


tyurgpqbzb2zl2wimtzri0mnpwk.jpeg

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

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

Как найти команду? Во-первых, можно вступить в ряды ods и поискать единомышленников там. Во-вторых, для RL-fellows есть отдельный чатик в телеграмме — RL club. В-третьих, можно пройти замечательный курс от ШАД — Practical RL, по окончании которого уж точно обзаведешься парочкой знакомых.

Стоит, однако, помнить о политике «сабмит — или не было». Если хотите объединяться — сначала получите свое решение, засабмитьте, появитесь на лидерборде и покажите свой уровень. Как показывает практика, такие команды получаются куда более сбалансированными.


Мотивация

Как я уже писал, если тема «твоя» — то тебя ничего не остановит. Это значит, что область не просто тебе нравится, но вдохновляет тебя — ты горишь ею, ты хочешь стать лучшим в ней.
Я познакомился с RL еще 4 года назад — во время прохождения Berkeley 188x — Intro to AI — и до сих пор не перестаю удивляться прогрессу в этой области.


Систематичность

Третье, но столь же важное — надо уметь делать то, что ты обещал, вкладываться в соревнование каждый день и просто… решать его. Каждый день. Никакой врожденный талант не сравнится с умением делать что-то, даже по чуть-чуть, но каждый день. Именно для этого и потребуется мотивация. Чтобы преуспеть в этом, советую почитать DeepWork и AMA ternaus.


Time management

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


Overwork

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


Coolstory: deadline after deadline

Из-за чего вообще может понадобиться переработать на благо соревнования? Ответ довольно прост — перенос дедлайнов. На таких соревнованиях организаторы часто не могут всего предугадать, из-за чего наиболее простым выходом является дать участникам больше времени. В этом году соревнование продлевалось 3 раза: сначала на месяц, потом на неделю и в самый последний момент (за 24 часов до дедлайна) — еще на 2 дня. И если во время первых двух переносов нужно было просто правильно организовать дополнительное время, то на последних двух днях надо было просто пахать.


Theory


gfrg9ql1ukvjmlbglwcizlfcpto.png

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


  • Continuous control with deep reinforcement learning — базовая статья по deep reinforcement learning для задач с непрерывным пространством действий.
  • Parameter Space Noise for Exploration — исследование о добавлении шума в веса агента для лучшего исследования среды. По опыту — одна из лучших техник для exploration в RL.

В этом году к ним прибавились еще «парочка»:


Practice


xpg7itebqdpi3cwex33uzrzkidg.jpeg

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


Coolstory: episode III

В качестве итоговой оценки решения выступала усредненная награда по 10ти тестовым эпизодам.


jqbjyctkjettuu2bqd19xcahssk.png

На графике представлены результаты тестирований нашего агента: 9 из 10 эпизодов наш скелет проходил просто отлично (среднее — 9955.66), но один эпизод….эпизод 3 ему не давался (награда 9870). Именно эта ошибка привела к падению итогового скора до 9947 (-8 пунктов).


Удача

И напоследок — не стоит забывать о банальной удаче. Не стоит думать, что это противоречивый пункт. Наоборот, немного везения сильно способствует постоянной работе над собой: даже если вероятность удачи всего 10%, человек, который попробовал поучаствовать в соревновании 100 раз преуспеет намного больше, чем тот, кто попробовал всего 1 раз и отказался от идеи.


mqlxi_alc8pt0acnzwoi8twb8oo.jpeg

В прошлом году наша команда — Михаил Павлов и я — участвовала в NeurIPS конкурсах в первый раз и основной мотивацией выступало просто участие в первом NeurIPS соревновании по reinforcement learning. Тогда я только закончил курс Practical RL в ШАДе и хотел проверить полученные навыки. В итоге мы заняли почетное третье место, уступив лишь nnaisene (Шмидхубер) и команде университета из Китая. На тот момент наше решение было «довольно простым» и основывалось на Distributed DDPG с parameter noise (публикация и выступление на ml.тренировках).


gfqqtoneh51dn47m3f7oicyqixk.jpeg

В этом году произошла пара изменений. Во-первых, просто участвовать в этом соревновании уже не было желания, хотелось его выиграть. Во-вторых, состав команды тоже изменился: Алексей Гринчик, Антон Печенко и я. Взять и выиграть — не получилось, но мы вновь заняли 3е место.
Наше решение официально будет представлено на NeurIPS, а сейчас ограничимся малым количеством подробностей. Взяв за основу решение прошлого года и успехи off-policy reinforcement learning этого года (статьи выше), мы добавили к этому ряд собственных наработок, о которых расскажем на NeurIPS, и получили Distributed Quantile Ensemble Critic, с помощью которого и взяли третье место.

Все наши наработки –– система распределенного обучения, алгоритмы и прочее будут опубликованы и доступны в Catalyst.RL после NeurIPS.


Coolstory: big boys — big guns

Наша команда уверенно шла на 1е место на протяжении всего конкурса. Однако у больших ребят были другие планы — за 2 недели до конца соревнования на конкурс зашли сразу 2 крупных игрока: FireWork (Baidu) и nnaisense (Шмидхубер). И если с китайским гугл поделать ничего не удалось, то вот с командой Шмидхубера нам довольно долго удавалось честно бороться за второе место, уступив лишь с минимальным отрывом. Как мне кажется довольно неплохо для любителей.


  • Связи. На конференцию приезжают топовые исследователи, с которыми можно пообщаться вживую, чего не дадут никакие email-переписки.
  • Публикация. Если решение занимает призовое место, то команду приглашают на конференцию (а может и не одну) для презентации своего решения и публикации статьи.
  • Предложение работы и PhD. Публикация и призовое место в такой конференции значительно повышают твои шансы на получение должности в таких ведущих компаниях как OpenAI, DeepMind, Google, Facebook, Microsoft.
  • Real world value. NeurIPS проводится для решения актуальных проблем академического и реального мира. Можно быть уверенным, что результаты не уйдут в стол, а действительно будут востребованы и помогут улучшить мир.
  • Драйв. Решать такие конкурсы… просто интересно. В условиях соревнования можно придумать много новых идей, протестировать разные подходы — просто чтобы быть лучшим. И давайте будем честны, когда еще ты можешь погонять скелетов, поиграть в игры и все это с серьезным видом и ради науки?


Coolstory: visa and RL

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

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

И переходите на Catalyst.RL, чего уж.

© Habrahabr.ru