Никита Сазанович о машинном обучении в Питерской Вышке и об автономном вождении
Команда JetBrains Research взяла первое место в AI Driving Olympics в дисциплине Lane Following на NeurIPS 2019. Для команды эта победа - вторая подряд: еще одним успехом было выступление на соревновании на международной конференции робототехники ICRA2019, прошедшей в Монреале в мае 2019 года. AI Driving Olympics – соревнования по применению технологий искусственного интеллекта в управлении беспилотным транспортом. Они проводятся на базе платформы Duckietown, которая представляет собой уменьшенную модель городской транспортной среды. В нее входят дороги с разметкой, транспортные средства, светофоры, строения и препятствия.
Мы поговорили с участником команды, студентом первого курса магистратуры Питерской Вышки Никитой Сазановичем о подготовке к соревнованию, об образовании по специальности «Машинное обучение», а также о сходстве и различии между беспилотными роботами, которые объезжают игрушечных уток, и разработками Uber.
— Никита, здравствуйте! Чем вы занимались сегодня?
— Я работаю в JetBrains Research. Сегодня с самого утра занимался кодом, разработкой после соревнования. Мы собираемся участвовать в следующих AI Driving Olympics, и сейчас пишем код так, чтобы им и дальше можно было пользоваться. Работаем над ошибками, смотрим, что хорошо получилось. В финале организаторы запускают алгоритм на другой трассе и с чуть другими машинами, чем у нас, и можно посмотреть, где робот съезжает не туда, или, наоборот, едет хорошо. Правильно было бы этот опыт сохранить, учесть и в следующий раз использовать.
— Расскажите о себе. С чего началось ваше обучение?
— Я родом из небольшого городка в Белоруссии. Я довольно неплохо участвовал в олимпиадах по программированию – это почти все, чем я занимался в школе. В итоге два раза выиграл республиканскую олимпиаду в 10 и 11 классе, а потом в 11 взял серебряную медаль на международной олимпиаде. По ним я поступил в СПбАУ.
Почему туда? В то время сам университет был довольно новым. В СПбАУ сначала были аспиранты, потом магистры, потом появились бакалавры. Когда я поступал, это был только второй набор. Было видно, что программу разрабатывают знающие люди, а еще ее поддерживал JetBrains, и это показалось мне довольно интересным. Еще понравилось, что она была новая, а не устоявшаяся по плану, который не изменяется долгое время. Была возможность повлиять. После первого набора программа поменялась очень сильно, ну, и мы тоже помогали. Опросы, которые теперь устраивают в Вышке каждый модуль, в АУ тоже проводили, и было заметно, что в зависимости от наших ответов многое менялось. От набора к набору отличались курсы, программы курсов. Темы какие-то убирали, еще что-то другое подстраивалось. До июня 2018 года я три года учился в СПбАУ, затем вместе с остальными моими одногруппниками перевелся в Питерскую Вышку. Здесь я сейчас учусь на первом курсе магистратуры.
— Почему вы решили пойти в магистратуру?
— Мне кажется, в машинном обучении есть, что еще поучить. Я смотрел программы за рубежом, и в большинстве из них три года идет общая образовательная программа, только четвертый год – машинное обучение. У нас машинное обучение было два года, но все равно в бакалавриате мы изучили только какие-то основные техники этой области. В магистратуре можно заниматься этим еще глубже. То, что мне понравилось именно здесь – магистерскую программу делают те же люди, которые разрабатывали бакалавриат. Получается, что если в бакалавриате были какие-то базовые курсы, то в магистратуре идут те, которые надстраиваются над базовыми. Ничего не пересекается, второй раз не надо учить одно и то же. С каждым новым курсом знания только добавляются. Это один из значительных факторов. Я смотрел программу в зарубежных магистратурах, рассматривал в Германии много университетов, в Швейцарии несколько. Получалось, что там многие курсы пересекаются. Например, «Введение в обработку естественного языка» у нас уже было на четвертом курсе, а в некоторых зарубежных программах по машинному обучению, популярных в Европе, его изучают только в магистратуре.
— А как вы выбрали именно специализацию «Машинное обучение»?
— Сначала я занимался просто олимпиадным программированием, у меня не было понимания, какую конкретно область я хочу изучать. Первые два курса была общеобразовательная программа, потом нужно было выбрать специализацию. Я подумал, что машинное обучение – это то, чем было бы интересно позаниматься в университете. Там были интересные демонстрации, и мне понравилась сама идея обучения с больших данных, разработки алгоритмов, которые по большим данным учатся делать какие-то вещи на таком же уровне, на котором их способен делать человек. С третьего курса я все проекты делал по машинному обучению.
— Расскажите, какие были проекты?
— В JetBrains Research есть лаборатория «Методы машинного обучения в области программной инженерии», ее руководитель – Тимофей Брыксин. На третьем курсе я был в этой лаборатории, занимался машинным обучением над программным кодом. Когда разработчик что-то пишет и не понимает, например, как функция работает, он ищет, как ей пользоваться. То, что мы делали – по файлу, который открыт у разработчика, собирали контекст, и, используя Google-поиск, формировали запрос, который выдавал бы наиболее релевантные результаты. Например, какая-то ошибка. То, что мы хотели – показать случаи, когда у кого-то была такая же проблема, чтобы можно было этот опыт сравнить.
На четвертом курсе я перешел в лабораторию Алексея Шпильмана. Это более общее машинное обучение. То, чем я занимался там – обучение бота, который играет в Dota 2. Мы взяли игры профессиональных игроков Dota 2 и бот учился, используя их. Это очень ускоряло процесс. Довольно быстро – за 12, за 24 часа – можно было уже увидеть какую-то более-менее разумную игру. Эту проектную работу мы делали с Даниелем Куденко из университета Йорка (Великобритания), с ним тесно взаимодействовала наша лаборатория в JetBrains Research. В итоге проект стал моим дипломом 4 курса.
(Примечание: статью Никиты с техническими подробностями этого проекта можно прочесть в нашем блоге на Хабре)
— Сейчас, на первом курсе магистратуры, вы решили заняться автономным вождением?
— В каком-то смысле, сейчас я продолжаю. Раньше я совмещал. Пока я писал диплом, я также участвовал в AI Driving Olympics. В мае была защита дипломов – и в мае же были соревнования в Монреале, в Канаде. Это одно и то же машинное обучение, правда, там методы слегка разные.
— Почему вы заинтересовались этой темой?
— Автономное вождение – одна из тех тем, где можно увидеть реальный результат. То, что было в олимпиадном программировании: вы пишете код, он что-то исполняет на компьютере, и результат вы видите тоже на компьютере. Робототехника – та область, где можно увидеть результат реально. Есть робот, если вы его правильно запрограммируете, он что-то будет делать. В автономном вождении вы программируете автомобиль, и он потом ездит. Мне это показалось интересным.
— Как вы готовитесь к соревнованиям? Как распределяете задачи в команде?
— В нашей команде есть представители двух лабораторий: машинного обучения и робототехники. Вообще, участвовать в соревновании – это была инициатива робототехников. Сама платформа Duckietown появилась в 2016 году в Массачусетском технологическом институте. С тех пор робототехники довольно плотно с ней взаимодействовали и писали роботов без машинного обучения. Когда я пришел в JetBrains Research, проводилось первое соревнование AI Driving Olympics. Робототехники предложили взаимодействовать, и из всех проектов, которые были, мне понравился именно этот. С тех пор мы уже три раза участвовали вместе.
То, чем я занимался на первом, втором и третьем соревнованиях – это именно разработка алгоритмов машинного обучения. Есть симулятор этих машинок, и есть реальная трасса. Моя работа – сидеть с ноутбуком и пытаться обучить алгоритм, который хорошо ездит в симуляторе. На еженедельных встречах с лабораторией робототехники мы обсуждаем результаты и смотрим, как алгоритм, который был научен в симуляторе, ездит в реальном мире. Задача лаборатории робототехники – чтобы робот работал, и можно было протестировать наши алгоритмы. У них есть комната с трассой и машинками. Можно собирать разные города, разные трассы, разное освещение. Также они разрабатывают алгоритм без машинного обучения.
Хорошо сложилось, что мы можем протестировать все в реальности и посмотреть, как роботы ездят. Такая возможность появилась у нас ко второму и третьему соревнованию. Многие команды разрабатывали какие-то алгоритмы только в симуляторе, а потом на соревнованиях в реальности ничего не ехало: из-за освещения, из-за того, что роботы слегка разные. На первом соревновании совсем плохо было у людей. Есть очень много деталей, которые нужно учитывать, чтобы результат был. Это не то что на одном и том же языке программирования на компьютере и отлаживать, и запускать.
Мы совсем недавно тестировали наше решение. Как сели с обеда, так до вечера и просидели, и было видно, как роботы по-разному ездят в обед и вечером из-за освещения. Проект еще только недавно появился, и в базовом решении, которое организаторы дают, они тоже ездят по-разному. Мы пытаемся с этим бороться.
— Расскажите о предыдущих соревнованиях.
— Соревнования привязаны к двум конференциям: одна это NeurIPS, которая проходит в декабре, и вторая это ICRA, которая проходит в мае. Первое состоялось в декабре, ровно год назад, в Монреале. Второе – в Монреале в мае. Сейчас, в декабре, было в Ванкувере. Я ездил на второе. Там были я, представитель робототехники и Андрей Иванов, вице-президент по инвестициям, исследованиям и образовательным проектам JetBrains. Соревнование проходило в холле торгового комплекса, на первом этаже, и обычные люди, которые пришли за покупками, могли подойти посмотреть. Достаточно много человек собралось. Было интересно смотреть, как роботы прямо перед вами ездят, и приятно быть на соревновании, на котором вы победили: по счастливым обстоятельствам мы выиграли в тот раз. Следующее соревнование, четвертая часть, будет в Париже. Наверное, мы тоже туда поедем лично. По соревнованиям, которые в мае, мы ездим, а в декабре как-то не сложилось.
— Как определяют победителя?
— Правила перед каждым соревнованием меняются. Бывает иногда, что только за неделю или две объявляют финальные критерии. И есть разные части состязания. Первая: разные трассы, разное освещение, всякие утки стоят, и нужно проехать в полосе. Сейчас за 15 секунд нужно проехать как можно дальше, не заезжая на противоположную полосу, не съезжая и не врезаясь ни во что. Забавно, что во время первых соревнований критерий был – до съезда. Никто не ожидал, что вы будете держаться в полосе 15 секунд. На втором и третьем соревнованиях критерии покрепче становятся. При этом важно не только проехать не съезжая, важна еще и скорость. Скоро это просто перейдет в гонки по городу. Вторая часть – появляются чужие машины, автоуправляемые боты. Нужно, не врезаясь в них, тоже ехать по трассе. В третьей части есть еще и перекрестки. Это гораздо сложнее, потому что есть правила движения, которые авторы установили. Хочется, конечно, чтобы не мы указывали роботу, как ездить, а алгоритм машинного обучения автоматически сам все понимал. Например, если помеха справа, то надо пропустить, но если другая машина почему-то вас пропускает и просто стоит, то нужно ехать. В каждой из трех частей можно поучаствовать, и в каждой нужно проехать как можно дальше. Организаторы запускают таймер, а потом идут и считают, сколько клеток вы проехали.
— Много ли было соперников в этот раз, и как вам удалось победить?
— В этот раз всего было 33 команды. В финале их было 8, все проехали по квалификационному кругу, потом осталось 4, и они проехали еще и финальный круг. Сейчас мы смогли победить именно алгоритмом машинного обучения. Довольно интересно для нашего направления, что удалось довести до конца один подход. В прошлый раз у нас было смешанное робототехническое решение и машинное обучение. Разрешено пользоваться всем, как машинным обучением, так и робототехническим подходом, и один из вопросов, который интересует в том числе и организаторов: возможно ли лучше справиться с задачей чисто машинным обучением, чем робототехникой? Раньше всегда побеждали робототехники. Сейчас уже более плотное соперничество. Ожидается, что чем дольше будет идти соревнование, тем больше алгоритмы машинного обучения будут побеждать.
Наше решение, по сути, просто смотрело на то, как ездит какой-то эксперт, и пыталось повторять за ним. У организаторов есть открытая база логов. Любой может поездить и загрузить туда свое видео. Возможно, нашим преимуществом было то, что мы еще и сами записывали, как ездит эксперт. Люди из робототехники сидели с пультом в лаборатории, управляли машиной по трассам и полностью записывали видео. Так что у нас, возможно, датасет был чуть больше. Ну и сам алгоритм наверняка отличался от других.
— Получается, в разработке алгоритма вам помог ваш дипломный проект?
— Да, здесь есть связь с моим дипломом: раньше бот смотрел, как игроки играют, а здесь мы смотрим, как водитель управляет машиной.
— Собираетесь ли вы продолжать?
— Мы будем участвовать в AI Driving Olympics в мае, и мне бы хотелось продолжить разрабатывать то решение, которое есть сейчас. Робототехникам, наверное, хотелось бы свое решение продолжить. Ну, посмотрим, найдем какой-то компромисс между двумя. Соревнование начнется как раз, когда я вернусь со стажировки, так что хотелось бы продолжать в нем участвовать.
— Расскажите о стажировке.
— Чем магистратура хороша – есть возможность работать где-то. Сейчас я еду в Цюрих на 17 недель, на стажировку в Google Brain. Это будет моя научная работа, а курсы в университете я буду закрывать удаленно. Там собираюсь заниматься машинным обучением. Google Brain – это одна из первых индустриальных лабораторий, которая взялась за эту тему. Они разработали TensorFlow, популярную программную библиотеку для машинного обучения. Будет интересно посмотреть на то, как обучать очень большие модели. Вообще, чем индустрия отличается от академии – это тем, что у них совсем другие ресурсы, поэтому есть возможность с очень большими данными работать.
— На каких еще стажировках вы были?
— Летом была стажировка в Канаде, в Торонто. В исследовательском подразделении Uber. Это была одна из первых моих исследовательских стажировок, и в какой-то степени благодаря участию в AI Driving Olympics я туда и попал. Одна из ветвей применения результатов соревнования – это как раз создание автономного пилота.
Машинки бывают с единственной камерой в качестве сенсора, вроде тех, с которыми мы сейчас занимаемся. Они ездят по игрушечной дороге с игрушечными утками-препятствиями – но в Uber, конечно, не игрушечные утки и не игрушечные машины. Там реальные машины, и там создают полностью автономный автомобиль. Даже есть возможность на этом автомобиле в действительности поездить и посмотреть, что изменилось после того, как вы как-то доработали алгоритм.
У них очень много данных. Мы в JetBrains Research сами ездим с пультом и записываем, а у них есть водитель, который ездит по улицам Торонто или Сан Франциско. Он собирает данные, которыми можно пользоваться, и только ваше воображение ограничивает решение, потому что этих кадров очень много. Кажется, около миллиона. Мы, наверное, пока тысяч десять только насобирали.
Правда, что мне больше нравится здесь: в Uber-е был базовый подход из последовательности алгоритмов, и ваша задача, в основном - это улучшение одного алгоритма в последовательности. В JetBrains Research и среде Duckietown есть возможность всю последовательность заменить на один алгоритм или попробовать как-то иначе декомпозировать весь процесс. Больше пространство для воплощения своих идей.
То, чем я занимался в Uber три месяца, было довольно сильно связано с тем, чем я сейчас занимаюсь на соревнованиях. Есть симулятор и реальность, между ними есть различия, и нужно как-то переносить опыт из симулятора в реальность. После этой стажировки я получил предложение приехать в Uber работать и получать PhD в университете Торонто. Рассматриваю это как один из вариантов после окончания магистратуры Вышки. Мне понравилось там стажироваться, и я рад, что такая возможность появилась.
— Вы именно в этой области хотели бы развиваться дальше?
— Я много путей поддерживаю, так всегда по жизни было. Сейчас попробую в Google крупномасштабным машинным обучением заниматься. Возможно, еще где-то получится… Я был бы не против продолжать работать с автономным вождением. Я там разобрался. Но, возможно, будут и какие-то другие пути, что-то другое, что будет интересно. Хорошо, когда есть возможность выбирать.