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





В чем суть конференции


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


Почему NeurIPS




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

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


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


Как начать?


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


NeurIPS на примере конкретного кейса: Learning to Run




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


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


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


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




Для получения виртуальной модели управления скелетом предлагалось использовать 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 пользуется такой же системой подсчета результата на конкурсах ровно из этих же соображений.


Ключевые моменты


Команда




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

В идеальном варианте, ваши знания и умения должны находиться на одном уровне и дополнять друг друга. Так например, в этом году я подсадил нашу команду на 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



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


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

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



Дополнительное чтение

Также советую OpenAI подборку статей по reinforcement learning и ее версию для mendeley. А если вас заинтересовала тема обучения с подкреплением – присоединяйтесь к RL club и RL papers.


Practice




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

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



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


Удача


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


Туда и обратно: решение прошлого года – третье место




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

Решение этого года – третье место



В этом году произошла пара изменений. Во-первых, просто участвовать в этом соревновании уже не было желания, хотелось его выиграть. Во-вторых, состав команды тоже изменился: Алексей Гринчук, Антон Печенко и я. Взять и выиграть – не получилось, но мы вновь заняли 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, чего уж.

Комментарии (11)


  1. alexbuyval
    27.11.2018 14:30

    Спасибо! Очень интересная и вдохновляющая статья! А в следующем году когда примерно начнется цикл на следующую конференцию?


    1. Scitator Автор
      27.11.2018 14:43
      +1

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


  1. alexbuyval
    27.11.2018 14:56

    А встречались ли в прошлых соревнованиях задачи по управлению автомобилем?


    1. Scitator Автор
      27.11.2018 15:18
      +1

      прямо сейчас идет – www.duckietown.org


  1. Hardwar
    27.11.2018 17:17

    А почему PyTorch?


    1. Scitator Автор
      27.11.2018 17:53

      Год назад я в основном писал на TF. Всяких TF.data, TF.keras тогда еще не было, был только TF.Estimator. Нормально работать с даткой было нельзя — аугментации получались некоторыми костылями. Да и Estimator иногда делал очень странные вещи under the hood, хотя даже банально «save N best checkpoints» сделать не мог. А уж MultiGpu через distributed training… в общем, довольно сложно и долго.

      И тогда я нашел PyTorch, в котором все было просто и понятно. Работа с данными – на порядок удобнее, возможности для MultiGPU – тоже. Итерации пошли быстрее, жизнь стала легче. После Estimator он был немного низкоуровневым, но это дело решилось разработкой Catalyst :)
      Вот так и перешел.


      1. Hardwar
        27.11.2018 18:35

        Интересно, спасибо. Недавно начали в deep learning, намучались в Keras с переделкой pretrained 3-x канальной сетки RGB в 4-х канальную при помощи копирования предтренированных весов одного из каналов (то есть получилось что-то вроде RGBB на входном convolution layer-e). В итоге добились того, что хотели, но явно большими усилиями, чем по-идее для этого требуются.


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


        P.S. Спасибо за статью, отлично, живо написано и придает вдохновения!


  1. Hardwar
    27.11.2018 17:18

    -


  1. ilmarin77
    28.11.2018 07:38

    Надо устроить встречу физтехов на NIPS!


  1. JayS
    29.11.2018 09:10

    Добрый день. Есть ли на конференции тренд на байесовские нейросети? Рассматривали ли вы соединение байеса и RL?


    1. Scitator Автор
      29.11.2018 09:36

      Дорожки с байесовкими методам уже давно присутствуют на конференциях по DL. На NeurIPS например, группа Ветрова регулярно публикует статьи по Bayes + DL.


      Bayes + RL — тоже есть. Deep Variational Reinforcement Learning for POMDPs — одна из последний работ в этой области от лондонских коллег. Если хочется большего overview, то в этом году на DeepBayes был день посвященный именно RL.


      Лично мне кажется, что использование Bayes в RL как минимум хорошо покажется себя в задачах со сложным исследованием среды (exploration problem) и в частично-обозримых средах (как раз POMDPs). И там и там нам требуется оценивать насколько агент уверен в своем "будущем", что хорошо ложится на байесовкие методы.