яндекс соревнования по машинному обучению

Открытый онлайн-чемпионат для разработчиков по шести направлениям:

Призы

300 000₽ Первое место

250 000₽ Второе место

200 000₽ Третье место

150 000₽ Четвертое место

100 000₽ Пятое место

Этапы чемпионата

Вопросы

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

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

Вовсе нет. Это открытые соревнования для всех желающих. Двадцати лучшим финалистам мы предложим пройти отбор в Яндекс по упрощённой схеме — нам всегда нужны сильные специалисты.

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

Квалификация проходит в течение недели. Приступить к решению задач можно в любой момент, но важно уложиться в отведённое время — от двух до пяти часов в зависимости от направления. Финальный раунд состоится 16 октября. Подробности и ограничения по времени можно посмотреть в правилах.

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

В направлении «Алгоритм» могут участвовать все желающие, а в остальных — граждане России, Беларуси, Казахстана, Азербайджана, Армении, Киргизии, Молдовы и Узбекистана. Участникам должно быть не меньше 18 лет.

Источник

Как участвовать в соревнованиях по машинному обучению. Лекция в Яндексе

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

— Всем привет. Меня зовут Артур Кузин, я lead data scientist компании Dbrain.

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

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Я всё это время работал научным сотрудником, и это никак не было связано ни с ML, ни даже с программированием. Это показывает, насколько низок порог входа в машинное обучение, насколько быстро можно развиваться в этом. Дальше, в районе 2013 года, друзья позвали меня в стартап, который занимался ML. И в ходе 2–3 лет я изучал и программирование, и ML одновременно. Мой прогресс был довольно медленный — я изучал материалы, копался в этом, но это было не так быстро, как происходит сейчас. Для меня всё поменялось, когда я начал участвовать в соревнованиях по ML. Первый конкурс был от «Авито», про классификацию машин. Я не особо знал, как в нём участвовать, но сумел занять третье место. Сразу после этого стартовал другой конкурс, уже посвящённый классификации объявлений. Там были картинки, текст, описание, цена — это было комплексное соревнование. В нём я занял первое место, после чего почти сразу получил оффер и меня взяли в «Авито». Тогда не было позиции джуниора, меня взяли сразу миддлом — почти без релевантного опыта.

Дальше, когда я уже работал в «Авито», то начал участвовать в соревнованиях на Kaggle и примерно за год получил гранд-мастера. Сейчас я на 58 месте в общем рейтинге. Это мой профиль. Проработав в «Авито» полтора года, я перешёл в Dbrain и сейчас являюсь чем-то вроде руководителя направления по data science, координирую работу семи дата-саентистов. Всё, что я использую в работе, я узнал из соревнований. Поэтому я считаю, что это очень прикольная тема, и всячески пропагандирую участвовать в соревнованиях и развиваться.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Меня иногда спрашивают, что нужно сделать, если хочется стать дата-саентистом. Здесь есть два пути. Первый прослушать какой-нибудь курс. Их довольно много, они все довольно качественные. Но для меня лично это вообще не работает. Все люди разные, но мне это не нравится, просто потому что, как правило, в курсах очень абстрактные задачи, и когда я прохожу какой-нибудь раздел, то не всегда понимаю, зачем мне нужно его знать. В противоположность этому подходу можно просто взять и начать решать соревнования. И это совершенно другой flow в плане подхода. Он отличается тем, что вы сразу приобретаете некий багаж знаний и начинаете изучать новую тему, когда сталкиваетесь с неизвестным. То есть вы начинаете решать и понимаете, что вам не хватает знаний о том, как обучать нейросеть. Вы берёте, гуглите и изучаете — только когда вам это необходимо. Это очень просто в плане мотивации, прогресса, потому что у вас уже есть строго сформулированная в рамках конкурса задача, целевая метрика и очень много поддержки в плане чатика Open Data Science. И, в качестве дальнего бонуса, — то, что ваше решение станет проектом, которого сейчас ещё нет.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Почему же это так весело? Откуда положительные эмоции? Идея в том, что, когда вы отправляете сабмит и он чуть-чуть лучше предыдущего, то говорят — ты улучшил метрику, это прикольно. Вы поднимаетесь вверх по лидерборду. В противоположность этому, если вы ничего не делаете и не отправляете сабмиты, то вы опускаетесь вниз. И это вызывает обратную связь: вам хорошо, когда вы прогрессируете, и наоборот. Это прикольный механизм, который эксплуатирует, кажется, только Kaggle. И другой момент: Kaggle эксплуатирует тот же механизм зависимости, что и игровые автоматы и Tinder. Вы не знаете, лучше ваш сабмит или хуже. Это вызывает ожидание результата, который вам неизвестен. Таким образом, Kaggle вызывает сильную зависимость, но она довольно конструктивна: вы развиваетесь и стараетесь улучшить своё решение.

