NeurIPS –– конференция, которая на данный момент считается самым топовым событием в мире машинного обучения. Сегодня я расскажу вам о своем опыте участия в конкурсах NeurIPS: как потягаться с лучшими академиками мира, занять призовое место и опубликовать статью.
![](https://habrastorage.org/webt/hb/kq/-v/hbkq-vnd_xgxhvcixlo-u8b_pmk.jpeg)
В чем суть конференции
NeurIPS поддерживает внедрение методов машинного обучения в различных научных дисциплинах. Ежегодно запускается порядка 10 дорожек, для решения актуальных проблем академического мира. По результатам соревнований победители выступают на самой конференции с докладами, новыми разработками и алгоритмами. Больше всего я увлечен обучением с подкреплением (Reinforcement Learning или RL), поэтому вот уже второй год участвую в RL-конкурсах, приуроченных к NeurIPS.
Почему NeurIPS
![](https://habrastorage.org/webt/ei/c2/us/eic2usvfs-brxmsjczvkvygpfwq.png)
NeurIPS в первую очередь нацелен на науку, а не на деньги. Участвуя в конкурсах, ты делаешь что-то действительно важное, занимаешься актуальными проблемами.
Во-вторых, эта конференция –– мероприятие мирового масштаба, ученые из разных стран собираются в одном месте, с каждым из которых можно пообщаться.
Кроме того, вся конференция наполнена последними научными достижениями и state-of-the-art результатами, знать и следить за которыми людям из области data science крайне важно.
Как начать?
Начать участвовать в подобных конкурсах довольно просто. Если разбираешься в DL настолько, что можешь дообучить ResNet –– этого достаточно: регистрируйся и вперед. Всегда есть публичный лидерборд, на котором можно трезво оценить свой уровень по сравнению с остальными участниками. А если что-то непонятно –– всегда есть каналы в slack/discord/gitter/etc для обсуждения всех возникающих вопросов. Если тема действительно “твоя”, то от получения заветного результата ничего не остановит –– во всех конкурсах, в которых я участвовал, все подходы и решения были изучены и реализованы прямо в процессе соревнования.
NeurIPS на примере конкретного кейса: Learning to Run
![](https://habrastorage.org/webt/hu/ws/d5/huwsd5weqocxiuqv3hugygmfqea.jpeg)
Проблематика
Походка человека является результатом взаимодействия мышц, костей, органов зрения и внутреннего уха. При нарушении работы центральной нервной системы могут возникать определенные двигательные расстройства, в том числе нарушение походки –– абазия.
Исследователи из Стэнфордской лаборатории нейромышечной биомеханики решили подключить к вопросу лечения машинное обучение, чтобы иметь возможность ставить эксперименты и проверять свои теории на виртуальной модели скелета, а не на живых людях.
Постановка задачи
Участникам был дан виртуальный скелет человека (в симуляторе OpenSim), у которого на месте одной ноги был протез. Задача состояла в том, чтобы научить скелет двигаться в определенном направлении с заданной скоростью. В ходе симуляции и направление, и скорость могли меняться.
![](https://habrastorage.org/webt/od/vj/np/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-образа. В нем были предусмотрены ограничения на время работы и ресурсы.
Из-за доступности лидерборда никто не показывает свою лучшую модель, чтобы в финальном раунде выдать “чуть больше обычного” и удивить соперников.
Почему так важны docker-образы
В прошлом году произошел небольшой инцидент при оценке решений в самом первом раунде. На тот момент проверка проходила через http-взаимодействие с платформой, и был найден лик условий проведения тестирования. Можно было узнать, в каких именно ситуациях оценивался агент и переобучить его только под эти условия. Что, конечно же, никак не решало реальную проблему. Именно поэтому приняли решение о переносе системы сабмитов на docker-образы и запуск на удаленных серверах организаторов. Dbrain пользуется такой же системой подсчета результата на конкурсах ровно из этих же соображений.
Ключевые моменты
Команда
![](https://habrastorage.org/webt/ty/ur/gp/tyurgpqbzb2zl2wimtzri0mnpwk.jpeg)
Первое, что важно для успеха всего предприятия – это команда. Как бы ты не был хорош (и как бы не были мощны твои лапищи) – участие в составе команды сильно повышает шансы на успех. Причина проста – разнообразие мнений и подходов, перепроверка гипотез, возможность распараллелить работу и провести больше экспериментов. Все это крайне важно при решении новых задач, с которыми вам предстоит столкнуться.
В идеальном варианте, ваши знания и умения должны находиться на одном уровне и дополнять друг друга. Так например, в этом году я подсадил нашу команду на PyTorch, а мне подкинули начальные идеи по реализации распределенной системы обучения агентов.
Как найти команду? Во-первых, можно вступить в ряды ods и поискать единомышленников там. Во-вторых, для RL-fellows есть отдельный чатик в телеграмме – RL club. В-третьих, можно пройти замечательный курс от ШАД – Practical RL, по окончании которого уж точно обзаведешься парочкой знакомых.
Стоит, однако, помнить о политике “сабмит – или не было”. Если хотите объединяться – сначала получите свое решение, засабмитьте, появитесь на лидерборде и покажите свой уровень. Как показывает практика, такие команды получаются куда более сбалансированными.
Мотивация
Как я уже писал, если тема “твоя” – то тебя ничего не остановит. Это значит, что область не просто тебе нравится, но вдохновляет тебя – ты горишь ею, ты хочешь стать лучшим в ней.
Я познакомился с RL еще 4 года назад – во время прохождения Berkeley 188x — Intro to AI – и до сих пор не перестаю удивляться прогрессу в этой области.
Систематичность
Третье, но столь же важное – надо уметь делать то, что ты обещал, вкладываться в соревнование каждый день и просто… решать его. Каждый день. Никакой врожденный талант не сравнится с умением делать что-то, даже по чуть-чуть, но каждый день. Именно для этого и потребуется мотивация. Чтобы преуспеть в этом, советую почитать DeepWork и AMA ternaus.
Time management
Еще одно крайне важное умение – способность распределять свои силы и правильно использовать свободное время. Совмещать fulltime работу и участие в соревнованиях – задача нетривиальная. Самое главное в этих условиях – не перегореть и выдержать всю нагрузку. Для этого нужно правильно управлять своим временем, трезво оценивать свои силы и не забывать вовремя отдыхать.
Overwork
На финальном этапе соревнования обычно складывается такая ситуация, когда буквально за неделю нужно сделать не просто много, а ОЧЕНЬ много. Ради лучшего результата нужно уметь заставить себя сесть и сделать последний рывок к заветному призу.
Из-за чего вообще может понадобиться переработать на благо соревнования? Ответ довольно прост – перенос дедлайнов. На таких соревнованиях организаторы часто не могут всего предугадать, из-за чего наиболее простым выходом является дать участникам больше времени. В этом году соревнование продлевалось 3 раза: сначала на месяц, потом на неделю и в самый последний момент (за 24 часов до дедлайна) – еще на 2 дня. И если во время первых двух переносов нужно было просто правильно организовать дополнительное время, то на последних двух днях надо было просто пахать.
Theory
![](https://habrastorage.org/webt/gf/rg/9q/gfrg9ql1ukvjmlbglwcizlfcpto.png)
Кроме всего прочего, не стоит забывать и про теорию – быть в курсе того, что происходит в области и уметь примечать релевантное. Так например, для решения прошлого года наша команда отталкивалась от следующих статей:
- Continuous control with deep reinforcement learning – базовая статья по deep reinforcement learning для задач с непрерывным пространством действий.
- Parameter Space Noise for Exploration – исследование о добавлении шума в веса агента для лучшего исследования среды. По опыту – одна из лучших техник для exploration в RL.
В этом году к ним прибавились еще “парочка”:
- A Distributional Perspective on Reinforcement Learning – новый взгляд на предсказания возможной награды. Вместо простого предсказания среднего значения вычисляется распределение будущего вознаграждения.
- Distributional Reinforcement Learning with Quantile Regression – продолжение предыдущей работы, но уже с “квантилизацией” распределения.
- Distributed Prioritized Experience Replay – работа из направления deep reinforcement learning at scale. О том, как правильно организовать архитектуру эксперимента для максимально эффективного использования доступных ресурсов и повышения скорости обучения агентов.
- Distributed Distributional Deterministic Policy Gradients – объедение трех предыдущих статей для задач с непрерывным пространством действий.
- Addressing Function Approximation Error in Actor-Critic Methods – отличная работа по повышению робастности RL-агентов. Рекомендую к прочтению.
- Data-Efficient Hierarchical Reinforcement Learning – развитие предыдущей статьи в области hierarchical reinforcement learning (HRL).
- Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor – авторы предложили метод тренировки стохастических политик при off-policy reinforcement learning. Благодаря этой статье стало возможно обучать не детерминированные политики даже в задачах с непрерывным пространством действий.
- Latent Space Policies for Hierarchical Reinforcement Learning – продолжение предыдущей статьи в области HRL с многоуровневыми стохастическими политиками.
- Diversity is All You Need: Learning Skills without a Reward Function – статья содержит подход с обучением множества случайных низкоуровневых стохастических политик без какой-либо награды от среды. Впоследствии, когда у нас задана reward function, наиболее коррелирующие с наградой можно использовать для обучения высокоуровневой политики поверх.
- Reinforcement Learning and Control as Probabilistic Inference: Tutorial and Review – обзор всевозможных maximum entropy reinforcement learning методов от Sergey Levine.
Также советую OpenAI подборку статей по reinforcement learning и ее версию для mendeley. А если вас заинтересовала тема обучения с подкреплением – присоединяйтесь к RL club и RL papers.
Practice
![](https://habrastorage.org/webt/xp/g7/it/xpg7itebqdpi3cwex33uzrzkidg.jpeg)
Знания только теории недостаточно — важно уметь реализовывать все эти подходы на практике и наладить корректную систему валидации для оценки решений. Например, в этом году мы узнали, что наш агент плохо справляется с некоторыми краевыми случаями только за 2 дня до конца соревнования. Из-за этого мы не успели полностью исправить нашу модель и недобрали буквально несколько очков до заветного второго места. Если бы мы обнаружили это хотя бы за неделю – результат мог бы быть лучше.
В качестве итоговой оценки решения выступала усредненная награда по 10ти тестовым эпизодам.
![](https://habrastorage.org/webt/jq/bj/yc/jqbjyctkjettuu2bqd19xcahssk.png)
На графике представлены результаты тестирований нашего агента: 9 из 10 эпизодов наш скелет проходил просто отлично (среднее – 9955.66), но один эпизод….эпизод 3 ему не давался (награда 9870). Именно эта ошибка привела к падению итогового скора до 9947 (-8 пунктов).
Удача
И напоследок – не стоит забывать о банальной удаче. Не стоит думать, что это противоречивый пункт. Наоборот, немного везения сильно способствует постоянной работе над собой: даже если вероятность удачи всего 10%, человек, который попробовал поучаствовать в соревновании 100 раз преуспеет намного больше, чем тот, кто попробовал всего 1 раз и отказался от идеи.
Туда и обратно: решение прошлого года – третье место
![](https://habrastorage.org/webt/mq/lx/i_/mqlxi_alc8pt0acnzwoi8twb8oo.jpeg)
В прошлом году наша команда — Михаил Павлов и я — участвовала в NeurIPS конкурсах в первый раз и основной мотивацией выступало просто участие в первом NeurIPS соревновании по reinforcement learning. Тогда я только закончил курс Practical RL в ШАДе и хотел проверить полученные навыки. В итоге мы заняли почетное третье место, уступив лишь nnaisene (Шмидхубер) и команде университета из Китая. На тот момент наше решение было “довольно простым” и основывалось на Distributed DDPG с parameter noise (публикация и выступление на ml.тренировках).
Решение этого года – третье место
![](https://habrastorage.org/webt/gf/qq/to/gfqqtoneh51dn47m3f7oicyqixk.jpeg)
В этом году произошла пара изменений. Во-первых, просто участвовать в этом соревновании уже не было желания, хотелось его выиграть. Во-вторых, состав команды тоже изменился: Алексей Гринчук, Антон Печенко и я. Взять и выиграть – не получилось, но мы вновь заняли 3е место.
Наше решение официально будет представлено на NeurIPS, а сейчас ограничимся малым количеством подробностей. Взяв за основу решение прошлого года и успехи off-policy reinforcement learning этого года (статьи выше), мы добавили к этому ряд собственных наработок, о которых расскажем на NeurIPS, и получили Distributed Quantile Ensemble Critic, с помощью которого и взяли третье место.
Все наши наработки –– система распределенного обучения, алгоритмы и прочее будут опубликованы и доступны в Catalyst.RL после NeurIPS.
Наша команда уверенно шла на 1е место на протяжении всего конкурса. Однако у больших ребят были другие планы – за 2 недели до конца соревнования на конкурс зашли сразу 2 крупных игрока: FireWork (Baidu) и nnaisense (Шмидхубер). И если с китайским гугл поделать ничего не удалось, то вот с командой Шмидхубера нам довольно долго удавалось честно бороться за второе место, уступив лишь с минимальным отрывом. Как мне кажется довольно неплохо для любителей.
Зачем это все?
- Связи. На конференцию приезжают топовые исследователи, с которыми можно пообщаться вживую, чего не дадут никакие email-переписки.
- Публикация. Если решение занимает призовое место, то команду приглашают на конференцию (а может и не одну) для презентации своего решения и публикации статьи.
- Предложение работы и PhD. Публикация и призовое место в такой конференции значительно повышают твои шансы на получение должности в таких ведущих компаниях как OpenAI, DeepMind, Google, Facebook, Microsoft.
- Real world value. NeurIPS проводится для решения актуальных проблем академического и реального мира. Можно быть уверенным, что результаты не уйдут в стол, а действительно будут востребованы и помогут улучшить мир.
- Драйв. Решать такие конкурсы… просто интересно. В условиях соревнования можно придумать много новых идей, протестировать разные подходы – просто чтобы быть лучшим. И давайте будем честны, когда еще ты можешь погонять скелетов, поиграть в игры и все это с серьезным видом и ради науки?
Настоятельно не рекомендую пытаться объяснить проверяющему вас американцу, что вы едете на конференцию, так как тренируете виртуальных скелетов бегать в симуляции. Просто поезжайте на конференцию с докладом.
Итоги
Участие в NeurIPS — это опыт, который сложно переоценить. Не стоит бояться громких заголовков — нужно просто взять себя в руки и начать решать.
И переходите на Catalyst.RL, чего уж.