Big Data и Machine Learning? Вам на HighLoad++
Вопреки названию и первому впечатлению, которое возникает у большинства обывателей — «Big Data» не является просто «большими данными» и даже не объединяет под собой все массивы с неограниченными (или постоянно обновляющимися и расширяющимися) данными.
На самом деле «Big Data» — это в первую очередь подходы, инструменты и методы обработки непосредственно данных. Которые, в свою очередь, чаще всего не структурированы, многообразны и разнородны.
И, что наиболее важно, «Big Data» — это новая секция 2015 года в рамках программы HighLoad++, впервые предложенная, к слову, именно на встрече докладчиков. Первые, единичные, доклады, появились еще в прошлых годах:
Кстати, иллюстрация с галактикой не спроста появилась в заголовке этой статьи — астрономия как заказчик стояла у истоков сразу нескольких баз данных, широко используемых сейчас в веб-разработке.
А в этом году Программный комитет решил выделить тематику «Big Data» в отдельную секцию и, как оказалось — не зря. В секции «Big Data и машинное обучение» зарегистрировано уже 12 заявок и мы хотим познакомить вас с докладчиками.
Умные лица
Ключевой доклад, без сомнения, доклад Павла Велихова, директора по науке компании TopRater.com.
Павел получил диплом магистра компьютерных наук в 2000-м году в Университете Калифорнии Сан-Диего. В аспирантуре занимался технологиями баз данных и машинным обучением, в том числе и для статистической лингвистики. С тех пор занимается разработками в области СУБД, машинного обучения и Natural Language Processing.
Первый стартап, который основывался на магистерской работе была технология интеграции данных с использованием XML и XQuery. В 2003-ем году этот стартап купила компания BEA Systems, а сейчас он является частью компании Oracle. В 2004-м году Павел вернулся в Россию — его мечтой было у нас создать наукоёмкий стартап.
Сначала Павел помогал развивать СУБД Sedna в Институте Системного Программирования. Это тоже была XML СУБД, написанная очень сильной командой. Когда ребята поняли, что раскрутить её очень сложно — возникла идея её продать. Компания Oracle проявила интерес, но к сожалению, из-за трудностей связанных с интеллектуальной собственностью и M&A сделка не состоялась. После этого Павел некоторое время занимался семантическими технологиями, создавая систему Texterra. А в 2008-ом году присоединился к проекту SciDB Майкла Стоунбрейкера — создание массивно-параллельной СУБД для работы в таких проектах как LHC и LSST. Команда встраивала в SciDB большое количество математики и машинного обучения — и Павел загорелся идеей опять заняться этой областью более плотно. После SciDB некоторое время поработал директором по науке в стартапе News360, где в основном занимался системой рекомендаций.
Мы задали Павлу несколько вопросов и он был очень любезен найдя время ответить на них.
— Павел, почему начали и продолжаете заниматься тем, чем занимаетесь?
— С самого начала своей карьеры, когда еще учился в аспирантуре, я мечтал собрать воедино два моих основных интереса: базы данных и искусственный интеллект. Тогда термин AI — был словом ругательным (после очередного хайпа в этой области), и я долго занимался внутренностями СУБД. В проекте Toprater.com мы создаем платформу для социального много-критериального выбора. То есть по большому количеству сфер мы обрабатываем мнения людей с помощью нашей технологии, и превращаем это в систему критериев. Мы много усилий вложили в создание технологии понимания мнений, качество которой сейчас на мировом уровне. Так что в этом проекте для меня сошлись наконец мои научные и инженерные интересы. Ну а так же приходится разрабатывать свои системы, например поисковый движок.
— Какие интересные задачи приходится решать на работе?
— У нас сейчас самый интересный период в развитие стартапа, мы готовимся выйти на рынок B2C, одновременно мы сотрудничаем с ведущими e-commerce компаниями в формате B2B. И, с одной стороны мы решаем сложные научно-исследовательские задачи в понимании текстов, потом мы разворачиваем кластеры для быстрой обработки терабайт данных, мы создали систему сквозного версионирования данных. С другой стороны иногда мы решаем в очень сжатые сроки задачи очистки и сопоставления данных, чтобы быстро запустить очередную сферу или проинтегрировать данные очередного партнера. По максимуму мы используем инструменты машинного обучения, и у нас уже завелась традиция устраивать внутренние хакатоны для решения таких задач.
Также, всю функциональность нашей системы мы прячем под API, чтобы продукты сверху него могла разрабатывать не только наша команда, но и сторонние разработчики. Это часть нашей стратегии — мы активно приглашаем сторонние команды участвовать в нашем проекте. Но создание качественного API — тоже задача непростая, оно должно быть максимально простым и минимальным, и с хорошей документацией, а постоянные новые требования грозят его превратить в сложного монстра. Здесь мы тоже постоянно ищем баланс и компромиссы.
Про спортивный анализ данных расскажет Михаил Трофимов из «Авито», которому мы также задали аналогичные вопросы и даже получили ответы!
Между тем, Михаил родился-учился в городе Шахты ростовской области, был призером областных олимпиад по математике, закончил физико-математическую гимназию с отличием, в 2010 поступил в МФТИ, факультет управления и прикладной математики. С третьего курса заинтересовался анализом данных, через год выиграл первый конкурс на Kaggle. С 2014 Михаил работает в «Авито».
— Михаил, в каких соревнованиях вы участвовали?
— Участвовал во множестве конкурсов, внешне они формулировались как:
Несмотря на внешнюю «разношерстность», решаются эти задачи во многом одинаковыми способами.
— Правильно ли, что речь о соревнованиях Kaggle? Какие-то еще?
— Kaggle — не единственная платформа (и не самая старая), но определенно самая «живая» в настоящий момент.
В основном да, я участвую на Kaggle, но кроме — участвовал в паре оффлайн хакатонов и в соревнований других платформ.
— Почему начали и продолжаете заниматься тем, чем занимаетесь?
— Однажды, пару лет назад, я с командой участвовал в соревновании бизнес-кейсов, и там была задачка на анализ данных.
Ни у меня, ни у моим товарищей не было подобного опыта — и потому мы придумали очень простое решение, основанное на ручных правилах и эвристиках. Потратили кучу времени, в итоге получили 4-е место. А команда победителей просто применила один из методов машинного обучения.Поскольку призом были iPad'ы, а я очень хотел себе такой — я решил постфактум разобраться, что же такого сделали победители, чего не хватило нам. В тот момент и началось мое знакомство с машинным обучением, которое позже переросло в настоящее увлечение и дипломную работу. К слову, iPad я таки получил, но уже в другом конкурсе :)
Для меня конкурс — это возможность узнать что-то новое, размять смекалку и наблюдательность. Сменно смекалку — чаще именно анализ данных и нестандартный взгляд на задачу, а не алгоритмы машинного обучения, играют решающую роль. Я продолжаю участвовать в подобных соревнованиях, чтобы расширять свой кругозор и быть в курсе свежих идей и инструментов.
— Можно пару баек? Например, что была за задача, насколько сложно было её решать?
— Одно из первых соревнований, в котором я участвовал, было на предсказание многомерного временного ряда. Перепробовав кучу вариантов, я не смог сделать решение лучше, чем «последнее значение, домноженное на константу», причем константу это подобрал с точностью до третьего знака. Мой товарищ, участвовавший в этом же соревновании, оказался на 4 позиции — потому, что подобрал ту же константу с точностью до четвертого знака. Это соревнование научило меня тому, что решение конкурса — это далеко не всегда сложные модели или безумные математические формулы. И что точность вычислений — это порой очень важно.
Еще один забавный случай произошел не так давно, когда в команде решали MIscrosoft Malware Classification Challenge. Одна из фишка соревнования была в том, что данных — 400 гб данных. И вот уже за сутки до конца мы, в попытке дожать качество до попадания в топ-10, решили посчитать байтовые 10-граммы (это значит, что нужно было посчитать частоты встречаемости всех последовательностей из 10 байт). Нетрудно прикинуть, что число таких последовательностей — 256^10. Их посчитать проблема, не то что отбор провести. Но нам хватило отваги, использую несколько технических фишек, таки посчитать, произвести отбор и добавить их в модель. Засылали решение в последние 15 секунд перед закрытием. Успели, в итоге с пятнадцатой позиции взлетели на третью. Незабываемо!
— Какие интересные задачи приходится решать на работе?
— Задач много, задачи разные, каждая — по своему уникальна. Иногда сложность (=интересность) заключается в объеме данных (их может быть как очень много, так и очень мало), иногда — в самой постановке. Одно из ярких впечатлений — задача определения цены авто. По существу, это задачка о коррекции запроса к базе данных с целью получить максимально похожий срез, но содержащий не менее заданного числа объектов — и мы с Иваном (Гузом) смогли придумать достаточно красивое решение, на мой взгляд.
В остальном — никому ведь не нужно здесь объяснять, почему «3» это красивое число, так что мы пообщались с еще одним «практическим» докладчиком — Константином Игнатовым из QRator Labs, занимающимся машинным обучением для подготовки к гигабитной DDoS-атаке.
Константин — выпускник МГТУ им. Баумана (Информатика и управление, системы автоматического управления) и Высшей Школы Экономики (Бизнес-информатика, Корпоративные информационные системы), инженер-разработчик в отделе исследований Qrator Labs. Доклад Константина на HighLoad++ будет некоторым введением в машинное обучение, в ходе которого он покажет все перечисленные виды задач, как они связаны с друг с другом, объяснит, какие принципы используются для их решения и, наконец, сколько времени нужно на обучение и предсказание.
Для начала, я бы хотел подчеркнуть, что мы — security-компания. То есть, у нас есть цель — обеспечить доступность ресурсов клиента в интернете. А есть злоумышленники, их цель — обеспечить недоступность нашего клиента как минимум на какое-то время. В результате мы находимся в постоянной борьбе, и ошибки одной стороны, наверняка, будут использованы другой.
Как обычно, действует принцип «мыслить как преступник», то есть, чтобы злоумышленников остановить, мы должны понимать, как они будут действовать.
Например, ходит пользователь по сайту, кликает мышкой, в формах что-то набирает, браузер посылает запросы. Какие-то из этих запросов браузер делает почти по собственной воле (например, статику подгружает), а какие-то — связаны напрямую с действиями пользователя. Некоторые из этих запросов, могут обрабатываться дольше других, скажем
GET /search?q=...
Злоумышленник может это заметить и попробовать направить к сайту много таких запросов подряд, исчерпывая ресурсы, необходимые для обработки «нормальных» запросов.В ответ на это можно, например, ввести кэширование ответов, но тогда злоумышленник просто добавит разнообразия в параметр
q=...
В таком случае можно ввести ограничение на количество запросов в секунду с одного IP для /search, но злоумышленник начнёт использовать много IP адресов (скажем, купит ботнет). В ответ можно, например, запретить делатьGET /search
в качестве первого запроса, т.е. требовать установки куки с любой другой страницы сайта, но злоумышленник быстро поймёт фишку и начнёт делать запросы парами…В пределе, такое взаимодействие можно рассматривать с двух точек зрения — стратегической и тактической.
Стратегически, просто важно, кто потратил больше денег: если для хоть сколько-нибудь значимого успеха злоумышленнику требуется бюджет, которого у него нет и не будет, то можно считает угрозу ликвидированной. Наши «ходы» здесь — вынуждать злоумышленников использовать максимально дорогое оборудование и, что, пожалуй, важнее — ручной высокоинтеллектуальный труд — мы хотим, чтобы для атаки каждого защищаемого нами ресурса приходилось покумекать отдельно. Свои же действия мы максимально автоматизируем, а дорогое оборудование — используем рационально.
Тактически, описанная выше задача сводится:
- Для нас: к поиску посетителей сайта, которые ведут себя странно и при этом создают значительную нагрузку;
- Для злоумышленника: к написанию таких ботов, которые будут очень хорошо маскироваться под настоящих пользователей, но при этом «вышибать» сайт.
Поскольку, как я только что отметил, свою задачу мы хотим максимально автоматизировать, мы используем машинное обучение. При этом мы сталкиваемся со всеми видами ML:
- С необходимостью предсказывать нагрузку (например, чтобы понять. при каких условиях бэкенд «ляжет»), т.е. с регрессией;
- С необходимостью понять, происходит ли вообще, атака, или кто-то просто привлёк много легитимных пользователей, т.е. с классификацией;
- С необходимостью искать группы посетителей, обладающих тем или иным свойством, т.е. либо с кластеризацией, либо с поиском аномалий.
И список, конечно, не полный.
Ну а «полный список» вы сами знаете где и когда, так что — до встречи!
И последнее: Для пользователей «Хабрахабра» конференция предлагает специальную скидку в 15%, все что нужно сделать — это воспользоваться кодом "IAmHabr" при бронировании билетов.