Как получить первую дозу? Нужно залезть в раздел kernels. Там выкладывают некоторые куски пайплайнов или решения целиком. Отдельный вопрос — зачем люди это делают. Человек потратил время на разработку — в чём смысл выкладывать его в паблик? Им могут воспользоваться и обойти автора.

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

Если вы взяли чужое решение, запустили его, начали обучать, то следующее, что я крайне рекомендую сделать, — посмотреть в данные. Банальный совет, но вы не поверите, как много народу из топа им не пользуются. Чтобы понять, почему это важно, я советую посмотреть доклад Евгения Нижибицкого. Он рассказывает про лики в картиночных соревнованиях и про лик в Airbus, который тоже можно было увидеть, просто посмотрев в данные. Это занимает не очень много времени и помогает понять задачу. А лики в картинках были про то, что на разных платформах и в разных конкурсах можно было получить ответы теста из train. То есть вы могли не обучать никакую модель, а просто посмотреть в данные и понять, как можно собрать ответы для вашего теста — частично или полностью. Это такая привычка, которая важна не только в соревнованиях, но и в реальной практике, когда вы будете работать с дата-саентистами. В реальной жизни, скорее всего, задача будет сформулирована плохо. Её формулируете не вы, но вам нужно понимать, в чём её суть и суть данных. Привычка смотреть в данные очень важна, потратьте на неё время.

Дальше нужно понять, в чём состоит задача. Если вы посмотрели в данные и понимаете, каков таргет… Вы же, если я правильно понимаю, в большинстве своём, из Физтеха. У вас должно быть некое критическое мышление, наталкивающее вас на вопрос: почему люди, которые оформили соревнование, сделали всё правильно? Почему бы не поменять, например, целевую метрику, искать нечто другое, а уже из новой метрики собрать правильные вещи? На мой взгляд, сейчас, когда есть куча туториалов и чужого кода, сделать feed predict — не проблема. Обучить модель, обучить нейросеть — очень простая задача, доступная очень широкому кругу людей. Но важно понимать, какой у вас таргет, что вы предсказываете и как собрать вашу целевую метрику. Если вы предсказываете что-то нерелевантное в объективной реальности, то модель просто не обучается и вы получаете очень плохой скор.

Примеры. Было соревнование, которое проходило на Topcoder Konica-Minolta.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Оно заключалось в следующем: у вас есть две картинки, верхняя, и на одной из них есть грязь, маленькая точка справа. Надо было ее выделить и отсегментировать. Казалось бы, очень простая задача, и нейросети должны решать ее на раз. Но проблема, что эти два снимка, которые делались либо с разницей во времени, либо с разных камер. В итоге одна картинка немного съехала относительно другой. Масштаб при этом был реально очень небольшой. Но была другая особенность этой задачи в том, что маски тоже небольшие. Есть картинка, которая съехала относительно другой, и при этом маска еще съехала относительно ее. Примерно понятно, в чем сложность.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Алексей Буслаев на третьем месте, он взял сиамскую нейросеть с двумя входами так, чтобы эти сиамские головы выучили некоторые преобразования относительно этой искаженной картинки. После этого у него эти фичи объединялись, был набор сверток, и получался некоторый предикт. Чтобы нивелировать этот косяк в данных, он собрал довольно сложную сеть. Я, например, еще ни разу не обучал сиамскую сеть, мне не приходилось это делать. Он это сделал, это очень прикольно, занял третье место. На первом месте оказался Евгений (нрзб.), который просто отресайзил картинку. Он увидел это как косяк в данных, потому что в них посмотрел, сделал ресайз картинки, и обучил ванильный UNet. Это очень простая нейросеть, она просто в учебнике, есть в статьях. Это показывает, что если посмотреть в данные и подобрать правильно таргет, то можно с простым решением оказаться в топе.

