Совсем недавно закончилась очередная школа GoTo в СПб. В отличие от прошлой осени, в этот раз Питер порадовал нас большим количеством солнечных и теплых ноябрьских дней, их было целых два. В один из этих дней боевые единицы из юных и не очень программистов отправились добывать код: поцеловать незнакомых петербуржских девушек, пройти кастинг в Мариинку на эскалаторе, накормить Олега Георгиевича кровью невинного программиста и запечатлить лик Наполеона между ног коня.
В остальные дни мы по старинке делали мы не менее увлекательные проекты по биоинформатике, машинному обучению, распределенным системам и гоняли чаи на кухне с разговорами о прекрасном. Отчет ИТМО можно прочесть здесь.
Не возьмемся судить о том, что читателю интереснее, обо всем по порядку под катом.
Скажу сразу, одно из важнейших мероприятий на GoTo Camp — посвящение в программисты, или коротко — «посвят». Не будем раскрывать все тайны, скажем лишь, что командам нужно собрать некий код, выполнить задания и выбраться к финальной точке для посвящения.
Если на летних школах организаторам еще есть где разгуляться: поле, лес, лужи, то в городе не очень-то хорошо обстоят дела с ночным лесом. Предложения питерских романтиков задействовать кладбище или Неву в ноябре были очень привлекательны, но все же решили, что к такому пиару мы еще не готовы.
Решено было ограничится квестом по ночному городу, в этот прекрасный день мы знакомились с петербуржцами, впервые целовали женщин и говорили с прохожими о ГМО и блокчейне. Одна из команд решила быть оригинальнее – брала интервью на эскалаторе – в надежде, что так интеллигентному человеку сложнее убежать от разговоров о колонизации Марса:
– Ты считаешь, что надо нам на Марс лететь или нужно какие-то более насущные проблемы решать?
– Кому? Нам конкретно? Или вот этим всем?
– Да-да-да, нам и вот этим всем!
– Я думаю, что им точно надо… Если бы они улетели, я бы точно не сопротивлялся. Мне конкретно там особо делать нечего, не тороплюсь, но так как скоро всему придет п***, надо бы исследовать это направление, чисто на всякий случай…
Но как бы даже если и придет п***, то я никуда отсюда не полечу. Так что на Марс мне не надо, вот так вот…
– Спасибо.
Да, тему с поцелуями не раскрыли. Одно из питерских кафе своей акцией «кофе за неожиданный поцелуй незнакомца» натолкнуло оргов на включение в программу незабываемого приключения для многих из ребят. Вспомнив себя в этом прекрасном возрасте, вы можете представить ту бурю эмоций и представить этот неповторимый кофе со вкусом победы, комментарии излишне.
Не успевшей к закрытию кафе команде пришлось знакомиться с жертвой прямо на улице и любезнейше поцеловать хотя бы руку…
Внимательный читатель спросит, а что делали участники женского пола?
Доля женского пола на наших школах редко превышает отметку в 10 процентов, в этот раз так совсем богатый улов – до 6% еле дотянули. И да, наши прекрасные дамы первыми попивали кофе в углу.
Всего и не перечислить, благо петербуржское гостеприимство нам сопутствовало: добрые люди пускали в закрывающуюся аптеку разъяренные троицы в попытке купить какое-нибудь домашнее животное, давали интервью и советы, менялись книгами и вещами на улицах, стойко проходили испытание улыбкой и танцами, пели и играли на детские песни вместо Цоя, открывали нам закрытые двери и знакомили с городом.
Что в этом интересного? Вот вам задание на этот вечер, самое простое – попробуйте несколько раз выбрать в метро человека и просто улыбаться ему, глядя в глаза, в течение 5 минут.
Вечер прошел отлично, и даже самые простые задания показали себя хорошо: найти лицо Наполеона на том самом месте у коня Аничкова моста с ходу не смогли даже петербуржцы, а лунный свет добавил антуража неожиданному совпадению – памятник невидимке, с которой нужно было сфотографироваться команде, оказался в окрестности психбольницы.
Впрочем, не будем раскрывать все тайны, надеемся, что не последний раз в Питере.
Все вернулись здоровые и радостные, домашнее животное накормили и нарекли Олегом Георгиевичем. Сбившиеся с ног и промерзшие организаторы особенно хорошо спали в эту ночь, утром их ждал этот прекрасный день – день перед дедлайном и презентациями.
Изначально Стас Наумов задался целью сделать удобную программу для очков смешанной реальности. Суть её можно описать двумя целями:
1) Напоминания при виде цели. Пользователь может добавлять напоминания и в следующий раз, когда очки «увидят» необходимый объект, появится уведомление. Например, «снять деньги» будут отображаться, когда пользователь увидит банкомат.
2) Поиск воспоминаний. По запросу пользователя найти момент из прошлого, который отвечает на заданный вопрос. Например, на вопрос «Закрыл ли я дверь?» ответом будет фрагмент видео, где пользователь выходит из квартиры.
При текущей вычислительной мощности данные задачи очень трудно решать в режиме «онлайн», поэтому было решено свести задачу к более простой: поиска момента видео по текстовому описанию и тегирования кадров. По аналогии с DSSM: при помощи нейронных сетей создано общее пространство для картинок и текстов.
В этом пространстве одинаковые по смыслу картинки и тексты близки как точки. Этим пространством был результат предпоследнего слоя предобученной VGG16. Для текстов использовался word2vec с последующей обработкой одномерной сверточной сетью. К финальной презентации проектов в GoTo мы получили бота для поиска момента видео по текстовому описанию.
DrugRNN
Сейчас процесс разработки новых лекарств дорог и не всегда эффективен. Уже давно всей фарме хотелось бы получить метод, который бы позволил сразу генерировать наиболее подходящие структуры. В проекте Максим Манайнен обучал RNN, которая генерит молекулы для связи с заданными рецепторами при условии дополнительных параметров (AlogP, AlogD, аффинность с этим рецептором).
Процесс обучения модели аналогичен обучению модели для генерирования текста — мы кормим ей последовательности, и она учится предсказывать следующий символ при условии предыдущих. Но и здесь всё не так просто. Нам необходимо генерировать молекулы для связи с конкретными рецепторами, поэтому и обучать модель нужно на соответствующей выборке. Однако, число известных реагирующих молекул обычно крайне невелико (около 1-5 тыс.) и обучать на них RNN-ку невозможно в связи с быстрым оверфитом. Для борьбы с этим пришлось прибегнуть к transfer learning’у — сначала мы учимся генерировать абстрактные молекулы, а потом уже дообучаемся на целевой выборке. Итоговая модель генерирует 60-65% процентов валидных smile-ов до и после дообучения.
Минимумы кривых неявных вероятностей, которые нейронка расставляет смайлам при условии аффинности приближаются к настоящим значениям аффинности, что говорит о неплохом понимании особенностей молекул, реагирующих с рецептором. Были также попытки провалидировать метод с помощью докинга, но встретились проблемы интерпретирования его результатов.
Exonum-http-get-auth
Rust-библиотека для аутентификации GET-запросов в Exonum и JS-сниппет для формирования подписи лёгким клиентом.
Запрос считается корректным, если в его HTTP-заголовке X-Auth находится подпись данным ключом от типа, URL и времени отправки, и если он отправлен менее, чем 30 секунд назад (для митигации replay).
Сложности в процессе разработки проекта Степана Кузнецова были связаны с одной стороны с необходимостью разобраться в относительно большом и молодом (а значит, не всегда хорошо документированном) фреймворке, а с другой — с нетривиальной реализацией некоторых паттернов в Rust: так, в связи с использованием возврата абстрактных типов, сейчас библиотека работает только с nightly-компилятором.
Рекомендательная система образовательных курсов
Проект заключается в рекомендации курсов с различных известных ресурсов, например, Coursera, Stepik и так далее. Рекомендации производятся на основе базовой информации о пользователе (образование, владение различными языками программирования, стек технологий пользователя и др.) и на основе вакансии или аналогов.
На данный момент готова MVP версия, которая представляет собой web-приложение, в котором пользователь в несколько этапов заполняет информацию о себе, а затем получает актуальные для него курсы. В базовой версии проекта реализован алгоритм SVD-разложения на основе тегов курсов, вакансий и ключевых скилов пользователя, то есть не учитывается полное текстовое описание, что негативно влияет на качество рекомендаций. Поэтому было принято начать разбираться с применением более продвинутого подхода с DSSM, в котором будут учитываться полные текстовые описания.
Скорочтение с EPOC+
Пара студентов взялась за проекты с использованием нейроинтерфейса EPOC+ в задаче скорочтения и определения интереса к тексту. Один из возможных способов скорочтения — демонстрация текста по одному слову, при этом слова переключаются с большой скоростью. Этот способ особенно удобен для чтения на маленьких экранах, например, на мобильных телефонах. Проблемы простых приложений возникают, когда читатель задумался или отвлекся и может пропустить часть текста и уже не может легко вернуться назад. Ребята попробовали отлавливать моменты, когда пользователь теряет нить повествования и на них замедлять текст. Для задачи с вниманием — мы получали текст с разметкой на интересные и скучные или не информативные места в тексте, или просто напросто разметку нашей концентрации в процессе чтения.
В процессе реализации проекта написали и сравнили работу авторегрессионной нейросети распознающую сигналы от нейроинтерфейса, RNN, плавно начали двигаться к добавлению обучения с подкреплением для масштабирования на людей с разными паттернами.
Распознавание нот в фортепьянных произведениях
Распознавание нот в фортепианных произведениях
Нейросеть, позволяющая распознавать ноты в записанных фортепианных произведениях.
Аленой Карнауховой была реализована модель, которая переводит звуковые файлы с записью фортепьяно в их нотное представление.
Основной сетью, которая распознает ноты, являлась сверточная нейросеть (“генератор”). Она обучалась распознавать аккорды на чистых (без шумов) данных. Но если подать такой сети на вход реальные данные, она плохо справится с задачей. Поэтому параллельно с распознаванием нот сверточная сеть училась отличать реальные данные от чистых. В этом ей помогала вторая нейросеть — дискриминатор. Она брала обработанные данные с предпоследнего полносвязного слоя сверточной сети и пыталась, наоборот, научиться как можно точнее отличать зашумленные данные от чистых. Таким образом, заставляя сверточную сеть и дискриминатор “соревноваться”, модель научилась распознавать ноты в реальных фортепианных произведениях с точностью 70%.
Оценка корреляции генной экспрессии: сравнение робастных методов
Так как в биологических данных часто присутствуют шумы и выбросы, важно использовать правильные методы оценки корреляции. Но многие из них используются незаслуженно мало, хотя по теоретическим данным, они более устойчивы к определенным шумам.
За основу проекта Марии Сивцовой была взята статья «Sparse Estimation of High-dimensional Correlation Matrices», где сравнивались различные методы оценки корреляции, и проблема расчета корреляции в биологических данных — матрице экспрессии генов. Было реализовано сравнение на сгенерированных биологических данных с помощью библиотеки «Splatter» и нескольких видов шумов на двух разных группах клеток. В итоге, на небольшой выборке одни и те же методы показывали себя по-разному, но некоторые из них были очень неустойчивы к конкретным видам шумов. В целом, полученные результаты соответствовали теоретическим результатам из
статьи. В будущем планируется также использовать другие методы и рассмотреть их на новых примерах.
Остальные же радостно оставили нам по проектам только код и презентации, прошли курсы и запаслись знаниями на будущие проекты.
Ах, да, где 2 баяна, спросите вы.
Гордо захватив полностью один из хостелов с большой кухней, мы решили вспомнить истории о квартирниках и литературных клубах, и сделать свой Зеленый фонарь.
Приглашали вечерами археологов, математиков и просто вели интересные беседы с чайком из пакетика. В один из вечеров к нам в гости пришли музыканты, живые, настоящие!
До заказа колыбелен программистам мы еще не дошли, хотя сказки башкирские на ночь читали, что уж скрывать, такого треша не найдешь, не смогли не поделиться. Были это друзья нашего «культорга» Насти Ивановой-Московской (в узких кругах баба Настя) – группа «Kill the barber». Стоит отметить, что дружить с непрограммистскими школами крайне полезно, Настя руководит мастерскими в Летней школе (та, что ранее звалась ЛШ РР) и знакомит нас с большим количеством интересных людей из другого мира. Школа, кстати, крутая, завидуем белой завистью — могут уехать в леса с палатками, нам же о хорошем интернете на природе остается только мечтать. Ребята очень увлеченные, кроме гитар, играли на колокольчиках, пиле и металлофоне. Было очень трогательно и душевно, где-то ближе к концу даже самые суровые сердца программирующих в углу растаяли и отодвинули ноуты, поставив обучаться нейронки. После этого все музыкальные инструменты попали в руки программистов, это как обычно — ни в сказке сказать, ни пером описать.
Да и сама школа прошла довольно душевно, хоть и очень быстро, короткая выдалась. Но мы все успели, познакомились и провели уйму полезных часов с ИТМО, BIOCAD, BitFury, WorldQuant, IDealMachine – поговорили с Федором Царевым о том, что делать после того, как ты стал чемпионом мира по программированию, про то, зачем идти в биотех машинлернеру, про акселераторы и инвестиции, разбирались с хайпом вокруг блокчейна вместе с Exonum.
Приютило нас крайне занятное и красивое здание на Ваське, где появился первый лифт и сейчас находится Технопарк Университета ИТМО. Появилось это учреждение в начале 20-го века, было там ремесленное училище цесаревича Николая для часовых и оптических мастеров. Каждое утро нас радовала красивая лестница: на половину винтовая, на половину прямоугольная.
Зимой мы исследуем Дом-коммуну Внешэкономбанка и МИСиС, там откроют на днях Центр блокчейн-компетенций, познакомимся с советским конструктивизмом в архитектуре и не только.
Кстати, в это раз на новогодних каникулах у нас планируется параллельная школа в Берлине – эдакий воркшоп вместе с GNUnet, secushare, Matrix, CCC, C-base и другими сообществами. Нам кажется очень важным взаимодействие с зарубежными сообществами и опенсорс проектами, надеемся продвинуться в этом направлении, присоединяйтесь.
Автор: bibilov