Конкурс проектов студентов "Прикладной математики и информатики": новые темы и достижения
Проектный семинар по традиции, заложенной в прошлом году, начался во втором семестре первого курса после освоения базовых курсов по программированию на Python и С++. В этом году студентам предлагалось выбрать один из 34 проектов, придуманных для них менторами-наставниками.
“Обучение программированию — это одна из важнейших составляющих учебной программы ПМИ, — рассказывает академический руководитель программы Антон Конушин. — Но в рамках учебных курсов студенты обучаются ему на небольших стандартизованных задачах. Работа над такими задачами существенно отличается от решения реальных больших задач, с которыми придётся столкнуться студентам после выпуска. При этом программирование до сих пор остаётся в какой-то степени «ремеслом», навыки которого тяжело формализовать, а можно только передавать от «мастера» к «ученику» в процессе реальной работы. По этим двум причинам мы и ввели в учебный план обязательные «программные проекты», в ходе которых студент решают большую реальную задачу, создавая законченный программный продукт под присмотром опытного разработчика – «ментора». Каждый выпускник ПМИ за время своей учёбы должен получить такой опыт, выполнив минимум один проект, даже если после этого он с головой захочет уйти в теорию”.
В роли менторов проектов выступили приглашенные из индустрии разработчики или исследователи из научной среды. Наставники предложили самые разные проекты: от анализа рыночных рисков до компьютерной лингвистики. Многие проекты предполагали разработку популярных сейчас telegram-ботов, а также разработку нейронных сетей для разных приложений: например, для игры в го или для генерации картин в стиле какого-то художника. Как и в прошлом году, популярностью пользовалась разработка игр на Oculus Rift и проекты, связанные с анализом социальных сетей, а также в этом году к ним добавилась так популярная сейчас разработка telegram-ботов.
А в этом году призовые места распределились следующим образом:
1 место — Денис Беляков и Алексей Калинов параллельно работали над проектом “Поиск по картинкам на примере распознавания афиш” (ментор – Вадим Горбачев), но финальный шаг, не предусмотренный исходным техническим заданием – разработку telegram-бота под названием @MoviePosterBot – сделали вместе.
2 место досталось Павлу Богомолову, который разработал нейронную сеть, играющую в нарды (проект “Учимся играть в нарды", ментор Алексей Гусаков).
3 место — Павел Остяков создал сервис для рекомендации новостей (проект “Рекомендательная система”, ментор — Денис Симагин), а проект Петра Жижина “Telegram бот для мониторинга рынка недвижимости” (название бота – @the_realty_bot, ментор – Михаил Оленин) уже помог нескольким студентам ВШЭ найти съемное жилье рядом с кампусом.
Алексей Калинов,
1 место на конкурсе за проект “Поиск по картинкам на примере распознавания афиш”
(ментор – Вадим Горбачев)
Проект привлек и удивил меня сразу несколькими вещами.
Во-первых, сама идея создать поиск по картинкам мне очень понравилась: она не скучная, совсем не банальная и достаточно современная.Во-вторых, проект был не чисто на программирование, а с использованием большого количества математики. Это позволило хоть немного понять, как линейная алгебра и математический анализ используются в реальных прикладных задачах.
В-третьих, руководитель проекта оказался именно ментором-наставником, т.е. человеком, подталкивающим к решению задачи, а не решающим её за тебя.
В ходе проекта удалось немного овладеть технологиями работы с изображениями, получить опыт написания как относительно большого приложения-поиска, так и небольших парсеров и ботов, а также под конец поработать совместно с однокурсником для улучшения продукта.
О проекте: Современные поисковые системы позволяют искать информацию по различным видам запросов. Как по текстовым, так и по запросам в виде картинок, аудио или видео файлов. Предлагается рассмотреть как работает поисковая система при поиске изображений. Для этого создадим систему, реализующую основные принципы поиска по базе изображений. Нужно решить следующую практическую задачу: пользователь делает запрос в виде изображения афиши (плаката), которое он сделал, например, на свой смартфон. В ответ необходимо сообщить, что это за фильм, выдать по нему информацию или ссылку на Кинопоиск.
Полученные знания и навыки за время проектной работы:
- Основы компьютерного зрения, обработки и анализа изображений.
- Работа с библиотекой компьютерного зрения OpenCV.
- Принципы работы с изображениями как с наборами визуальных слов для эффективного поиска по изображениям.
- Общие принципы индексации и поиска в индексированных массивах данных.
- Методам нахождения и выбора гипотез (закономерностей) при сильно зашумлённых данных.
Посмотреть проект:
Репозиторий: https://bitbucket.org/mousebaiker/image-search
telegram:@MoviePosterBot
Я очень долго выбирал, на какой проект мне пойти. И выбрал именно этот из-за того, что в алгоритмах сжатия, насколько бы они скучны ни казались, очень большое пространство для размышления. Можно создать свой алгоритм, можно скомбинировать различные известные. Никто почти не ставил задачу о сжатии большого количества небольших строк. Да и так, чтобы можно было сохранить к ним быстрый доступ. Ну я решил в самом начале, что сделаю всё возможное, чтобы обогнать единственный алгоритм на эту тему в open source. Так и произошло, но ментор мне предложил идти дальше — почему бы не посоревноваться с очень известными обычными алгоритмами сжатия. Результат превзошёл себя. Алгоритм, который используется всеми на протяжении пары десятков лет (gzip), был сокрушен моим по степени сжатия и скорости сжатия в большинстве случаев. Спасибо ментору, что помог мне не бояться ставить и выполнять невозможные на первый взгляд задачи.
О проекте: Довольно часто возникает ситуация, когда имеется относительно большое число (например, миллиард) относительно небольших записей (например, длиной в сотню байт и меньше), доступ к которым осуществляется произвольным образом и имеет существенные требования по производительности (мы можем представить себе таблицу в высоко нагруженной базе данных). В таких ситуациях алгоритмы сжатия с внешним словарём оказываются существенно эффективнее потоковых алгоритмов, строящих словарь в процессе непосредственно сжатия. В проекте предлагается реализовать энтропийный алгоритм сжатия с внешним словарём и посоревноваться в скорости распаковки и степени сжатия с известным алгоритмом femtozip на разных наборах данных.
Полученные знания и навыки за время проектной работы:
- Знакомство и углубление в множество строковых алгоритмов и алгоритмов сжатия, статистики и теории вероятностей
- Оптимизация степени сжатия, времени сжатия и разжатия одновременно
- Написание надёжного и быстрого кода на С++
- Умение быстро дебажить и профилировать свой код
Посмотреть проект:
Репозиторий: https://github.com/danlark1/Kzip
Павел Богомолов,
2 место на конкурсе за проект “Учимся играть в нарды”
(ментор – Алексей Гусаков)
Проектная работа была одной из основных причин, по которым я пошел на ПМИ. Возможность получить опыт реализации интересного проекта под чутким руководством опытного человека – вот что показалось мне очень интересным. И, надо сказать, я не ошибся.
В первую очередь хочу сказать, что был достаточно широкий выбор интересных тем, очень трудно оказалось отдать предпочтение какой-то одной. Тем не менее, с самого начала ближе всего оказалась игра в нарды: во-первых, потому что всегда любил тему игр (особенно шахматы, но там уже довольно трудно сделать какой-то прорыв), а во-вторых, потому что для меня это была возможность познакомиться с методами машинного обучения.
В итоге в своем проекте я реализовал многослойную нейронную сеть, которая была обучена методом temporal difference learning. Основная идея – мы считаем, что вероятность выигрыша каждой из сторон не должна сильно поменяться за короткий промежуток времени. Поскольку функция ошибки нестандартная, градиентный спуск пришлось писать самому, да и производные все считать тоже, но это была очень интересная работа. Полученная сеть, не имея никаких данных о правилах (только входные данные – расположение шашек на доске и выигрыш/проигрыш в терминальных позициях), была обучена на большом количестве игр и давала превосходный процент побед как против стратегии, делающей случайные ходы, так и против более «умных» моделей, которые получали на вход придуманные человеком важные игровые факторы.
Я получил прекрасный опыт работы над интересной задачей и помимо этого узнал много нового, особенно мне понравилась тема машинного обучения и нейронных сетей. Думаю, я и дальше буду двигаться в этом направлении.
Еще хочется отметить сам формат общения с ментором. Все знакомые, которым я рассказываю, что спокойно переписываюсь с, можно сказать, преподавателем в социальных сетях, только удивленно разводят руками. В такой обстановке творческий процесс идет намного более активно: всегда можно задать вопрос и не допустить каких-нибудь досадных ошибок. Конечно, не все должен разъяснять ментор; для того чтобы детально понять, как работает temporal difference learning и как его применить к моей задаче, пришлось пару дней покопаться в тематической литературе, но результат того стоит.
В общем, мне очень понравилась проектная работа, надеюсь, и дальше будут такие задания!
О проекте: проект заключается в том, чтобы научить компьютер играть в нарды. Делается это с помощью машинного обучения, причём все знания, которые алгоритм имеет о мире ограничиваются тем, какие ходы возможны из конкретной позиции и тем, какой же получился результат в конце (победа или поражение). Оказывается, что за несколько тысяч игр компьютер учится неплохо играть, а при более тщательном подходе обыгрывает человека.
Полученные знания и навыки за время проектной работы:
- Знакомство и навык реализации методов машинного обучения, в частности – методов линейной регрессии и нейронных сестей
- Знакомство с понятием Temporal-difference learning
Посмотреть проект:
Демо игры: https://youtu.be/rLA9VOjNFUY
Павел Остяков,
3 место на конкурсе за проект “Рекомендательная система”
(ментор – Денис Симагин)
Проектная работа всегда привлекала меня несколько больше, чем олимпиадное программирование или решение математических задач (хотя, безусловно, и то, и другое, тоже безумно интересно). К выбору проекта я подошёл очень тщательно. Мне повезло, и я попал на тот проект, на который больше всего хотел - “Рекомендательная система”.Уже буквально через несколько дней началось активное общение с ментором, что задало начальный темп для дальнейшей работы. За два модуля проектной работы я успел познакомиться с огромным количеством новых технологий, с которыми раньше не работал. Приходилось много времени читать документацию, тестировать свои технические решения, а потом переделывать кучу раз, потому что код не проходил ревью от ментора. Порой это начинало надоедать, но потом снова появлялось желание углубиться в разработку. Грамотные подсказки от ментора и не одна тысяча строк просмотренного досконально кода очень помогали мне.В итоге, у меня получилось всё, что я задумывал. Удалось реализовать полноценную рекомендательную систему новостей, которая способна в автоматическом режиме пополнять контент, получая его с одного из популярных новостных сайтов. Всё это показывается на сайте с приятным пользовательским интерфейсом. Даже при небольшом количестве оцененных новостей, система строит достаточно качественные рекомендации. На сайте имеется также возможность просмотреть ранее оцененные новости, осуществить поиск по всей базе.
О проекте: Предполагается создание самодостаточной рекомендательной системы, которая делает следующее: 1) обходит ресурс и скачивает его статьи, 2) предоставляет интерфейс прочтения статьи и ее оценивания, 3) предлагает пользователю наиболее интересные статьи на основе его оценок
Полученные знания и навыки за время проектной работы:
- Навыки работы с UNIX-подобной системой
- Опыт работы с большим объемом текстовых данных
- Базовые навыки по машинному обучению, знакомство с популярной библиотекой Scikit learn
Посмотреть проект:
Репозиторий: https://github.com/PavelOstyakov/recommender-system
Сайт: http://new-lenta.tk/
Вадим Горбачев,
МФТИ, ГосНИИАС, начальник сектора,
Ментор проекта “Поиск по картинкам на примере распознавания афиш”
Стал ментором я совершенно случайно, практически вскочил в уходящий поезд. Буквально за неделю до даты презентации проектов я получил рассылку выпускникам ШАД о том что ФКН приглашает менторов. Такая работа мне не в новинку, я веду научную работу у студентов МФТИ. Меня несколько смутило, что работать нужно будет со студентами первого курса, обычно уровень подготовки у которых не сильный, да и время в основном у них занимает учёба. Тем не менее, решил попробовать, взять "tabula rasa" и обучить тематике, которой я занимаюсь (Computer Vision) с нуля.
Нужно отметить, результат меня приятно удивил.
Ребята не только формально выполнили задание, но и заставили всё работать достаточно качественно, что требовало заметного упорства и времени. А лучшие мои студенты, которыми я и которых отправил на конкурс, сделали ещё и бонусное задание - удобный интерфейс, telegram-бот, что вообще достойно быть отдельным проектом. Одним словом, лучшими моими студентами я искренне горжусь. Они вложились и получили отличный проект, в принципе почти готовый продукт, который может быть интересен и сторонним пользователям. Надеюсь, у меня ещё будет возможность работать с этими ребятами в дальнейшем.
Михаил Оленин,
Разработчик в команде Билинга, Яндекс
Ментор проекта “Интерактивный telegram бот”
Всем известно, что сейчас идет бум ботов для мессенджеров, про которые говорят, что за ними будущее. Сегодня с уверенностью можно сказать, что телеграм - лидер этого движения, который во многом диктует, как будет выглядеть технология в будущем. Мое знакомство с телеграмом началось с пет-прожект бота, выполняющего всякие полезные действия в нашем рабочем чатике: узнать кто дежурный админ, какой сейчас релиз, какие версии продукта выложены на сервера и прочее. Уже тогда для меня стали очевидны простота и в тоже время мощь api, который предлагает команда мессенджера.
Вторым шагом на пути менторства стало письмо в моей почте, в котором ФКН искал себе людей для обучения студентов. Я вспомнил свои школьные и студенческие годы и ощущение того, что мне очень не хватает помощи опытного человека. Поэтому выбор для меня даже не стоял, я понял, что хочу соединить свое хобби и преподавание для студентов.
Так сложилось, что в моей группе были очень мотивированные студенты, которые на первом "вводном" занятии откровенно скучали, потому что им это было слишком просто. В итоге, мы провели замечательный семестр: я рассказывал о существующих технологиях, которые можно применить, а ребята тут же применяли их на практике в своих проектах.
Все видео-записи презентаций проектов финалистов конкурса можно посмотреть на канале факультета в YouTube.