Я оказался на втором месте, потому что я дружу с Женей, после этого топкодеры на меня почему-то обиделись и не берут в команду на Kaggle. Но они очень крутые ребята, Topcoder заняли 5-6 место, это (нрзб.) и Виктор Дурнов. Александр Буслаев занял третье место. Они дальше объединились и показали класс на соревновании, которое было на Kaggle. Это как раз тоже пример очень красивого решения, когда чуваки не просто разработали монструозную архитектуру, а подобрали правильно таргет.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Ссылка со слайда

Здесь задача заключалась в том, что нужно сегментировать клетки, при том не просто говорить, где клетка есть, а где нет, а нужно было выделять отдельные клетки, типа инстасегментация каждых независимых клеток. При этом до этого соревнования было очень много соревнований на сегментацию, и утверждалось, что задача на сегментацию решена сообществом ODS довольно хорошо, на уровне state of the craft, некоторый передний край науки, который позволяет решить эту задачу хорошо.

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

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

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

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

На этом слайде представлены логи обучения с соревнования, которое проходит сейчас, Kaggle соль. У меня еще есть куча видеокарт, это тоже некоторый бонус. Идея в том, что с помощью пайплайна я провел grid search поиска архитектур, которые мне показались наиболее интересными. Я просто сделал один конфиг запуска для всех архитектур, условно, форум по зоопарку нейросетей, прошелся и обучил все нейросети, не принимая никаких усилий. Это очень большой бонус, и это то, что я переиспользую от соревнования к соревнованию и в работе. Поэтому я крайне агитирую не просто обучать нейросети, но еще думать о том, что вы обучаете и что вы пишите в плане пайплайна, что вы должны это переиспользовать.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Здесь я выделил некоторые ключевые вещи, которые должны быть в пайплайне обучения. Это конфиг запуска, который полностью определяет процесс обучения. Где вы указываете все параметры про данные, про нейросети, про лоссы — все должно быть в конфиге запуска. Это должно быть контролируемо. Дальше логирование. Красивые логи, которые я показал, это результат того, что я записываю каждый свой шаг.

Модульность означает, что у вас не должно занимать много времени, чтобы добавить новую нейросеть, новую аугментацию, новый датасет. Это все должно быть очень просто и поддерживаемо.

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

Некоторые могут спросить: я же не умею кодить, что же делать, как разработать пайплайн? Есть решение.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Ссылки со слайда: первая, вторая, третья

Сергей Колесников — это мой коллега, который работает в Dbrain, он давно разрабатывает такую штуку. Сначала он называл ее PyTorch Common, потом назвал «Прометей», сейчас это называется «Каталист». Скорее всего, через неделю название будет другое, но ссылка будет на следующее название, переходите по ссылке «Каталист».

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

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

В противоположность, есть другая либа FastAI, недавно выпустили версию 1.0, но там отвратительный код и ничего непонятно.

Вы можете ее освоить, это даст вам некоторый прирост, но из-за того, что она очень плохо написана в плане кода, у них свой флоу в плане того, как это должно быть написано. Начиная с некоторого момента, вы не будете понимать, что происходит. Поэтому я не рекомендую FastAI, я рекомендую пользоваться либой «Каталист».

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Теперь предположим, вы прошли через все это, у вас есть свой пайплайн, свое решение, и можно теперь участвовать в команде. Как раз Эмилю задавали вопрос, насколько оправданно объединяться в команду, если вы участвуете, как это происходит. Мне кажется, что объединяться в команду стоит в любом случае, даже если вы находитесь не в топе, а где-то в середине. Если вы разрабатывали свое решение сами, то оно всегда отличается от решения других людей в некоторых мелочах. И при объединении оно почти всегда дает буст с другими участниками.

Кроме этого это весело, это некоторая командная работа в плане того, что теперь у вас будет общий репозиторий, где вы сможете посмотреть код друг друга, у вас есть общий формат сабмитов и чатик, где происходит все веселье. Социальное взаимодействие и soft skills тоже очень важны в работе, которые тоже стоит развивать.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

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

Предположим, вы прошли весь этот круг. Что вы вынесли?

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Скорее всего, вы научились запускать чужой код. Очень надеюсь, что вы привили привычку смотреть в данные. Вы понимаете задачу, научились вести эксперименты, у вас есть какое-то свое решение, и теперь вы можете оформить его в виде проекта. Если посмотреть абстрактно, то это очень похоже на нормальную работу в какой-нибудь IT-компании. Если вы прошли через соревнование и показали хороший результат, это сильный пункт в резюме, по крайней мере, для меня. Я где-то прособеседовал человек 20-25, когда принимал на работу в Dbrain. Там можно было выделить некоторые граничные случаи. Был чувак, который просто позапускал public kernel, и не особо в них разобрался. Это выглядело плохо для меня, я как раз хотел, чтобы чувак разбирался в вопросе, я его не взял.

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

Если вопросы про личную выгоду, надеюсь, я закрыл, зачем же это нужно компаниям?

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Я работал в «Авито», они регулярно устраивали конкурсы по анализу данных. Для этого есть несколько причин. Когда проводится конкурс, нужно собрать как минимум датасет, и очень хорошо сформулировать задачу, которая представляет собой некоторую боль.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Ссылка со слайда

То есть формулировка задачи плюс датасет — это уже очень много для компании. Например, когда «Авито» проводили конкурсы по дубликатам, это было еще до того, как я начал с ними работать, они просто собрали датасет, переобучили старые модели и сильно подняли качество. Сбор датасета — это работа, которая нужна, чтобы поднять качество моделей.

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

И кроме того, не секрет, что обычно соревнования — это еще и хантинг. Компания обычно берет на работу людей из топа, чтобы они реализовали это решение у нас. Например, после дубликатов «Авито» позвали на работу Дмитрия Соболевского, который работал со мной столько же времени. Это был большой бонус для «Авито» — они нашли замотивированного человека, который хотел допиливать это решение для продакшена.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

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

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

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

В качестве примера — курс на Coursera о том, как выигрывать соревнования. Дальше — сайт ML-тренировок и ODS-чатик для обсуждения. У меня всё.

Источник

Вдохновлялись продакшеном и баскетболом: как Яндекс готовит чемпионат по программированию

В конце мая начнётся наш чемпионат по программированию. Он будет проходить в онлайне и позволит проверить себя в одной из четырёх сфер: бэкенд- или фронтенд-разработке, машинном обучении или аналитике данных. Задачи для секций разработали в управлении машинного интеллекта и исследований, Поиске и геосервисах.

яндекс соревнования по машинному обучению. Смотреть фото яндекс соревнования по машинному обучению. Смотреть картинку яндекс соревнования по машинному обучению. Картинка про яндекс соревнования по машинному обучению. Фото яндекс соревнования по машинному обучению

Всем участникам сначала предстоит преодолеть квалификационный раунд. После подачи заявки вы сами выберете, когда его проходить. Квалификация 4-часовая и включает в себя от 4 до 6 задач. Самых лучших мы пригласим к участию в финале, который пройдёт 1 июня, тоже в онлайне. Результаты станут известны 5 июня. Победители в каждом направлении получат по 300 тысяч рублей, второе место — 150 тысяч рублей, третье — 100 тысяч. Регистрация открыта и продлится до последнего дня квалификационного раунда — 26 мая, но лучше отправить заявку пораньше.

В этом посте мы поделимся опытом проведения подобных конкурсов — в части аудитории и составления сложных алгоритмических задач.

Чемпионат является развитием идеи, которую мы реализовали в 2017–2018 годах в серии Яндекс.Блиц. Отличие в том, что Блиц был именно серией из отдельных конкурсов по разным направлениям. Их объединял только формат, а проходили они в совершенно разное время. Обязательно почитайте хабрастатьи с разборами задач к каждому конкурсу: по машинному обучению, бэкенду, фронтенду и мобильной разработке.

При подготовке чемпионата и этого поста мы много общались с теми, кто занял высокое место в Блице и затем устроился в Яндекс. Было важно учесть реальный опыт ребят, взгляд со стороны участника, чтобы сделать соревнование ещё более прозрачным и интересным.

Почему стоит участвовать

Чемпионат, как и прошедший Блиц, — это короткий путь в компанию: участники из топа смогут выйти к нам на работу по упрощённой схеме собеседований. Но мы ждём далеко не только тех, кто ищет работу и рассматривает Яндекс. Мы рассчитываем, что к конкурсам присоединятся представители ещё двух категорий разработчиков. Первая категория — те, кто интересуется алгоритмами, занимается спортивным программированием, а также много участвует (или участвовал) в олимпиадах и других конкурсах. Таким людям мы предложим достойные их уровня задачи и интересный опыт в копилку.

Вторая категория — опытные программисты и аналитики. У них будет возможность продемонстрировать свой опыт и бэкграунд. Дело в том, что мы составили очень разноплановые задачи. Это отличает чемпионат от конкурсов на Kaggle — не в лучшую и не в худшую сторону, просто Kaggle предоставляет несколько иные возможности. Там составители обычно дают такие условия и данные, которые позволяют вам испытать себя в конкретной области (при желании участники успевают её изучить). Раунды нашего чемпионата проходят за считанные часы и фиксируют текущие знания. Можно не разбираться, например, в голосовых технологиях или компьютерном зрении, но показать такое мышление, которое в перспективе позволит вам быстро окунуться в любую тему. Конечно, сравнение с Kaggle актуально только для ML-трека чемпионата.

Production-like

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

Идеи задач

Когда задачи для конкурса по спортивному программированию составляются не сами по себе, а на основе задач, реально возникающих в сервисах, то процесс их составления совсем другой. Причина в том, что в сервисах руководитель или коллега приносит разработчику задачу в иной формулировке, в ином контексте, чем когда условие поступает от организаторов конкурса к их участникам. Штатный программист или даже стажёр, особенно если он проработал в компании какое-то время, гораздо глубже погружён в процессы своего отдела, чем внешний (даже очень талантливый) разработчик. Нельзя формулировать им проблему одинаково, тем более что от участника конкурса требуется придумать решение за гораздо меньшее время. Среда разработки у него тоже другая: есть только входной и выходной файл, а сотрудник работает в репозитории, во внутреннем интерфейсе, со всеми инструментами и т. п.

«Чистка» условий

Так что задачи мы брали из боевого окружения, но затем всегда спрашивали себя — поймут ли их участники? Иногда выяснялось: чтобы для широкой аудитории разработчиков сделать условие понятным, нужно написать к нему большую преамбулу, ввести терминологию, с которой специалист в компании давно знаком, и т. п. Такой подход сработал бы не всегда: в конкурсе важно, чтобы условие было ёмким, чтобы его можно было быстро прочесть и перейти к самому главному — к разработке решения. Поэтому в случаях, когда вместе с преамбулой условие стало бы слишком громоздким, мы старались переформулировать его и снять необходимость в преамбуле. Другая формулировка часто требовалась ещё и потому, что исходная задача содержала внутреннюю информацию Яндекса, которую нельзя разглашать за пределами компании. В результате задача могла стать более абстрактной, уже не такой похожей на аналоги в боевом продакшене.

Интересно, что обратная ситуация — когда условие сходу удавалось сформулировать ёмко и не потерять близость к продакшену — часто приводила к тому, что задача получалась сложной. Например, это было видно в финале Блица по машинному обучению, в задачах, связанных с распознаванием изображений. Чемпионат этого года не станет исключением. Участников, среди прочего, ждут задачи про машинный перевод — ёмко сформулированные, сложные в реализации и действительно взятые из боевого проекта (Яндекс.Переводчика).

Что мы проверяем

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

Мы упомянули алгоритмическое мышление — в том смысле, что нужно уметь реализовывать нужный алгоритм средствами выбранного вами языка: без дополнительных библиотек. Скорее всего, в реальной работе (и до, и после конкурса) вы будете пользоваться различными дополнительными библиотеками, которые просто вызывают нужные алгоритмы и сильно уменьшают объём кода. Умение их подключать — как раз из разряда того, чему «можно научить». Нам интереснее убедиться, что вы, вызывая какую-то библиотеку, понимаете, что и как она делает. Зная алгоритмы изнутри, вы будете более эффективно их применять — уже без необходимости реализовывать их самостоятельно.

Соревнования по аналитике

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

Общая идея здесь такая же, как в других направлениях: проверить умения, которые используются специалистами в Яндексе. Поэтому вопрос — а какие навыки могут пригодиться?

Ключевые навыки хорошего аналитика в Яндексе — это способность генерировать гипотезы, извлекать полезный сигнал из нечётких условий задачи, неоднозначных или шумных данных. Наши аналитики пишут, как правило, на Python и работают с большими потоками данных, например с логами от Яндекс.Метрики, пользовательскими сессиями, техническими логами серверов и т. п.

Для решения аналитических задач в рамках чемпионата, равно как и для дальнейшей работы в Яндексе, очень полезно знать основы математической статистики и теории вероятности. Это базовые знания, которые помогают делать корректные, основанные на данных выводы о процессах.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *